Programozás | SQL » Oracle SQL összefoglaló feladatok, megoldással, 2005

Alapadatok

Év, oldalszám:2005, 33 oldal

Nyelv:magyar

Letöltések száma:967

Feltöltve:2006. január 23.

Méret:289 KB

Intézmény:
-

Megjegyzés:

Csatolmány:-

Letöltés PDF-ben:Kérlek jelentkezz be!



Értékelések

Nincs még értékelés. Legyél Te az első!

Tartalmi kivonat

SQL ÖSSZEFOGLALÓ FELADATSOROK A. Feladatsor Az alábbi feladatokat megoldó programokat és azok futási eredményeit, ellenőrző listáit a főkönyvtár hallgató nevű könyvtárában az Ön nevét tartalmazó Word dokumentumba (pl. C:hallgatóSasPál 1kurzus Adoc) tárolja, majd ezt zip formátumba tömörítve küldje el egy e-mail-hez csatolva a doboz123@freemailhu címre A részmegoldásokat próbafuttatásokkal ellenőrizze, és ezeket is dokumentálja. Az utasításokat struktúrált módon írja. Segítségként csak az Oracle Help funkciója, és a tankönyvek használhatók A1. Feladat Konzisztens módon hozzon létre egy dolgozó8 nevű táblát az emp tábla azon dolgozóiból, akik 1980 és 1985 között léptek be, és a főnökük fizetése 2400 USD-nél több, majd egy részleg8 nevű táblát a dept táblából. E táblák létrehozása előtt győződjön meg róla, hogy az adott néven nem létezik-e már másik objektum (user catalog), és ha igen, törölje

azt. A további feladatok e táblákra vonatkoznak. A megoldások során rendszeresen alkalmazzon nézettáblákat! A2. Feladat Egy szkript programban végezzen megszorítás hozzáadást, ellenőrzést és visszaállítást (ROLLBACK) az alábbi módon: Lássa el hivatkozási megszorítással a dolgozó8 táblában az mgr oszlopot olymódon, hogy a hivatkozott oszlop az empno legyen. Kisérelje meg egy főnök törlését, majd törölje ezt a főnököt a beosztottai előzetes törlése után. Listázással ellenőrizze e műveletek végrehajtását, majd visszaállítás után annak hatását A3. Feladat Bővítse a dolgozó8 táblát egy jutalom oszloppal, és töltse fel ezt olymódon, hogy akinek nagyobb a jövedelme, mint részlegének átlagjövedelme, az 400 USD jutalmat kapjon, a többiek pedig 800 USD-t. A4. Feladat Listázza formázva (fej-, és lábléccel, stb.) a dolgozók nevét, munkakörét, a részlegének nevét, a jutalmat is tartalmazó összjövedelmét, a

főnökének nevét és a főnök telephelyének nevét, elsődlegesen a főnök neve szerint növekvően, másodlagosan az összjövedelem szerint csökkenően rendezve. Ha egy dolgozónak nincs főnöke, akkor a főnök adatainak helyére írja ki, hogy "nincs főnöke". A5. Feladat A felhasználó által megadott munkakörben, ha létezik második legnagyobb fizetésű dolgozó, akkor annak (vagy azoknak) a fizetését növelje meg éppen annyival, hogy az legyen a legnagyobb. Ha ilyen nem létezik, akkor a fizetések ne változzanak. Listázza a megadott munkakör dolgozóit a fizetésük szerint csökkenő, a nevük szerint pedig növekvő sorrendben a fenti módosítás előtt és után. A listázás után állítsa vissza az eredeti állapotot Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) -1- B. Feladatsor Az alábbi feladatokat megoldó programokat és azok futási eredményeit, ellenőrző listáit a főkönyvtár hallgató nevű

könyvtárában az Ön nevét tartalmazó Word dokumentumba (pl. C:hallgatóSasPál 1kurzus Bdoc) tárolja, majd ezt zip formátumba tömörítve küldje el egy e-mail-hez csatolva a doboz123@freemailhu címre A részmegoldásokat próbafuttatásokkal ellenőrizze, és ezeket is dokumentálja. Az utasításokat struktúrált módon írja. Segítségként csak az Oracle Help funkciója, és a tankönyvek használhatók B1. Feladat Konzisztens módon hozzon létre egy dolgozó8 nevű táblát az emp tábla azon dolgozóiból, akiknek minden közvetlen beosztottja 1000 USD-nél magasabb jövedelemmel rendelkezik, majd egy részleg8 nevű táblát a dept táblából. E táblák létrehozása előtt győződjön meg róla, hogy az adott néven nem létezik-e már másik objektum (user catalog), és ha igen, törölje azt A további feladatok e táblákra vonatkoznak. A megoldások során rendszeresen alkalmazzon nézettáblákat! B2. Feladat Egy szkript programban végezzen megszorítás

hozzáadást, ellenőrzést és visszaállítást (ROLLBACK) az alábbi módon: Egy MANAGER munkakörű dolgozó csak 2000 és 3000 USD tartománybeli fizetést kaphat. Kiséreljen meg egy megfelelő és egy nem megfelelő rekordot felvinni. Listázással ellenőrizze e műveletek végrehajtását, majd visszavonás után annak hatását. B3. Feladat Bővítse a dolgozó8 táblát egy jutalom oszloppal, és töltse fel ezt olymódon, hogy akinek valamelyik közvetlen beosztottja az ő jövedelmének felénél többet keres, az 1000 USD jutalmat kapjon, a többiek pedig 600 USD-t. B4. Feladat Listázza formázva (fej-, és lábléccel, stb.) a dolgozók nevét, munkakörét, a részlegének nevét, a jutalmat is tartalmazó összjövedelmét és a főnökének nevét, valamint telephelyét elsődlegesen a főnök neve szerint növekvően, másodlagosan az összjövedelem szerint csökkenő módon rendezve. Ha egy dolgozónak nincs főnöke, akkor a főnök nevének helyére írja ki,

hogy "=nincs főnöke=". Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) -2- C. Feladatsor Az alábbi feladatokat megoldó programokat és azok futási eredményeit, ellenőrző listáit a főkönyvtár hallgató nevű könyvtárában az Ön nevét tartalmazó Word dokumentumba (pl. C:hallgatóSasPál 1kurzus Cdoc) tárolja, majd ezt zip formátumba tömörítve küldje el egy e-mail-hez csatolva a doboz123@freemailhu címre A részmegoldásokat próbafuttatásokkal ellenőrizze, és ezeket is dokumentálja. Az utasításokat struktúrált módon írja. Segítségként csak az Oracle Help funkciója, és a tankönyvek használhatók C1. Feladat Konzisztens módon hozzon létre egy dolgozó8 nevű táblát az emp tábla azon dolgozóiból, akik 1980.február 1 és 1987május 1 között léptek be, és ha van főnökük, akkor az legfeljebb 4000 USD-t keres, továbbá egy részleg8 nevű táblát a dept táblából E táblák létrehozása előtt

vizsgálja meg, hogy az adott néven létezik-e már másik objektum (user catalog), és ha igen, törölje azt. A további feladatok e táblákra vonatkoznak A megoldások során rendszeresen alkalmazzon nézettáblákat! C2. Feladat Egy szkript programban végezzen megszorítás hozzáadást, ellenőrzést és visszaállítást (ROLLBACK) az alábbi módon: A 2000 USD-nél nagyobb fizetésű dolgozók nem kaphatnak jutalékot. Kiséreljen meg egy megfelelő és egy nem megfelelő rekordot felvinni. Listázással ellenőrizze e műveletek végrehajtását, majd visszaállítás után annak hatását. C3. Feladat Bővítse a dolgozó8 táblát egy jutalom oszloppal, és töltse fel ezt a következő módon: A három legkisebb fizetésű dolgozó kapja meg egyszeri jutalomként a fizetésének 20 %-át, a három legnagyobb fizetésű a fizetésének 5 %-át, a többiek pedig a fizetésük 10 %-át. Ha valamelyik dolgozóra több feltétel is teljesül, akkor a legkisebbnek megfelelő

jutalmat kapja. C4. Feladat Listázza formázva (fej-, és lábléccel, stb.) a dolgozók nevét, munkakörét, részlegének nevét, a jutalmat is tartalmazó összjövedelmét, a főnökének nevét, és annak telephelyét elsődlegesen a részleg neve szerint növekvően, másodlagosan a összjövedelem szerint csökkenő módon rendezve. Ha egy dolgozónak nincs főnöke, akkor a főnök adatainak helyére írja ki, hogy "nincs főnök". Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) -3- MEGOLDÁSOK A. Feladatsor A1. Feladat Konzisztens módon hozzon létre egy dolgozó8 nevű táblát az emp tábla azon dolgozóiból, akik 1980 és 1985 között léptek be, és a főnökük fizetése 2400 USD-nél több, majd egy részleg8 nevű táblát a dept táblából. E táblák létrehozása előtt győződjön meg róla, hogy az adott néven nem létezik-e már másik objektum (user catalog), és ha igen, törölje azt. A további feladatok e táblákra

