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)
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:
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
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.
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;
/