Kihagyás

8. gyakorlat

Kezdetek: ZH review (Sir Rol üzeni: félév végén alkuképes a jegy, ha valaki kétesre áll)

1. feladat

Növeljük meg mindenkinek a jutalékát a jelenlegi maximális jutalékkal (NULL-t tekintsük nullának)

UPDATE dolgozo2
SET jutalek = (SELECT MAX(jutalek) FROM dolgozo2)+NVL(jutalek, 0);

2. feladat

Növeljük meg azon dolgozók fizetését a maximális fizetéssel, akiknek van beosztottja

UPDATE dolgozo2 SET 
    fizetes = fizetes + (SELECT MIN(fizetes) FROM dolgozo2)
WHERE dkod IN (SELECT fonoke FROM dolgozo2);

vagy

UPDATE dolgozo2 fonoke
SET fizetes = fizetes + (SELECT MIN(fizetes) FROM dolgozo2)
WHERE (SELECT COUNT(*)
       FROM dolgozo2 beosztott
       WHERE beosztott.fonoke = fonok.dkod) > 0;

Egy-két slide a nézetekkel kapcsolatban

  • Egyszerű nézeket
    • Csak egyetlen táblát érint
    • Csoportosításokat és függvényeket nem használhatunk
  • Komplex nézetek
    • Több táblát is felhasználunk
    • Használhatunk csoportosításokat és függvényeket

Új nézet létrehozása:

CREATE VIEW <nézet neve> AS <lekérdezés>;

A DESCRIBE parancs visszaadja az adott nézet struktúráját.

CREATE OR REPLACE VIEW - Létrehozza a nézetet, vagy kicseréli a régit, ha már létezik

A szerkesztő műveletek (törlés, frissítés etc.) nem működik

DROP VIEW <nézet neve>;
CREATE OR REPLACE VIEW oszt10 AS
SELECT dnev, fizetes
FROM dolgozo
WHERE oazon = 10;

Az érdekes és hasznos témakör (PLSQL)

DECLARE
-- Változók deklarációja IDE
BEGIN
    -- BEGIN és END között legalább egy utasításnak kell lennie (atm. NULL)
    NULL;
END;
/ -- I shit you not, ez a per kell

A Hello World nem olyan egyszerű, mert nincs sima terminál. Használuk a DBMS kimenetet.

View -> DBMS Output

Hello world

DECLARE
    message VARCHAR2(20) := 'Hello World!';
BEGIN
    dbms_output.put_line(message);
    dbms_output.put_line('Hello World!');
END;
/

Típusok detour

Táblázat legyen vagy felsorolás?

Típus Felhasználás
INTEGER Szám
REAL Szám
DOUBLE PRECISION Szám
NUMERIC Szám
CHAR (fix hossz) Szöveg
VARCHAR2 (változó hossz) Szöveg
LONG (hosszabb karakterláncok) Szöveg
BOOLEAN Logikai értékek
DATE Dátum

pl.

num INTEGER;

char CHAR(10);

Feladat

DECLARE
    a INTEGER := 10;
    b CONSTANT INTEGER := 20;
    c INTEGER;
BEGIN
    c := a + b;
    dbms_output.put_line('Value of c: ' || c);
END;
/

Lekérdezések tárolása

DECLARE
    my_kod dolgozo.dkod%type := 7839;
    my_dnev dolgozo.dnev%type;
    my_fizetes dolgozo.fizetes%type;
BEGIN
    SELECT dnev, fizetes
    INTO my_dnev, my_fizetes
    FROM dolgozo
    WHERE dkod = my_kod;
    dbms_output.put_line(my_dnev);
END;
/

Egész sorokat is el tudunk tárolni a változókban

DECLARE
    my_kod dolgozo.dkod%type := 7839;
    my_dolgozo dolgozo%rowtype;
BEGIN
    SELECT *
    INTO my_dolgozo
    FROM dolgozo
    WHERE dkod = my_kod;
    dbms_output.put_line(my_dolgozo.dkod);
END;
/

For és if ciklus

DECLARE
BEGIN
    -- Mind a két irányból zárt intervallum
    FOR i IN 0..10 LOOP
        IF i < 5 THEN
            dbms_output.put_line('Less than 5!');
        ELSE
            dbms_output.put_line('Greater than 5!');
        END IF;
    END LOOP;
END;
/

While ciklus

DECLARE
    i INTEGER := 0;
BEGIN
    -- Mind a két irányból zárt intervallum
    while i < 10 LOOP
        IF i < 5 THEN
            dbms_output.put_line('Less than 5!');
        ELSE
            dbms_output.put_line('Greater than 5!');
        END IF;
        i := i + 1;
    END LOOP;
END;
/