vonatkoznak. A megoldások során rendszeresen alkalmazzon nézettáblákat! Megoldás 0.1 lépés (Az emp tábla és a megjelenítés inicializálása) -- @INIT1 -- Feltételezve, hogy az INIT1.sql a BIN könyvtárban van ALTER SESSION SET NLS DATE FORMAT = YYYY-MM-DD; SET numwidth 5 A munkamenet módosítva. 0.2 lépés (Az esetlegesen létező azonos nevű objektumok törlése) SELECT * FROM user catalog; TABLE NAME -----------------------------BONUS SALGRADE BIN$cf3RznwPTY+EvudRGHkQpA==$0 BIN$LyCk51gPQeGFtY6Vzpoqeg==$0 BIN$jbjmAQQlSP687PyXQeaGdA==$0 BIN$rFi9sCIrRUeZCwogOPc5ng==$0 BIN$HRjtpgeGS7+61D7GZeNSSQ==$0 BIN$0ySrJpEOQHSFkvoBFw6ReQ==$0 BIN$QUd8b6c8T7SJiG7sviD5MA==$0 BIN$wZ9aIlWzRSC4P2K5pQ3eKg==$0 DOLGOZÓ8 BIN$N+QGkUEwTGOeKajQfjBuVA==$0 BIN$R3gv3phyTYqHZ32rQOfM5Q==$0 BIN$dtyJYaRQQ4OXGTMY44AILQ==$0 BIN$+8fzRwI0TN+2frz59c9RxQ==$0 BIN$+O5j8FZGSmSddxZD0RkLQg==$0 BIN$Hl6MRiGSRA6TUyMVFn5z9g==$0 BIN$opEaC97PRMGFNZAr6GxRsw==$0 EMP BIN$HLIO/j11SWqL0BHKSp4V+w==$0 DEPT

BIN$KWlSQ3NGQaiZkLDahyGHwQ==$0 BIN$7cWjDm8CRnugRC8rQ77uUw==$0 RÉSZLEG8 TABLE TYPE ----------TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE VIEW TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE 24 sor kijelölve. DROP VIEW dolgozó8; DROP TABLE részleg8; A nézet eldobva. A tábla eldobva. Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) -4- 1. lépés (A dolgozó8 tábla létrehozása) -- A megfelelő dolgozók listája az eredeti táblában: SELECT d.*, f.ename AS Főnök, f.sal AS FőnökFiz FROM emp d, emp f WHERE TO CHAR(d.hiredate,YYYY) BETWEEN 1980 AND 1985 d.mgr = fempno f.sal > 2400; EMPNO ----7698 7782 7566 7654 7499 7844 7900 7521 7902 7369 7934 ENAME ---------BLAKE CLARK JONES MARTIN ALLEN TURNER JAMES WARD FORD SMITH MILLER AND AND JOB MGR HIREDATE SAL COMM DEPTNO FŐNÖK FŐNÖKFIZ --------- ----- ---------- ----- ----- ------ ---------- -------MANAGER 7839 1981-05-01 2850 30 KING 5000 MANAGER

7839 1981-06-09 2450 10 KING 5000 MANAGER 7839 1981-04-02 2975 20 KING 5000 SALESMAN 7698 1981-09-28 1250 1400 30 BLAKE 2850 SALESMAN 7698 1981-02-20 1600 300 30 BLAKE 2850 SALESMAN 7698 1981-09-08 1500 0 30 BLAKE 2850 CLERK 7698 1981-12-03 950 30 BLAKE 2850 SALESMAN 7698 1981-02-22 1250 500 30 BLAKE 2850 ANALYST 7566 1981-12-03 3000 20 JONES 2975 CLERK 7902 1980-12-17 800 20 FORD 3000 CLERK 7782 1982-01-23 1300 10 CLARK 2450 11 sor kijelölve. Megjegyzés A származtatott dolgozó8 táblában csak azok lehetnek főnökök, akik dolgozók is, ám a fenti lista alapján létrehozható adattábla ezt még nem biztosítja, hiszen a KING főnökként szerepel, holott az adott kiválasztásban nincs a dolgozók között. Ez inkonzisztenciát (adatellentmondást) okozna! A dolgozó8 adattábla konzisztenciáját azáltal biztosíthatjuk, hogy mindazon dolgozók mgr kódját NULL értékkel helyettesítjük, akiknek főnökük a származtatott adattáblába nem került be. Az ehhez

szükséges vizsgálat érdekében létrehozzuk az alábbi dolgozónézet nézettáblát. -- A megfelelő dolgozók nézettáblája: CREATE OR REPLACE VIEW dolgozónézet AS SELECT d.* FROM emp d, emp f WHERE TO CHAR(d.hiredate,YYYY) BETWEEN 1980 AND 1985 d.mgr = fempno f.sal > 2400; SELECT * FROM dolgozónézet; -- A megfelelelő dolgozók konzisztens adattáblája: DROP TABLE dolgozó8; CREATE TABLE dolgozó8 AS SELECT empno, ename, job, CASE WHEN mgr IN (SELECT empno FROM dolgozónézet) THEN mgr ELSE NULL END AS mgr, hiredate, sal, comm, deptno FROM dolgozónézet; DROP VIEW dolgozónézet; SELECT * FROM dolgozó8; A nézet létrejött. Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) -5- AND AND EMPNO ----7698 7782 7566 7654 7499 7844 7900 7521 7902 7369 7934 ENAME ---------BLAKE CLARK JONES MARTIN ALLEN TURNER JAMES WARD FORD SMITH MILLER JOB MGR HIREDATE SAL COMM DEPTNO --------- ----- ---------- ----- ----- -----MANAGER 7839 1981-05-01 2850 30

MANAGER 7839 1981-06-09 2450 10 MANAGER 7839 1981-04-02 2975 20 SALESMAN 7698 1981-09-28 1250 1400 30 SALESMAN 7698 1981-02-20 1600 300 30 SALESMAN 7698 1981-09-08 1500 0 30 CLERK 7698 1981-12-03 950 30 SALESMAN 7698 1981-02-22 1250 500 30 ANALYST 7566 1981-12-03 3000 20 CLERK 7902 1980-12-17 800 20 CLERK 7782 1982-01-23 1300 10 11 sor kijelölve. A tábla eldobva. A tábla létrejött. A nézet eldobva. EMPNO ----7698 7782 7566 7654 7499 7844 7900 7521 7902 7369 7934 ENAME ---------BLAKE CLARK JONES MARTIN ALLEN TURNER JAMES WARD FORD SMITH MILLER JOB MGR HIREDATE SAL COMM DEPTNO --------- ----- ---------- ----- ----- -----MANAGER 1981-05-01 2850 30 MANAGER 1981-06-09 2450 10 MANAGER 1981-04-02 2975 20 SALESMAN 7698 1981-09-28 1250 1400 30 SALESMAN 7698 1981-02-20 1600 300 30 SALESMAN 7698 1981-09-08 1500 0 30 CLERK 7698 1981-12-03 950 30 SALESMAN 7698 1981-02-22 1250 500 30 ANALYST 7566 1981-12-03 3000 20 CLERK 7902 1980-12-17 800 20 CLERK 7782 1982-01-23 1300 10 11 sor

kijelölve. 2. lépés (A részleg8 tábla létrehozása) DROP TABLE részleg8; CREATE TABLE részleg8 AS SELECT * FROM dept; SELECT * FROM részleg8; A tábla eldobva. A tábla létrejött. DEPTNO -----10 20 30 40 DNAME -------------ACCOUNTING RESEARCH SALES OPERATIONS LOC ------------NEW YORK DALLAS CHICAGO BOSTON Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) -6- A2. Feladat Egy szkript programban végezzen megszorítás hozzáadást, ellenőrzést és visszaállítást (ROLLBACK) az alábbi módon: Lássa el hivatkozási megszorítással a dolgozó8 táblában az mgr oszlopot olymódon, hogy a hivatkozott oszlop az empno legyen. Kisérelje meg egy főnök törlését, majd törölje ezt a főnököt a beosztottai előzetes törlése után. Listázással ellenőrizze e műveletek végrehajtását, majd visszaállítás után annak hatását Megoldás -- A dolgozó8 és a részleg8 táblák megszorításai: BREAK ON Tulajdonos ON TablaNeve COLUMN

Tulajdonos FORMAT A10 HEADING "|Tulajdonos" COLUMN TablaNeve FORMAT A10 HEADING "|TáblaNév" COLUMN OszlopNeve FORMAT A12 HEADING "|OszlopNév" COLUMN Megszoritas FORMAT A17 HEADING "Megszorítás|Neve" COLUMN Tipus FORMAT A6 HEADING "|Tipusa" COLUMN Leiras FORMAT A22 HEADING "|Leírása" SELECT SUBSTR(LOWER(user constraints.owner),1,10) Tulajdonos, SUBSTR(LOWER(user constraints.table name),1,10) TablaNeve, RPAD(user cons columns.column name,12) OszlopNeve, SUBSTR(user constraints.constraint name,1,20) Megszoritas, RPAD(user constraints.constraint type,6) Tipus, user constraints.search condition Leiras FROM user constraints, user cons columns WHERE (user constraints.constraint name = user cons columns.constraint name) AND (LOWER(user constraints.table name) IN (dolgozó8,részleg8)) ORDER BY Tulajdonos ASC, TablaNeve ASC, OszlopNeve ASC; CLEAR BREAKS CLEAR COLUMNS Tulajdonos TáblaNév OszlopNév ---------- ----------

