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 TABLE TYPE ------------------------------ ----------BONUS TABLE SALGRADE TABLE BIN$cf3RznwPTY+EvudRGHkQpA==$0 TABLE BIN$LyCk51gPQeGFtY6Vzpoqeg==$0 TABLE BIN$jbjmAQQlSP687PyXQeaGdA==$0 TABLE BIN$rFi9sCIrRUeZCwogOPc5ng==$0 TABLE BIN$HRjtpgeGS7+61D7GZeNSSQ==$0 TABLE BIN$0ySrJpEOQHSFkvoBFw6ReQ==$0 TABLE BIN$QUd8b6c8T7SJiG7sviD5MA==$0 TABLE BIN$wZ9aIlWzRSC4P2K5pQ3eKg==$0 TABLE DOLGOZÓ8 VIEW BIN$N+QGkUEwTGOeKajQfjBuVA==$0 TABLE BIN$R3gv3phyTYqHZ32rQOfM5Q==$0 TABLE BIN$dtyJYaRQQ4OXGTMY44AILQ==$0 TABLE BIN$+8fzRwI0TN+2frz59c9RxQ==$0 TABLE
BIN$+O5j8FZGSmSddxZD0RkLQg==$0 TABLE BIN$Hl6MRiGSRA6TUyMVFn5z9g==$0 TABLE BIN$opEaC97PRMGFNZAr6GxRsw==$0 TABLE EMP TABLE BIN$HLIO/j11SWqL0BHKSp4V+w==$0 TABLE DEPT TABLE BIN$KWlSQ3NGQaiZkLDahyGHwQ==$0 TABLE BIN$7cWjDm8CRnugRC8rQ77uUw==$0 TABLE RÉSZLEG8 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; AND AND EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO FŐNÖK FŐNÖKFIZ ----- ---------- --------- ----- ---------- ----- ----- ------ ---------- -------7698 BLAKE MANAGER 7839 1981-05-01 2850 30 KING 5000 7782 CLARK MANAGER 7839 1981-06-09 2450 10 KING 5000 7566
JONES MANAGER 7839 1981-04-02 2975 20 KING 5000 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 BLAKE 2850 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 BLAKE 2850 7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30 BLAKE 2850 7900 JAMES CLERK 7698 1981-12-03 950 30 BLAKE 2850 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30 BLAKE 2850 7902 FORD ANALYST 7566 1981-12-03 3000 20 JONES 2975 7369 SMITH CLERK 7902 1980-12-17 800 20 FORD 3000 7934 MILLER 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 ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- ----- ---------- ----- ----- -----7698 BLAKE MANAGER 7839 1981-05-01 2850 30 7782 CLARK MANAGER
7839 1981-06-09 2450 10 7566 JONES MANAGER 7839 1981-04-02 2975 20 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30 7900 JAMES CLERK 7698 1981-12-03 950 30 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30 7902 FORD ANALYST 7566 1981-12-03 3000 20 7369 SMITH CLERK 7902 1980-12-17 800 20 7934 MILLER 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 ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- ----- ---------- ----- ----- -----7698 BLAKE MANAGER 1981-05-01 2850 30 7782 CLARK MANAGER 1981-06-09 2450 10 7566 JONES MANAGER 1981-04-02 2975 20 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30 7900 JAMES CLERK 7698 1981-12-03 950 30 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30 7902 FORD ANALYST 7566 1981-12-03 3000 20 7369
SMITH CLERK 7902 1980-12-17 800 20 7934 MILLER 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 DNAME LOC ------ -------------- ------------10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS 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 Megszorítás Tulajdonos TáblaNév OszlopNév Neve Tipusa Leírása ---------- ---------- ------------ ----------------- ------ ---------------------scott dolgozó8 DEPTNO SYS C005641 C "DEPTNO" IS NOT NULL EMPNO SYS C005640 C "EMPNO" IS NOT NULL részleg8 DEPTNO SYS C005642 C "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 CONSTRAINT NAME CONSTRAINT TYPE SEARCH CONDITION ----------- ---------------- -------------------- -------------------DOLGOZÓ8 HIVATKOZÓ R DOLGOZÓ8 KULCS P DOLGOZÓ8 SYS C005521 C "DEPTNO" IS NOT NULL DOLGOZÓ8 SYS C005520 C "EMPNO" IS NOT NULL columns törölve Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) -8- 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 ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- ----- ---------- ----- ----- -----7782 CLARK MANAGER 1981-06-09 2450 10 7566 JONES MANAGER 1981-04-02 2975 20 7902 FORD ANALYST 7566 1981-12-03 3000 20 7369 SMITH CLERK 7902 1980-12-17 800 20 7934 MILLER 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 HIREDATE SAL COMM DEPTNO ----- ---------- --------- ----- ---------- ----- ----- -----7698 BLAKE MANAGER 1981-05-01 2850 30 7782 CLARK MANAGER 1981-06-09 2450 10 7566 JONES MANAGER 1981-04-02 2975 20 7654 MARTIN SALESMAN 7698 1981-09-28 1250
1400 30 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30 7900 JAMES CLERK 7698 1981-12-03 950 30 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30 7902 FORD ANALYST 7566 1981-12-03 3000 20 7369 SMITH CLERK 7902 1980-12-17 800 20 7934 MILLER CLERK 7782 1982-01-23 1300 10 11 sor kijelölve. 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 ENAME JOB MGR HIREDATE SAL COMM DEPTNO JUTALOM ----- ---------- --------- ----- ---------- ----- ----- ------ ------7698 BLAKE MANAGER 1981-05-01 2850 30 400 7782 CLARK MANAGER 1981-06-09 2450 10 400 7566 JONES MANAGER 1981-04-02 2975 20 400 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 400 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 800 7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30 800 7900 JAMES CLERK 7698 1981-12-03 950 30 800 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30 800 7902 FORD ANALYST 7566 1981-12-03 3000 20 400 7369 SMITH CLERK 7902 1980-12-17 800 20 800 7934 MILLER 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 verify OFF SET numwidth 5 SET pagesize 21 SET linesize 85 SET 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' FORMAT A15 COLUMN Munkakor HEADING 'A
dolgozó|munkaköre' FORMAT A10 COLUMN DolgozoReszleg HEADING 'A dolgozó|részlege' FORMAT A12 COLUMN Osszes HEADING 'A dolgozó|összjövedelme' JUSTIFY RIGHT COLUMN FonokNeve HEADING 'A főnök|neve' FORMAT A15 COLUMN FonokTelep HEADING 'A főnök|telephelye' FORMAT A12 SELECT d.ename AS DolgozoNeve, d.job AS Munkakor, dr.dname AS DolgozoReszleg, d.sal+NVL(dcomm,0)+djutalom AS Osszes, NVL(f.ename,'nincs főnöke') AS FonokNeve, NVL(fr.loc,'nincs főnöke') AS FonokTelep 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; 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ó A dolgozó A dolgozó A dolgozó A főnök A főnök neve munkaköre részlege
összjövedelme neve telephelye --------------- ---------- ------------ ------------- --------------- -----------MARTIN SALESMAN SALES 3050 BLAKE CHICAGO ALLEN 2700 BLAKE CHICAGO WARD 2550 BLAKE CHICAGO TURNER 2300 BLAKE CHICAGO JAMES CLERK SALES 1750 BLAKE CHICAGO MILLER ACCOUNTING 2100 CLARK NEW YORK SMITH RESEARCH 1600 FORD DALLAS FORD ANALYST RESEARCH 3400 JONES DALLAS JONES MANAGER RESEARCH 3375 nincs főnöke nincs főnöke BLAKE SALES 3250 nincs főnöke nincs főnöke CLARK 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 ENAME JOB MGR HIREDATE SAL COMM DEPTNO JUTALOM ----- ---------- --------- ----- ---------- ----- ----- ------ ------7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 800 7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30 800 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 400 7521 WARD 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 ENAME JOB MGR HIREDATE SAL COMM DEPTNO JUTALOM ----- ---------- --------- ----- ---------- ----- ----- ------ ------7844 TURNER SALESMAN 7698 1981-09-08 1601 0 30 800 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 800 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 400 7521 WARD 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 nézet eldobva. A nézet eldobva. A tábla eldobva. A tábla 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 TABLE TYPE ------------------------------ ----------BONUS TABLE SALGRADE TABLE EMP TABLE DEPT 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 ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- ----- ---------- ----- ----- -----7566 JONES MANAGER 7839 1981-04-02 2975 20 7782 CLARK MANAGER 7839 1981-06-09 2450 10 7788
SCOTT ANALYST 7566 1987-04-19 3000 20 7839 KING 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 ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- ----- ---------- ----- ----- -----7566 JONES MANAGER 7839 1981-04-02 2975 20 7782 CLARK MANAGER 7839 1981-06-09 2450 10 7788 SCOTT ANALYST 7566 1987-04-19 3000 20 7839 KING 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 ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- ----- ---------- ----- ----- -----7566 JONES MANAGER 7839
1981-04-02 2975 20 7782 CLARK MANAGER 7839 1981-06-09 2450 10 7788 SCOTT ANALYST 7566 1987-04-19 3000 20 7839 KING 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 DNAME LOC ------ -------------- ------------10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS 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 CONSTRAINT NAME CONSTRAINT TYPE SEARCH CONDITION ----------- --------------- ---------------- --------------------RÉSZLEG8 SYS C005540 C "DEPTNO" IS NOT NULL DOLGOZÓ8 SYS C005538 C "EMPNO" IS NOT NULL DOLGOZÓ8 SYS C005539 C "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 CONSTRAINT NAME CONSTRAINT TYPE SEARCH CONDITION ---------- --------------- ---------------- ---------------------------------------DOLGOZÓ8 SYS C005539 C "DEPTNO" IS NOT NULL DOLGOZÓ8 SYS C005538 C "EMPNO" IS NOT NULL DOLGOZÓ8 KULCSFIZ C (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 ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- ----- ---------- ----- ----- -----7566 JONES MANAGER 7839 1981-04-02 2975 20 7782 CLARK MANAGER 7839 1981-06-09 2450 10 7788 SCOTT ANALYST 7566 1987-04-19 3000 20 7839 KING PRESIDENT 1981-11-17 5000 10 7876 JANCSI MANAGER 7788 2005-11-01 2500 20 9999 JULISKA 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 ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- -----
---------- ----- ----- -----7566 JONES MANAGER 7839 1981-04-02 2975 20 7782 CLARK MANAGER 7839 1981-06-09 2450 10 7788 SCOTT ANALYST 7566 1987-04-19 3000 20 7839 KING 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 ENAME JOB MGR HIREDATE SAL
COMM DEPTNO JUTALOM ----- ---------- --------- ----- ---------- ----- ----- ------ ------7566 JONES MANAGER 7839 1981-04-02 2975 20 1000 7782 CLARK MANAGER 7839 1981-06-09 2450 10 600 7788 SCOTT ANALYST 7566 1987-04-19 3000 20 600 7839 KING 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 verify OFF SET pagesize 15 SET linesize 83 SET 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' FORMAT A15 COLUMN Munkakor HEADING 'A dolgozó|munkaköre' FORMAT A10 COLUMN ReszlegNev HEADING 'A dolgozó|részlege' FORMAT A12 COLUMN OsszJov HEADING 'A dolgozó|összjövedelme' JUSTIFY RIGHT COLUMN FonokNeve HEADING 'A főnök|neve' FORMAT A15 COLUMN FonokTelep HEADING 'A főnök|telephelye' 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öke=') AS FonokNeve, fr.loc AS FonokTelep 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; 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ó A
dolgozó A dolgozó A dolgozó A főnök A főnök neve munkaköre részlege összjövedelme neve telephelye --------------- ---------- ------------ ------------- --------------- -----------SCOTT ANALYST RESEARCH 4000 JONES DALLAS JONES MANAGER RESEARCH 3975 KING NEW YORK CLARK MANAGER ACCOUNTING 3050 KING NEW YORK KING PRESIDENT 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 TABLE TYPE ------------------------------ ----------BONUS TABLE DEPT TABLE EMP TABLE SALGRADE 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 ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- ----- ------------------- ----- ----- -----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 9 sor kijelölve. -- 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 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 Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) - 25 - 7902 FORD ANALYST 7369 SMITH CLERK 7934 MILLER CLERK 9 sor 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 DNAME LOC ------ -------------- ------------10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS 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 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 9 sor kijelölve. 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 ENAME JOB MGR HIREDATE SAL COMM DEPTNO JUTALOM ----- ---------- --------- ----- ------------------- ----- ----- ------ ------7521 WARD SALESMAN 1981.február 22. 1250 500 30 250 7900 JAMES CLERK 1981.december 03. 950 30 190 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 250 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 160 7934 MILLER CLERK 1982.január 23. 1300 10 9 sor kijelölve. -- 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 ENAME JOB MGR HIREDATE SAL COMM DEPTNO JUTALOM ----- ---------- --------- ----- ------------------- ----- ----- ------ ------7521 WARD SALESMAN 1981.február 22. 1250 500 30 250 7900 JAMES CLERK 1981.december 03. 950 30 190 7844 TURNER SALESMAN 1981.szeptember 08 1500 0 30 75 7499 ALLEN SALESMAN 1981.február 20. 1600 300 30 80 7654 MARTIN SALESMAN 1981.szeptember 28 1250 1400 30 250 7788 SCOTT ANALYST 1987.április 19. 3000 20 150 7902 FORD ANALYST 1981.december 03. 3000 20 150 7369 SMITH CLERK 7902 1980.december 17. 800 20 160 7934 MILLER CLERK 1982.január 23.
1300 10 9 sor kijelölve. -- 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 ENAME JOB MGR HIREDATE SAL COMM DEPTNO JUTALOM ----- ---------- --------- ----- ------------------- ----- ----- ------ ------7521 WARD SALESMAN 1981.február 22. 1250 500 30 250 7900 JAMES CLERK 1981.december 03. 950 30 190 7844 TURNER SALESMAN 1981.szeptember 08 1500 0 30 75 7499 ALLEN SALESMAN 1981.február 20. 1600 300 30 80 7654 MARTIN SALESMAN 1981.szeptember 28 1250 1400 30 250 7788 SCOTT ANALYST 1987.április 19. 3000 20 150 7902 FORD ANALYST 1981.december 03. 3000 20 150 7369 SMITH CLERK 7902 1980.december 17. 800 20 160 7934 MILLER CLERK 1982.január 23. 1300 10 130 9 sor kijelölve. 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 verify OFF SET pagesize 19 SET linesize 82 SET feedback OFF BREAK ON ReszlegNev TTITLE 'Dolgozók adatainak|nyilvántartása' BTITLE 'Budapesti Műszaki Főiskola' COLUMN DolgozoNeve HEADING 'A dolgozó|neve' FORMAT A15 COLUMN Munkakor HEADING 'A dolgozó|munkaköre' FORMAT A10 COLUMN ReszlegNev HEADING 'A dolgozó|részlege' FORMAT A12 COLUMN OsszJov HEADING 'A dolgozó|összjövedelme' JUSTIFY RIGHT COLUMN FonokNeve HEADING 'A főnök|neve' FORMAT A15 COLUMN FonokTelep HEADING 'A főnök|telephelye' 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ó A dolgozó A dolgozó A dolgozó A főnök A főnök neve munkaköre részlege összjövedelme neve telephelye --------------- ---------- ------------ ------------- --------------- -----------SMITH CLERK RESEARCH 960 FORD DALLAS SCOTT ANALYST 3150 nincs főnök nincs főnök FORD ANALYST 3150 nincs főnök nincs főnök MARTIN SALESMAN SALES 2900 nincs főnök nincs főnök WARD SALESMAN 2000 nincs főnök nincs főnök ALLEN SALESMAN 1980 nincs főnök nincs főnök TURNER SALESMAN 1575 nincs
főnök nincs főnök MILLER CLERK ACCOUNTING 1430 nincs főnök nincs főnök JAMES CLERK 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 TABLE TYPE ------------------------------ ----------BONUS TABLE SALGRADE TABLE BIN$qsoIO/yYT+qL9ocOnn94Rg==$0 TABLE DOLGOZÓ8 VIEW BIN$HRjtpgeGS7+61D7GZeNSSQ==$0 TABLE BIN$0ySrJpEOQHSFkvoBFw6ReQ==$0 TABLE BIN$QUd8b6c8T7SJiG7sviD5MA==$0 TABLE BIN$wZ9aIlWzRSC4P2K5pQ3eKg==$0 TABLE BIN$HHROi1ZzTAiUFU2gOs6BLw==$0 TABLE BIN$rrM8+xqJRoaXI1dcG8hqWA==$0 TABLE BIN$dtyJYaRQQ4OXGTMY44AILQ==$0 TABLE BIN$Hl6MRiGSRA6TUyMVFn5z9g==$0 TABLE EMP TABLE BIN$HLIO/j11SWqL0BHKSp4V+w==$0 TABLE DEPT TABLE Oracle SQL összefoglaló feladatok, megoldással (2005, 33 oldal) - 32 -
BIN$KWlSQ3NGQaiZkLDahyGHwQ==$0 TABLE BIN$7cWjDm8CRnugRC8rQ77uUw==$0 TABLE BIN$pXLoaD9sSe+Fx6GcQsyHPQ==$0 TABLE BIN$5dNOHAlIQmuYbN3jR8dccw==$0 TABLE BIN$hgQH12k6RuCb2pwVQ+9Ltg==$0 TABLE BIN$II2W0au8QOOSymSJ0muaPA==$0 TABLE BIN$XbtNKE6HTFukOnNFtLFTdA==$0 TABLE BIN$TtGlSmVqRkWZCb6p1pP+uQ==$0 TABLE BIN$XVGyLrBDRHuKt308WBtVLQ==$0 TABLE BIN$VbjAbu/9Sr2c7nMFAzvJrg==$0 TABLE BIN$73zYMWXFRha13wlB6hImrg==$0 TABLE BIN$mO044dDIRsamltwvO/nZdw==$0 TABLE BIN$uqFCSi9FRaiJwBpKdjbVlg==$0 TABLE BIN$gSUkFqw0RVuWopgEWWrQZw==$0 TABLE BIN$ZUHVJm4xQnKApRdcO728fg==$0 TABLE BIN$COV8HJ2xR7q1aydEwgg2pQ==$0 TABLE BIN$l6w9tXgIQ/Cr8Ru/yANcsA==$0 TABLE BIN$DaWFiVKyT5COozYE8aGUYg==$0 TABLE BIN$je3xJCYDRRaJJ1g21MRTnQ==$0 TABLE RÉSZLEG8 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 TABLE TYPE
------------------------------ ----------BONUS TABLE DEPT TABLE DOLGOZÓ8 VIEW EMP TABLE FONOKOK VIEW RÉSZLEG8 TABLE SALGRADE 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 -