-----------scott dolgozó8 DEPTNO EMPNO részleg8 DEPTNO Megszorítás Neve ----------------SYS C005641 SYS C005640 SYS C005642 Tipusa -----C C C Leírása ---------------------"DEPTNO" IS NOT NULL "EMPNO" IS NOT NULL "DEPTNO" IS NOT NULL breaks törölve columns törölve Megjegyzés Mivel definíció szerint az mgr oszlophoz csak akkor lehet hozzárendelni hivatkozási megszorítást, ha az általa hivatkozott empno oszlop rendelkezik elsődleges kulcs megszorítással, ezért először ezt kell létrehozni. ALTER TABLE dolgozó8 ADD CONSTRAINT kulcs PRIMARY KEY (empno); ALTER TABLE dolgozó8 ADD CONSTRAINT hivatkozó FOREIGN KEY (mgr) REFERENCES dolgozó8 (empno); A tábla módosítva. A tábla módosítva. -- Ekkor a dolgozó8 tábla megszorításai: COLUMN table name FORMAT A11 COLUMN constraint name FORMAT A16 COLUMN constraint type FORMAT A20 COLUMN search condition FORMAT A20 SELECT table name, constraint name, constraint type, search

condition FROM user constraints WHERE LOWER(table name) = dolgozó8; Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) -7- CLEAR COLUMNS TABLE NAME ----------DOLGOZÓ8 DOLGOZÓ8 DOLGOZÓ8 DOLGOZÓ8 CONSTRAINT NAME ---------------HIVATKOZÓ KULCS SYS C005521 SYS C005520 CONSTRAINT TYPE -------------------R P C C columns törölve Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) -8- SEARCH CONDITION -------------------- "DEPTNO" IS NOT NULL "EMPNO" IS NOT NULL Ellenőrzés 1. Kísérlet (Sikertelen törlés) DELETE FROM dolgozó8 WHERE UPPER(ename) = BLAKE; DELETE FROM dolgozó8 * Hiba a(z) 1. sorban: ORA-02292: integritás megszorítás (SCOTT.HIVATKOZÓ) megsértés - gyermek rekord található meg 2. Kísérlet (Sikeres törlés) -- Először a Blake közvetlen beosztottjait töröljük ki: DELETE FROM dolgozó8 WHERE ename IN (SELECT d.ename FROM dolgozó8 d, dolgozó8 f WHERE d.mgr = fempno AND UPPER(f.ename) =

BLAKE); 5 sor törölve. -- Ezután már kitörölhető maga a Blake is: DELETE FROM dolgozó8 WHERE UPPER(ename) = BLAKE; 1 sor törölve. SELECT * FROM dolgozó8; EMPNO ----7782 7566 7902 7369 7934 ENAME ---------CLARK JONES FORD SMITH MILLER JOB MGR HIREDATE SAL COMM DEPTNO --------- ----- ---------- ----- ----- -----MANAGER 1981-06-09 2450 10 MANAGER 1981-04-02 2975 20 ANALYST 7566 1981-12-03 3000 20 CLERK 7902 1980-12-17 800 20 CLERK 7782 1982-01-23 1300 10 -- Állítsuk vissza a törlés előtti állapotot: ROLLBACK; SELECT * FROM dolgozó8; A visszaállítás befejeződött. EMPNO ENAME JOB MGR ----- ---------- --------- ----7698 BLAKE MANAGER 7782 CLARK MANAGER 7566 JONES MANAGER 7654 MARTIN SALESMAN 7698 7499 ALLEN SALESMAN 7698 7844 TURNER SALESMAN 7698 7900 JAMES CLERK 7698 7521 WARD SALESMAN 7698 7902 FORD ANALYST 7566 7369 SMITH CLERK 7902 7934 MILLER CLERK 7782 11 sor kijelölve. HIREDATE SAL COMM DEPTNO ---------- ----- ----- -----1981-05-01 2850 30 1981-06-09 2450

10 1981-04-02 2975 20 1981-09-28 1250 1400 30 1981-02-20 1600 300 30 1981-09-08 1500 0 30 1981-12-03 950 30 1981-02-22 1250 500 30 1981-12-03 3000 20 1980-12-17 800 20 1982-01-23 1300 10 Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) -9- A3. Feladat Bővítse a dolgozó8 táblát egy jutalom oszloppal, és töltse fel ezt olymódon, hogy akinek nagyobb a jövedelme, mint részlegének átlagjövedelme, az 400 USD jutalmat kapjon, a többiek pedig 800 USD-t. Megoldás ALTER TABLE dolgozó8 ADD jutalom NUMBER; A tábla módosítva. -- Az egyes részlegek átlagjövedelme: CREATE OR REPLACE VIEW rÁtlagJövedelem(deptno,rÁtlag) AS SELECT deptno, ROUND(AVG(sal+NVL(comm,0))) FROM dolgozó8 GROUP BY deptno; SELECT * FROM rÁtlagJövedelem; A nézet létrejött. DEPTNO RÁTLAG ------ -----10 1875 20 2258 30 1933 -- Azok listája, akinek jövedelmük nagyobb a részlegük átlagánál: CREATE OR REPLACE VIEW NagyJövedelműek(empno) AS SELECT empno FROM dolgozó8

e, rÁtlagJövedelem r WHERE e.deptno = rdeptno AND sal+NVL(comm,0) > r.rátlag; SELECT * FROM NagyJövedelműek; A nézet létrejött. EMPNO ----7782 7902 7566 7654 7698 -- vagy másként: CREATE OR REPLACE VIEW NagyJövedelműek(empno) AS SELECT empno FROM dolgozó8 e WHERE sal+NVL(comm,0) > (SELECT rátlag FROM rÁtlagJövedelem r WHERE e.deptno = rdeptno); SELECT * FROM NagyJövedelműek; A nézet létrejött. EMPNO ----7698 7782 7566 7654 7902 Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) - 10 - Megjegyzés A két lista tartalma azonos, még ha a sorrend (a különböző lekérdezés miatt) különböző is. Adatmódosítás -- Legyen e dolgozók jutalom értéke 400 USD, . UPDATE dolgozó8 SET jutalom = 400 WHERE empno IN (SELECT empno FROM dolgozó8 e, rÁtlagJövedelem r WHERE e.deptno = rdeptno AND sal+NVL(comm,0) > r.rátlag); -- vagy másként (nézettábla használattal): UPDATE dolgozó8 SET jutalom = 400 WHERE empno IN (SELECT empno

FROM NagyJövedelműek); 5 sor módosítva. -- . a többieké pedig 800 USD: UPDATE dolgozó8 SET jutalom = 800 WHERE jutalom IS NULL; 6 sor módosítva. SELECT * FROM dolgozó8; EMPNO ----7698 7782 7566 7654 7499 7844 7900 7521 7902 7369 7934 ENAME ---------BLAKE CLARK JONES MARTIN ALLEN TURNER JAMES WARD FORD SMITH MILLER JOB MGR HIREDATE SAL COMM DEPTNO JUTALOM --------- ----- ---------- ----- ----- ------ ------MANAGER 1981-05-01 2850 30 400 MANAGER 1981-06-09 2450 10 400 MANAGER 1981-04-02 2975 20 400 SALESMAN 7698 1981-09-28 1250 1400 30 400 SALESMAN 7698 1981-02-20 1600 300 30 800 SALESMAN 7698 1981-09-08 1500 0 30 800 CLERK 7698 1981-12-03 950 30 800 SALESMAN 7698 1981-02-22 1250 500 30 800 ANALYST 7566 1981-12-03 3000 20 400 CLERK 7902 1980-12-17 800 20 800 CLERK 7782 1982-01-23 1300 10 800 11 sor kijelölve. -- Töröljük a fölöslegessé vált nézettáblákat: DROP VIEW rÁtlagJövedelem; DROP VIEW NagyJövedelműek; A nézet eldobva. A nézet eldobva. Oracle SQL

összefoglaló feladatok, megoldással (2005, 33 oldal) - 11 - A4. Feladat Listázza formázva (fej-, és lábléccel, stb.) a dolgozók nevét, munkakörét, a részlegének nevét, a jutalmat is tartalmazó összjövedelmét, a főnökének nevét és a főnök telephelyének nevét, elsődlegesen a főnök neve szerint növekvően, másodlagosan az összjövedelem szerint csökkenően rendezve. Ha egy dolgozónak nincs főnöke, akkor a főnök adatainak helyére írja ki, hogy "nincs főnöke". Megoldás SET SET SET SET SET verify OFF numwidth 5 pagesize 21 linesize 85 feedback OFF BREAK ON Munkakor ON DolgozoReszleg TTITLE Dolgozók adatainak|nyilvántartása BTITLE Budapesti Műszaki Főiskola COLUMN DolgozoNeve HEADING A dolgozó|neve COLUMN Munkakor HEADING A dolgozó|munkaköre COLUMN DolgozoReszleg HEADING A dolgozó|részlege COLUMN Osszes HEADING A dolgozó|összjövedelme COLUMN FonokNeve HEADING A főnök|neve COLUMN FonokTelep HEADING A

főnök|telephelye SELECT d.ename AS d.job AS dr.dname AS d.sal+NVL(dcomm,0)+djutalom AS NVL(f.ename,nincs főnöke) AS NVL(fr.loc,nincs főnöke) AS FROM dolgozó8 d, dolgozó8 f, részleg8 dr, részleg8 fr WHERE d.mgr = fempno(+) AND d.deptno = drdeptno AND f.deptno = frdeptno(+) ORDER BY FonokNeve ASC, Osszes DESC; FORMAT A15 FORMAT A10 FORMAT A12 JUSTIFY RIGHT FORMAT A15 FORMAT A12 DolgozoNeve, Munkakor, DolgozoReszleg, Osszes, FonokNeve, FonokTelep SET verify ON SET numwidth 10 SET pagesize 40 SET linesize 400 SET feedback ON TTITLE OFF BTITLE OFF CLEAR BREAKS CLEAR COLUMNS Szo Nov. 19 lap Dolgozók adatainak nyilvántartása A dolgozó neve --------------MARTIN ALLEN WARD TURNER JAMES MILLER SMITH FORD JONES BLAKE CLARK A dolgozó munkaköre ---------SALESMAN CLERK ANALYST MANAGER A dolgozó A dolgozó A főnök A főnök részlege összjövedelme neve telephelye ------------ ------------- --------------- -----------SALES 3050 BLAKE CHICAGO 2700 BLAKE CHICAGO 2550 BLAKE

CHICAGO 2300 BLAKE CHICAGO SALES 1750 BLAKE CHICAGO ACCOUNTING 2100 CLARK NEW YORK RESEARCH 1600 FORD DALLAS RESEARCH 3400 JONES DALLAS RESEARCH 3375 nincs főnöke nincs főnöke SALES 3250 nincs főnöke nincs főnöke ACCOUNTING 2850 nincs főnöke nincs főnöke Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) - 12 - 1 Budapesti Műszaki Főiskola A5. Feladat A felhasználó által megadott munkakörben, ha létezik második legnagyobb fizetésű dolgozó, akkor annak (vagy azoknak) a fizetését növelje meg éppen annyival, hogy az legyen a legnagyobb. Ha ilyen nem létezik, akkor a fizetések ne változzanak. Listázza a megadott munkakör dolgozóit a fizetésük szerint csökkenő, a nevük szerint pedig növekvő sorrendben a fenti módosítás előtt és után. A listázás után állítsa vissza az eredeti állapotot Megoldás (A feladat megoldásának szkript programja – aaa.sql) - aaa.sql ACCEPT munkakör PROMPT "Munkakör: " CREATE

OR REPLACE VIEW Sorrend(fizetés, sorszám) AS SELECT fizetés, ROWNUM FROM (SELECT DISTINCT sal AS fizetés FROM dolgozó8 WHERE UPPER(job) = UPPER(&munkakör) ORDER BY fizetés DESC) WHERE ROWNUM <= 2; SELECT * FROM Sorrend; CREATE OR REPLACE VIEW Különbség(érték) AS SELECT (SELECT fizetés FROM Sorrend WHERE sorszám = 1) (SELECT fizetés FROM Sorrend WHERE sorszám = 2) FROM dual; SELECT * FROM dolgozó8 WHERE UPPER(job) = UPPER(&munkakör) ORDER BY sal DESC, ename ASC; UPDATE dolgozó8 SET sal = (SELECT CASE WHEN (SELECT COUNT(*) FROM sorrend) = 1 THEN sal ELSE (SELECT fizetés FROM Sorrend WHERE sorszám = 2) + (SELECT érték FROM Különbség) + 1 END AS sal FROM dual) WHERE UPPER(job) = UPPER(&munkakör) AND sal = (SELECT fizetés FROM Sorrend WHERE sorszám = 2); SELECT * FROM dolgozó8 WHERE UPPER(job) = UPPER(&munkakör) ORDER BY sal DESC, ename ASC; ROLLBACK; Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) - 13 - 1.

Eredmény SQL> @aaa Munkakör: salesman régi 7: WHERE UPPER(job) = UPPER(&munkakör) új 7: WHERE UPPER(job) = UPPER(salesman) A nézet létrejött. FIZETÉS SORSZÁM ------- ------1600 1 1500 2 2 sor kijelölve. A nézet létrejött. régi 3: WHERE UPPER(job) = UPPER(&munkakör) új 3: WHERE UPPER(job) = UPPER(salesman) EMPNO ----7499 7844 7654 7521 ENAME ---------ALLEN TURNER MARTIN WARD JOB MGR HIREDATE SAL COMM DEPTNO JUTALOM --------- ----- ---------- ----- ----- ------ ------SALESMAN 7698 1981-02-20 1600 300 30 800 SALESMAN 7698 1981-09-08 1500 0 30 800 SALESMAN 7698 1981-09-28 1250 1400 30 400 SALESMAN 7698 1981-02-22 1250 500 30 800 régi 11: WHERE UPPER(job) = UPPER(&munkakör) AND új 11: WHERE UPPER(job) = UPPER(salesman) AND 1 sor módosítva. régi 3: WHERE UPPER(job) = UPPER(&munkakör) új 3: WHERE UPPER(job) = UPPER(salesman) EMPNO ----7844 7499 7654 7521 ENAME ---------TURNER ALLEN MARTIN WARD JOB MGR HIREDATE SAL COMM DEPTNO JUTALOM ---------

----- ---------- ----- ----- ------ ------SALESMAN 7698 1981-09-08 1601 0 30 800 SALESMAN 7698 1981-02-20 1600 300 30 800 SALESMAN 7698 1981-09-28 1250 1400 30 400 SALESMAN 7698 1981-02-22 1250 500 30 800 A visszaállítás befejeződött. 2. Eredmény SQL> @aaa Munkakör: analyst régi 7: WHERE UPPER(job) = UPPER(&munkakör) új 7: WHERE UPPER(job) = UPPER(analyst) A nézet létrejött. FIZETÉS SORSZÁM ------- ------3000 1 1 sor kijelölve. A nézet létrejött. régi 3: WHERE UPPER(job) = UPPER(&munkakör) új 3: WHERE UPPER(job) = UPPER(analyst) EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO JUTALOM ----- ---------- --------- ----- ---------- ----- ----- ------ ------7902 FORD ANALYST 7566 1981-12-03 3000 20 400 1 sor kijelölve. Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) - 14 - régi 11: WHERE UPPER(job) = UPPER(&munkakör) AND új 11: WHERE UPPER(job) = UPPER(analyst) AND 0 sor módosítva. régi 3: WHERE UPPER(job) =

UPPER(&munkakör) új 3: WHERE UPPER(job) = UPPER(analyst) EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO JUTALOM ----- ---------- --------- ----- ---------- ----- ----- ------ ------7902 FORD ANALYST 7566 1981-12-03 3000 20 400 1 sor kijelölve. A visszaállítás befejeződött. Végül töröljük a létrehozott változókat, nézettáblákat, táblákat és állítsuk vissza az alapértelmezett megjelenítést: UNDEFINE munkakör DROP VIEW Sorrend; DROP VIEW Különbség; DROP TABLE dolgozó8; DROP TABLE részleg8; SET numwidth 10 A A A A nézet nézet tábla tábla eldobva. eldobva. eldobva. eldobva. Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) - 15 - B. Feladatsor B1. Feladat Konzisztens módon hozzon létre egy dolgozó8 nevű táblát az emp tábla azon dolgozóiból, akiknek minden közvetlen beosztottja 1000 USD-nél magasabb jövedelemmel rendelkezik, majd egy részleg8 nevű táblát a dept táblából. E táblák létrehozása előtt

győződjön meg róla, hogy az adott néven nem létezik-e már másik objektum (user catalog), és ha igen, törölje azt A további feladatok e táblákra vonatkoznak. A megoldások során rendszeresen alkalmazzon nézettáblákat! Megoldás 0.1 lépés (Az emp tábla és a megjelenítés inicializálása) -- @INIT1 -- Feltételezve, hogy az INIT1.sql a BIN könyvtárban van ALTER SESSION SET NLS DATE FORMAT = YYYY-MM-DD; SET numwidth 5 A munkamenet módosítva. 0.2 lépés (Esetlegesen létező azonos nevű objektumok törlése) SELECT * FROM user catalog WHERE UPPER(TABLE NAME) NOT LIKE %BIN%; TABLE NAME -----------------------------BONUS SALGRADE EMP DEPT TABLE TYPE ----------TABLE TABLE TABLE TABLE Nem szerepel a dolgozó8 és a részleg8 objektum (sem táblaként, sem nézetként), tehát nincs további teendő. 1. lépés (A dolgozó8 tábla létrehozása) 1-A megoldás -- A megfelelő dolgozók listája: SELECT * FROM emp WHERE empno IN (SELECT mgr FROM emp GROUP BY mgr

HAVING MIN(sal+NVL(comm,0)) > 1000); -- Ennek alapján hozzuk létre a dolgozó8 táblát: DROP TABLE dolgozó8; CREATE TABLE dolgozó8 AS SELECT * FROM emp WHERE empno IN (SELECT mgr FROM emp GROUP BY mgr HAVING MIN(sal+NVL(comm,0)) > 1000); SELECT * FROM dolgozó8; EMPNO ----7566 7782 7788 7839 ENAME ---------JONES CLARK SCOTT KING JOB MGR HIREDATE SAL COMM DEPTNO --------- ----- ---------- ----- ----- -----MANAGER 7839 1981-04-02 2975 20 MANAGER 7839 1981-06-09 2450 10 ANALYST 7566 1987-04-19 3000 20 PRESIDENT 1981-11-17 5000 10 Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) - 16 - 1-B megoldás -- A főnökök azonosítói: SELECT DISTINCT mgr FROM emp WHERE MGR IS NOT NULL; -- Azon főnökök azonosítói, akiknek van olyan beosztottjuk, -- akinek a jövedelme kisebb 1000 USD-nél (ezek nem felelnek meg a feltételnek): SELECT mgr FROM emp WHERE sal+NVL(comm,0) <= 1000; -- Ezeket ki kell hagyni az összes főnök közül: SELECT DISTINCT mgr

FROM emp WHERE mgr IS NOT NULL AND mgr NOT IN (SELECT mgr FROM emp WHERE sal+NVL(comm,0) <= 1000); -- Ebből készítsünk egy nézettáblát: CREATE OR REPLACE VIEW JóFőnökök AS SELECT DISTINCT mgr FROM emp WHERE mgr IS NOT NULL AND mgr NOT IN (SELECT mgr FROM emp WHERE sal+NVL(comm,0) <= 1000); SELECT * FROM JóFőnökök; -- Hozzuk létre a dolgozó8 táblát: DROP TABLE dolgozó8; CREATE TABLE dolgozó8 AS SELECT * FROM emp WHERE empno IN (SELECT mgr FROM JóFőnökök); SELECT * FROM dolgozó8; EMPNO ----7566 7782 7788 7839 ENAME ---------JONES CLARK SCOTT KING JOB MGR HIREDATE SAL COMM DEPTNO --------- ----- ---------- ----- ----- -----MANAGER 7839 1981-04-02 2975 20 MANAGER 7839 1981-06-09 2450 10 ANALYST 7566 1987-04-19 3000 20 PRESIDENT 1981-11-17 5000 10 Töröljük a fölöslegessé vált nézettáblákat: DROP VIEW JóFőnökök; A nézet eldobva. Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) - 17 - 1-C megoldás -- Azon dolgozók

listája, akik 1000 USD-nél magasabb jövedelemmel rendelkeznek: SELECT empno FROM emp WHERE sal+NVL(comm,0) > 1000; -- Azon dolgozók nézettáblája, akiknek van beosztottjuk (a főnökök): CREATE OR REPLACE VIEW Főnökök(fazon) AS SELECT DISTINCT mgr FROM emp WHERE mgr IS NOT NULL; SELECT * FROM Főnökök; -- A főnökök közvetlen beosztottainak nézettáblája: CREATE OR REPLACE VIEW KözvetlenBeosztottak(fazon, fnév, dazon, dnév) AS SELECT f.empno, fename, dempno, dename FROM emp d, emp f WHERE d.mgr = fempno AND d.mgr IS NOT NULL; SELECT * FROM KözvetlenBeosztottak; -- Azon főnökök nézettáblája, akiknek minden beosztottjuk 1000 USD-nél magasabb jövedelemmel -- rendelkezik (vagyis a közvetlen beosztottak halmaza a részhalmaza az 1000 USD-nél magasabb -- jövedelemmel rendelkezőknek, algebrailag felírva: A ≠ ∅ esetén A B = ∅ ⇒ A ⊄ B): CREATE OR REPLACE VIEW JóFőnökök AS SELECT fazon AS mgr FROM Főnökök f WHERE NOT EXISTS (SELECT

k.dazon FROM KözvetlenBeosztottak k WHERE f.fazon = kfazon MINUS SELECT empno FROM emp WHERE sal+NVL(comm,0) > 1000); SELECT * FROM JóFőnökök; -- Hozzuk létre a dolgozó8 táblát: DROP TABLE dolgozó8; CREATE TABLE dolgozó8 AS SELECT * FROM emp WHERE empno IN (SELECT mgr FROM JóFőnökök); SELECT * FROM dolgozó8; EMPNO ----7566 7782 7788 7839 ENAME ---------JONES CLARK SCOTT KING JOB MGR HIREDATE SAL COMM DEPTNO --------- ----- ---------- ----- ----- -----MANAGER 7839 1981-04-02 2975 20 MANAGER 7839 1981-06-09 2450 10 ANALYST 7566 1987-04-19 3000 20 PRESIDENT 1981-11-17 5000 10 -- Töröljük a fölöslegessé vált nézettáblákat: DROP VIEW Főnökök; DROP VIEW KözvetlenBeosztottak; DROP VIEW JóFőnökök; A nézet eldobva. A nézet eldobva. A nézet eldobva. Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) - 18 - 2. lépés (A részleg8 tábla létrehozása) DROP TABLE részleg8; CREATE TABLE részleg8 AS SELECT * FROM dept; SELECT * FROM

részleg8; A tábla eldobva. A tábla létrejött. DEPTNO -----10 20 30 40 DNAME -------------ACCOUNTING RESEARCH SALES OPERATIONS LOC ------------NEW YORK DALLAS CHICAGO BOSTON Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) - 19 - B2. Feladat Egy szkript programban végezzen megszorítás hozzáadást, ellenőrzést és visszaállítást (ROLLBACK) az alábbi módon: Egy MANAGER munkakörű dolgozó csak 2000 és 3000 USD tartománybeli fizetést kaphat. Kiséreljen meg egy megfelelő és egy nem megfelelő rekordot felvinni. Listázással ellenőrizze e műveletek végrehajtását, majd visszavonás után annak hatását. Megoldás -- A dolgozó8 és a részleg8 táblák megszorításai: COLUMN table name FORMAT A11 COLUMN constraint name FORMAT A15 COLUMN constraint type FORMAT A16 COLUMN search condition FORMAT A21 SELECT table name, constraint name, constraint type, search condition FROM user constraints WHERE LOWER(table name) IN (dolgozó8,részleg8);

CLEAR COLUMNS TABLE NAME ----------RÉSZLEG8 DOLGOZÓ8 DOLGOZÓ8 CONSTRAINT NAME --------------SYS C005540 SYS C005538 SYS C005539 CONSTRAINT TYPE ---------------C C C SEARCH CONDITION --------------------"DEPTNO" IS NOT NULL "EMPNO" IS NOT NULL "DEPTNO" IS NOT NULL columns törölve -- A kívánt megszorítás hozzáadása: ALTER TABLE dolgozó8 ADD CONSTRAINT kulcsfiz CHECK ((sal BETWEEN 2000 AND 3000 AND UPPER(job) = MANAGER) OR (UPPER(job) != MANAGER)); A tábla módosítva. -- Ekkor a dolgozó8 tábla megszorításai: COLUMN table name FORMAT A10 COLUMN constraint name FORMAT A15 COLUMN constraint type FORMAT A16 COLUMN search condition FORMAT A40 SELECT table name, constraint name, constraint type, search condition FROM user constraints WHERE LOWER(table name) = dolgozó8; CLEAR COLUMNS TABLE NAME ---------DOLGOZÓ8 DOLGOZÓ8 DOLGOZÓ8 CONSTRAINT NAME --------------SYS C005539 SYS C005538 KULCSFIZ CONSTRAINT TYPE ---------------C C C SEARCH

CONDITION ---------------------------------------"DEPTNO" IS NOT NULL "EMPNO" IS NOT NULL (sal BETWEEN 2000 AND 3000 AND UPPER( job) = columns törölve Ellenőrzés: INSERT INTO dolgozó8 VALUES(6666,BOSZORKA,MANAGER,7788,2005-10-30,3400,NULL,20); INSERT INTO dolgozó8 VALUES(7876,JANCSI,MANAGER,7788,2005-11-01,2500,NULL,20); INSERT INTO dolgozó8 VALUES(9999,JULISKA,STUDENT,7788,2005-11-01,1200,NULL,20); SELECT * FROM dolgozó8; Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) - 20 - INSERT INTO dolgozó8 * Hiba a(z) 1. sorban: ORA-02290: ellenőrző megszorítás (SCOTT.KULCSFIZ) megsértése 1 sor létrejött. 1 sor létrejött. EMPNO ----7566 7782 7788 7839 7876 9999 ENAME ---------JONES CLARK SCOTT KING JANCSI JULISKA JOB MGR HIREDATE SAL COMM DEPTNO --------- ----- ---------- ----- ----- -----MANAGER 7839 1981-04-02 2975 20 MANAGER 7839 1981-06-09 2450 10 ANALYST 7566 1987-04-19 3000 20 PRESIDENT 1981-11-17 5000 10 MANAGER 7788

2005-11-01 2500 20 STUDENT 7788 2005-11-01 1200 20 -- Visszaállítás: ROLLBACK; SELECT * FROM dolgozó8; A visszaállítás befejeződött. EMPNO ----7566 7782 7788 7839 ENAME ---------JONES CLARK SCOTT KING JOB MGR HIREDATE SAL COMM DEPTNO --------- ----- ---------- ----- ----- -----MANAGER 7839 1981-04-02 2975 20 MANAGER 7839 1981-06-09 2450 10 ANALYST 7566 1987-04-19 3000 20 PRESIDENT 1981-11-17 5000 10 Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) - 21 - B3. Feladat Bővítse a dolgozó8 táblát egy jutalom oszloppal, és töltse fel ezt olymódon, hogy akinek valamelyik közvetlen beosztottja az ő jövedelmének felénél többet keres, az 1000 USD jutalmat kapjon, a többiek pedig 600 USD-t. Megoldás -- Tábla bővítése jutalom oszloppal: ALTER TABLE dolgozó8 ADD jutalom NUMBER(4); A tábla módosítva. 1. Módosítás: UPDATE dolgozó8 SET jutalom = 1000 WHERE empno IN (SELECT f.empno FROM dolgozó8 d, dolgozó8 f WHERE d.sal+NVL(dcomm,0)

> (fsal+NVL(fcomm,0))/2 d.mgr = fempno); 2 sor módosítva. 2. Módosítás: UPDATE dolgozó8 SET jutalom = 600 WHERE jutalom IS NULL; 2 sor módosítva. SELECT * FROM dolgozó8; EMPNO ----7566 7782 7788 7839 ENAME ---------JONES CLARK SCOTT KING JOB MGR HIREDATE SAL COMM DEPTNO JUTALOM --------- ----- ---------- ----- ----- ------ ------MANAGER 7839 1981-04-02 2975 20 1000 MANAGER 7839 1981-06-09 2450 10 600 ANALYST 7566 1987-04-19 3000 20 600 PRESIDENT 1981-11-17 5000 10 1000 Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) - 22 - AND B4. Feladat Listázza formázva (fej-, és lábléccel, stb.) a dolgozók nevét, munkakörét, a részlegének nevét, a jutalmat is tartalmazó összjövedelmét és a főnökének nevét, valamint telephelyét elsődlegesen a főnök neve szerint növekvően, másodlagosan az összjövedelem szerint csökkenő módon rendezve. Ha egy dolgozónak nincs főnöke, akkor a főnök nevének helyére írja ki, hogy

"=nincs főnöke=". Megoldás SET SET SET SET verify OFF pagesize 15 linesize 83 feedback OFF -- BREAK ON FonokNeve ON FonokTelep TTITLE Dolgozók adatainak|nyilvántartása BTITLE Budapesti Műszaki Főiskola COLUMN DolgozoNeve HEADING A dolgozó|neve COLUMN Munkakor HEADING A dolgozó|munkaköre COLUMN ReszlegNev HEADING A dolgozó|részlege COLUMN OsszJov HEADING A dolgozó|összjövedelme COLUMN FonokNeve HEADING A főnök|neve COLUMN FonokTelep HEADING A főnök|telephelye SELECT d.ename AS d.job AS dr.dname AS d.sal+NVL(dcomm,0)+djutalom AS NVL(f.ename,=nincs főnöke=) AS fr.loc AS FROM dolgozó8 d, dolgozó8 f, részleg8 dr, részleg8 fr WHERE d.mgr = fempno(+) AND d.deptno = drdeptno AND f.deptno = frdeptno(+) ORDER BY FonokNeve ASC, OsszJov DESC; FORMAT A15 FORMAT A10 FORMAT A12 JUSTIFY RIGHT FORMAT A15 FORMAT A12 DolgozoNeve, Munkakor, ReszlegNev, OsszJov, FonokNeve, FonokTelep SET verify ON SET pagesize 40 SET linesize 400 SET feedback ON TTITLE OFF BTITLE

OFF -- CLEAR BREAKS CLEAR COLUMNS Eredmény V. Nov. 06 lap 1 Dolgozók adatainak nyilvántartása A dolgozó neve --------------SCOTT JONES CLARK KING A dolgozó munkaköre ---------ANALYST MANAGER MANAGER PRESIDENT A dolgozó A dolgozó A főnök A főnök részlege összjövedelme neve telephelye ------------ ------------- --------------- -----------RESEARCH 4000 JONES DALLAS RESEARCH 3975 KING NEW YORK ACCOUNTING 3050 KING NEW YORK ACCOUNTING 5600 =nincs főnöke= Budapesti Műszaki Főiskola columns törölve Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) - 23 - C. Feladatsor C1. Feladat Konzisztens módon hozzon létre egy dolgozó8 nevű táblát az emp tábla azon dolgozóiból, akik 1980.február 1 és 1987május 1 között léptek be, és ha van főnökük, akkor az legfeljebb 4000 USD-t keres, továbbá egy részleg8 nevű táblát a dept táblából E táblák létrehozása előtt vizsgálja meg, hogy az adott néven létezik-e már másik

objektum (user catalog), és ha igen, törölje azt. A további feladatok e táblákra vonatkoznak A megoldások során rendszeresen alkalmazzon nézettáblákat! Megoldás 0.1 lépés (Az emp tábla és a megjelenítés inicializálása) -- @INIT1 -- Feltételezve, hogy az INIT1.sql a BIN könyvtárban van ALTER SESSION SET NLS DATE FORMAT = YYYY-MM-DD; SET numwidth 5 A munkamenet módosítva. 0.2 lépés (Esetlegesen létező azonos nevű objektumok törlése) SELECT * FROM user catalog WHERE UPPER(TABLE NAME) NOT LIKE %BIN%; TABLE NAME -----------------------------BONUS DEPT EMP SALGRADE TABLE TYPE ----------TABLE TABLE TABLE TABLE Nem szerepel a dolgozó8 és a részleg8 objektum (sem táblaként, sem nézetként), tehát nincs további teendő. 1. lépés (A dolgozó8 tábla létrehozása) -- Az első feltételt kielégítő dolgozók nézettáblája: CREATE OR REPLACE VIEW Dolgozók1 AS SELECT empno, ename, job, mgr, TO CHAR(hiredate, YYYY.month DD) AS hiredate, sal, comm,

deptno FROM emp WHERE hiredate BETWEEN 1980-02-01 AND 1987-05-01; SELECT * FROM Dolgozók1; A nézet létrejött. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- ----- ------------------- ----- ----- -----7839 KING PRESIDENT 1981.november 17. 5000 10 7698 BLAKE MANAGER 7839 1981.május 01. 2850 30 7782 CLARK MANAGER 7839 1981.június 09. 2450 10 7566 JONES MANAGER 7839 1981.április 02. 2975 20 7654 MARTIN SALESMAN 7698 1981.szeptember 28 1250 1400 30 7499 ALLEN SALESMAN 7698 1981.február 20. 1600 300 30 7844 TURNER SALESMAN 7698 1981.szeptember 08 1500 0 30 7900 JAMES CLERK 7698 1981.december 03. 950 30 7521 WARD SALESMAN 7698 1981.február 22. 1250 500 30 7902 FORD ANALYST 7566 1981.december 03. 3000 20 7369 SMITH CLERK 7902 1980.december 17. 800 20 7788 SCOTT ANALYST 7566 1987.április 19. 3000 20 7934 MILLER CLERK 7782 1982.január 23. 1300 10 13 sor kijelölve. Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) - 24 - -- A megfelelő

főnökök nézettáblája: CREATE OR REPLACE VIEW JóFőnök(főnökazon) AS SELECT f.empno FROM emp d, emp f WHERE f.sal+NVL(fcomm,0) < 4000 AND d.mgr = fempno; SELECT * FROM JóFőnök; A nézet létrejött. FŐNÖKAZON --------7698 7698 7698 7698 7698 7566 7902 7566 7788 7782 10 sor kijelölve. -- A mindkét feltételt kielégítő dolgozók nézettáblája: CREATE OR REPLACE VIEW DolgozóNézet AS SELECT * FROM Dolgozók1 WHERE mgr IN (SELECT főnökazon FROM JóFőnök); SELECT * FROM DolgozóNézet; EMPNO ----7654 7499 7844 7900 7521 7902 7369 7788 7934 9 sor ENAME ---------MARTIN ALLEN TURNER JAMES WARD FORD SMITH SCOTT MILLER kijelölve. JOB MGR HIREDATE SAL COMM DEPTNO --------- ----- ------------------- ----- ----- -----SALESMAN 7698 1981.szeptember 28 1250 1400 30 SALESMAN 7698 1981.február 20. 1600 300 30 SALESMAN 7698 1981.szeptember 08 1500 0 30 CLERK 7698 1981.december 03. 950 30 SALESMAN 7698 1981.február 22. 1250 500 30 ANALYST 7566 1981.december 03. 3000 20

CLERK 7902 1980.december 17. 800 20 ANALYST 7566 1987.április 19. 3000 20 CLERK 7782 1982.január 23. 1300 10 -- A megfelelelő dolgozók konzisztens adattáblája: DROP TABLE dolgozó8; CREATE TABLE dolgozó8 AS SELECT empno, ename, job, CASE WHEN mgr IN (SELECT empno FROM DolgozóNézet) THEN mgr ELSE NULL END AS mgr, hiredate, sal, comm, deptno FROM DolgozóNézet; SELECT * FROM dolgozó8; A tábla eldobva. A tábla létrejött. EMPNO ----7521 7900 7844 7499 7654 7788 ENAME ---------WARD JAMES TURNER ALLEN MARTIN SCOTT JOB MGR HIREDATE SAL COMM DEPTNO --------- ----- ------------------- ----- ----- -----SALESMAN 1981.február 22. 1250 500 30 CLERK 1981.december 03. 950 30 SALESMAN 1981.szeptember 08 1500 0 30 SALESMAN 1981.február 20. 1600 300 30 SALESMAN 1981.szeptember 28 1250 1400 30 ANALYST 1987.április 19. 3000 20 Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) - 25 - 7902 7369 7934 9 sor FORD ANALYST SMITH CLERK MILLER CLERK kijelölve.

1981.december 7902 1980.december 1982.január -- A feleslegessé vált nézettáblák törlése: DROP VIEW Dolgozók1; DROP VIEW JóFőnök; DROP VIEW DolgozóNézet; A nézet eldobva. A nézet eldobva. A nézet eldobva. 2. lépés (A részleg8 tábla létrehozása) DROP TABLE részleg8; CREATE TABLE részleg8 AS SELECT * FROM dept; SELECT * FROM részleg8; A tábla eldobva. A tábla létrejött. DEPTNO -----10 20 30 40 DNAME -------------ACCOUNTING RESEARCH SALES OPERATIONS LOC ------------NEW YORK DALLAS CHICAGO BOSTON Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) - 26 - 03. 17. 23. 3000 800 1300 20 20 10 C2. Feladat Egy szkript programban végezzen megszorítás hozzáadást, ellenőrzést és visszaállítást (ROLLBACK) az alábbi módon: A 2000 USD-nél nagyobb fizetésű dolgozók nem kaphatnak jutalékot. Kiséreljen meg egy megfelelő és egy nem megfelelő rekordot felvinni. Listázással ellenőrizze e műveletek végrehajtását, majd

visszaállítás után annak hatását. Megoldás ALTER TABLE dolgozó8 ADD CONSTRAINT msz1 CHECK(comm IS NULL AND sal > 2000 sal <= 2000); OR A tábla módosítva. INSERT INTO dolgozó8 VALUES(2020,POTYKA1,MANAGER,7788,2005-10-30,3400,222,20); INSERT INTO dolgozó8 VALUES(1010,POTYKA2,STUDENT,7788,2005-10-30,1200,555,20); SELECT * FROM dolgozó8; ROLLBACK; SELECT * FROM dolgozó8; INSERT INTO dolgozó8 * Hiba a(z) 1. sorban: ORA-02290: ellenőrző megszorítás (SCOTT.MSZ1) megsértése 1 sor létrejött. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- ----- ------------------- ----- ----- -----7521 WARD SALESMAN 1981.február 22. 1250 500 30 7900 JAMES CLERK 1981.december 03. 950 30 7844 TURNER SALESMAN 1981.szeptember 08 1500 0 30 7499 ALLEN SALESMAN 1981.február 20. 1600 300 30 7654 MARTIN SALESMAN 1981.szeptember 28 1250 1400 30 7788 SCOTT ANALYST 1987.április 19. 3000 20 7902 FORD ANALYST 1981.december 03. 3000 20 7369 SMITH CLERK 7902

1980.december 17. 800 20 7934 MILLER CLERK 1982.január 23. 1300 10 1010 POTYKA2 STUDENT 7788 2005-10-30 1200 555 20 10 sor kijelölve. A visszaállítás befejeződött. EMPNO ----7521 7900 7844 7499 7654 7788 7902 7369 7934 9 sor ENAME ---------WARD JAMES TURNER ALLEN MARTIN SCOTT FORD SMITH MILLER kijelölve. JOB MGR HIREDATE SAL COMM DEPTNO --------- ----- ------------------- ----- ----- -----SALESMAN 1981.február 22. 1250 500 30 CLERK 1981.december 03. 950 30 SALESMAN 1981.szeptember 08 1500 0 30 SALESMAN 1981.február 20. 1600 300 30 SALESMAN 1981.szeptember 28 1250 1400 30 ANALYST 1987.április 19. 3000 20 ANALYST 1981.december 03. 3000 20 CLERK 7902 1980.december 17. 800 20 CLERK 1982.január 23. 1300 10 Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) - 27 - C3. Feladat Bővítse a dolgozó8 táblát egy jutalom oszloppal, és töltse fel ezt a következő módon: A három legkisebb fizetésű dolgozó kapja meg egyszeri jutalomként a fizetésének

20 %-át, a három legnagyobb fizetésű a fizetésének 5 %-át, a többiek pedig a fizetésük 10 %-át. Ha valamelyik dolgozóra több feltétel is teljesül, akkor a legkisebbnek megfelelő jutalmat kapja. Megoldás Megoldás ALTER TABLE dolgozó8 ADD jutalom NUMBER(4); A tábla módosítva. -- Módosítás-1 (A kisfizetésűek jutalmazása) -- A növekvő fizetés-sorrend nézettáblája (a kis fizetések elöl): CREATE OR REPLACE VIEW SorrendKICSI AS SELECT sal AS fizetés, ROWNUM AS sorszám FROM (SELECT DISTINCT sal FROM dolgozó8 ORDER BY sal ASC); SELECT * FROM SorrendKICSI; A nézet létrejött. FIZETÉS SORSZÁM ------- ------800 1 950 2 1250 3 1300 4 1500 5 1600 6 3000 7 7 sor kijelölve. -- A növekvő fizetés-sorrendhez tartozó dolgozók azonosítói (a kis fizetésűek elöl): CREATE OR REPLACE VIEW Sorrendazonosító1 AS SELECT empno, sorszám, fizetés FROM dolgozó8, SorrendKICSI WHERE sal IN (SELECT sal FROM SorrendKICSI) AND SorrendKICSI.fizetés =

dolgozó8sal; SELECT * FROM Sorrendazonosító1; A nézet létrejött. EMPNO SORSZÁM FIZETÉS ----- ------- ------7369 1 800 7900 2 950 7654 3 1250 7521 3 1250 7934 4 1300 7844 5 1500 7499 6 1600 7902 7 3000 7788 7 3000 9 sor kijelölve. Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) - 28 - -- A kisfizetésűek jutalmazása: UPDATE dolgozó8 SET jutalom = sal * 0.2 WHERE empno IN (SELECT empno FROM Sorrendazonosító1 WHERE sorszám <= 3); SELECT * FROM dolgozó8; 4 sor módosítva. EMPNO ----7521 7900 7844 7499 7654 7788 7902 7369 7934 9 sor ENAME ---------WARD JAMES TURNER ALLEN MARTIN SCOTT FORD SMITH MILLER kijelölve. JOB MGR HIREDATE SAL COMM DEPTNO JUTALOM --------- ----- ------------------- ----- ----- ------ ------SALESMAN 1981.február 22. 1250 500 30 250 CLERK 1981.december 03. 950 30 190 SALESMAN 1981.szeptember 08 1500 0 30 SALESMAN 1981.február 20. 1600 300 30 SALESMAN 1981.szeptember 28 1250 1400 30 250 ANALYST 1987.április 19. 3000 20

ANALYST 1981.december 03. 3000 20 CLERK 7902 1980.december 17. 800 20 160 CLERK 1982.január 23. 1300 10 -- Módosítás-2 (A nagyfizetésűek jutalmazása) -- A csökkenő fizetés-sorrend nézettáblája (a nagy fizetések elöl): CREATE OR REPLACE VIEW SorrendNagy AS SELECT sal AS fizetés, ROWNUM AS sorszám FROM (SELECT DISTINCT sal FROM dolgozó8 ORDER BY sal DESC); SELECT * FROM SorrendNagy; A nézet létrejött. FIZETÉS SORSZÁM ------- ------3000 1 1600 2 1500 3 1300 4 1250 5 950 6 800 7 7 sor kijelölve. -- A csökkenő fizetés-sorrendhez tartozó dolgozók azonosítói (a nagy fizetésűek elöl): CREATE OR REPLACE VIEW Sorrendazonosító2 AS SELECT empno, sorszám, fizetés FROM dolgozó8, SorrendNagy WHERE sal IN (SELECT sal FROM SorrendNagy) AND SorrendNagy.fizetés = dolgozó8sal; SELECT * FROM Sorrendazonosító2; A nézet létrejött. EMPNO SORSZÁM FIZETÉS ----- ------- ------7902 1 3000 7788 1 3000 7499 2 1600 7844 3 1500 7934 4 1300 7654 5 1250 7521 5 1250 7900

6 950 7369 7 800 Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) - 29 - 9 sor kijelölve. -- A nagyfizetésűek jutalmazása: UPDATE dolgozó8 SET jutalom = sal * 0.05 WHERE empno IN ((SELECT empno FROM sorrendazonosító2 WHERE sorszám <= 3) MINUS (SELECT empno FROM sorrendazonosító1 WHERE sorszám <= 3)); SELECT * FROM dolgozó8; 4 sor módosítva. EMPNO ----7521 7900 7844 7499 7654 7788 7902 7369 7934 9 sor ENAME ---------WARD JAMES TURNER ALLEN MARTIN SCOTT FORD SMITH MILLER kijelölve. JOB MGR HIREDATE SAL COMM DEPTNO JUTALOM --------- ----- ------------------- ----- ----- ------ ------SALESMAN 1981.február 22. 1250 500 30 250 CLERK 1981.december 03. 950 30 190 SALESMAN 1981.szeptember 08 1500 0 30 75 SALESMAN 1981.február 20. 1600 300 30 80 SALESMAN 1981.szeptember 28 1250 1400 30 250 ANALYST 1987.április 19. 3000 20 150 ANALYST 1981.december 03. 3000 20 150 CLERK 7902 1980.december 17. 800 20 160 CLERK 1982.január 23. 1300 10 --

Módosítás-3 (A többiek jutalmazása) UPDATE dolgozó8 SET jutalom = sal * 0.1 WHERE jutalom IS NULL; SELECT * FROM dolgozó8; 1 sor módosítva. EMPNO ----7521 7900 7844 7499 7654 7788 7902 7369 7934 9 sor ENAME ---------WARD JAMES TURNER ALLEN MARTIN SCOTT FORD SMITH MILLER kijelölve. JOB MGR HIREDATE SAL COMM DEPTNO JUTALOM --------- ----- ------------------- ----- ----- ------ ------SALESMAN 1981.február 22. 1250 500 30 250 CLERK 1981.december 03. 950 30 190 SALESMAN 1981.szeptember 08 1500 0 30 75 SALESMAN 1981.február 20. 1600 300 30 80 SALESMAN 1981.szeptember 28 1250 1400 30 250 ANALYST 1987.április 19. 3000 20 150 ANALYST 1981.december 03. 3000 20 150 CLERK 7902 1980.december 17. 800 20 160 CLERK 1982.január 23. 1300 10 130 Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) - 30 - C4. Feladat Listázza formázva (fej-, és lábléccel, stb.) a dolgozók nevét, munkakörét, részlegének nevét, a jutalmat is tartalmazó összjövedelmét, a

főnökének nevét, és annak telephelyét elsődlegesen a részleg neve szerint növekvően, másodlagosan a összjövedelem szerint csökkenő módon rendezve. Ha egy dolgozónak nincs főnöke, akkor a főnök adatainak helyére írja ki, hogy "nincs főnök". Megoldás SET SET SET SET verify OFF pagesize 19 linesize 82 feedback OFF BREAK ON ReszlegNev TTITLE Dolgozók adatainak|nyilvántartása BTITLE Budapesti Műszaki Főiskola COLUMN DolgozoNeve HEADING A dolgozó|neve COLUMN Munkakor HEADING A dolgozó|munkaköre COLUMN ReszlegNev HEADING A dolgozó|részlege COLUMN OsszJov HEADING A dolgozó|összjövedelme COLUMN FonokNeve HEADING A főnök|neve COLUMN FonokTelep HEADING A főnök|telephelye FORMAT A15 FORMAT A10 FORMAT A12 JUSTIFY RIGHT FORMAT A15 FORMAT A12 SELECT d.ename AS DolgozoNeve, d.job AS Munkakor, dr.dname AS ReszlegNev, d.sal+NVL(dcomm,0)+djutalom AS OsszJov, NVL(f.ename,nincs főnök) AS FonokNeve, NVL(fr.loc,nincs főnök) AS FonokTelep FROM

dolgozó8 d, dolgozó8 f, részleg7 dr, részleg7 fr WHERE d.mgr = fempno(+) AND d.deptno = drdeptno AND f.deptno = frdeptno(+) ORDER BY FonokNeve ASC, OsszJov DESC; SET verify ON SET pagesize 40 SET linesize 400 SET feedback ON TTITLE OFF BTITLE OFF CLEAR BREAKS CLEAR COLUMNS V. Nov. 20 lap 1 Dolgozók adatainak nyilvántartása A dolgozó neve --------------SMITH SCOTT FORD MARTIN WARD ALLEN TURNER MILLER JAMES A dolgozó munkaköre ---------CLERK ANALYST ANALYST SALESMAN SALESMAN SALESMAN SALESMAN CLERK CLERK A dolgozó A dolgozó A főnök A főnök részlege összjövedelme neve telephelye ------------ ------------- --------------- -----------RESEARCH 960 FORD DALLAS 3150 nincs főnök nincs főnök 3150 nincs főnök nincs főnök SALES 2900 nincs főnök nincs főnök 2000 nincs főnök nincs főnök 1980 nincs főnök nincs főnök 1575 nincs főnök nincs főnök ACCOUNTING 1430 nincs főnök nincs főnök SALES 1140 nincs főnök nincs főnök Budapesti Műszaki

Főiskola Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) - 31 - MELLÉKLET Árnyék-objektumok Példa Az alábbiakban az azonos nevű nézettáblák és adattáblák használatának konfliktusát mutatjuk be. Megoldás 1. lépés (Egy egyszerű nézettábla létrehozása) CREATE OR REPLACE VIEW dolgozó8 AS SELECT * FROM emp; A nézet létrejött. 2. lépés (Egy adattábla törlésének kisérlete) DROP TABLE dolgozó8; DROP TABLE dolgozó8 * Hiba a(z) 1. sorban: ORA-00942: a tábla vagy a nézet nem létezik 3. lépés (Egy egyszerű adattábla létrehozásának kisérlete) CREATE TABLE dolgozó8 AS SELECT * FROM emp; CREATE TABLE dolgozó8 * Hiba a(z) 1. sorban: ORA-00955: ez a név egy létező objektum neve Megjegyzés Ha az 1. lépésről nem tudunk, akkor a 2 lépésbeli tábla-törlési kisérlet hibaüzenetéből úgy gondolhatjuk, hogy a dolgozó8 adattáblát nyugodtan létrehozhatjuk, hiszen ilyen néven "tábla vagy a nézet nem

létezik". Ám a 3 lépés adattábla-létrehozási kisérletének kudarca jelzi, hogy valami baj van. Mi a megoldás? Le kell kérdeznünk a felhasználó objektumait! 4. lépés (Az Objektum katalógus lekérdezése) SELECT * FROM user catalog; TABLE NAME -----------------------------BONUS SALGRADE BIN$qsoIO/yYT+qL9ocOnn94Rg==$0 DOLGOZÓ8 BIN$HRjtpgeGS7+61D7GZeNSSQ==$0 BIN$0ySrJpEOQHSFkvoBFw6ReQ==$0 BIN$QUd8b6c8T7SJiG7sviD5MA==$0 BIN$wZ9aIlWzRSC4P2K5pQ3eKg==$0 BIN$HHROi1ZzTAiUFU2gOs6BLw==$0 BIN$rrM8+xqJRoaXI1dcG8hqWA==$0 BIN$dtyJYaRQQ4OXGTMY44AILQ==$0 BIN$Hl6MRiGSRA6TUyMVFn5z9g==$0 EMP BIN$HLIO/j11SWqL0BHKSp4V+w==$0 DEPT TABLE TYPE ----------TABLE TABLE TABLE VIEW TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) - 32 - BIN$KWlSQ3NGQaiZkLDahyGHwQ==$0 BIN$7cWjDm8CRnugRC8rQ77uUw==$0 BIN$pXLoaD9sSe+Fx6GcQsyHPQ==$0 BIN$5dNOHAlIQmuYbN3jR8dccw==$0 BIN$hgQH12k6RuCb2pwVQ+9Ltg==$0

BIN$II2W0au8QOOSymSJ0muaPA==$0 BIN$XbtNKE6HTFukOnNFtLFTdA==$0 BIN$TtGlSmVqRkWZCb6p1pP+uQ==$0 BIN$XVGyLrBDRHuKt308WBtVLQ==$0 BIN$VbjAbu/9Sr2c7nMFAzvJrg==$0 BIN$73zYMWXFRha13wlB6hImrg==$0 BIN$mO044dDIRsamltwvO/nZdw==$0 BIN$uqFCSi9FRaiJwBpKdjbVlg==$0 BIN$gSUkFqw0RVuWopgEWWrQZw==$0 BIN$ZUHVJm4xQnKApRdcO728fg==$0 BIN$COV8HJ2xR7q1aydEwgg2pQ==$0 BIN$l6w9tXgIQ/Cr8Ru/yANcsA==$0 BIN$DaWFiVKyT5COozYE8aGUYg==$0 BIN$je3xJCYDRRaJJ1g21MRTnQ==$0 RÉSZLEG8 TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE 35 sor kijelölve. Megjegyzés Ha szeretnénk a számunkra érdektelen rendszer-objektumokat kihagyni a listából, akkor az Objektum katalógust az alábbi módon kérdezzük le: SELECT * FROM user catalog WHERE UPPER(TABLE NAME) NOT LIKE %BIN%; TABLE NAME -----------------------------BONUS DEPT DOLGOZÓ8 EMP FONOKOK RÉSZLEG8 SALGRADE TABLE TYPE ----------TABLE TABLE VIEW TABLE VIEW TABLE TABLE 7 sor kijelölve. 5. lépés

(Az alkalmatlan nézettábla törlése) DROP VIEW dolgozó8; A nézet eldobva. 6. lépés (Az adattábla létrehozásának kisérlete) CREATE TABLE dolgozó8 AS SELECT * FROM emp; A tábla létrejött. Megjegyzés Sikerült.! Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) - 33 -