Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Bevezetés az Oracle SQL-be Bevezetés. 2 Bevezetés az Oracle SQL-be A tanfolyam céljai •Relációs adatmodellen alapuló adatbáziskezelő rendszer fogalmainak.

Hasonló előadás


Az előadások a következő témára: "Bevezetés az Oracle SQL-be Bevezetés. 2 Bevezetés az Oracle SQL-be A tanfolyam céljai •Relációs adatmodellen alapuló adatbáziskezelő rendszer fogalmainak."— Előadás másolata:

1 Bevezetés az Oracle SQL-be Bevezetés

2 2 Bevezetés az Oracle SQL-be A tanfolyam céljai •Relációs adatmodellen alapuló adatbáziskezelő rendszer fogalmainak megismertetése. •Az SQL (Structured Query Language) használatával –adatbázis objektumok, táblák, nézetek létrehozása az adatbázisban, –a táblákban tárolt adatok karbantartása, lekérdezése. •Az adatok kezelésére PL/SQL blokkok készítése.

3 3 Bevezetés az Oracle SQL-be Az ORACLE Szerver és az ORACLE eszközök Designer/2000 Discoverer/2000 ORACLE Szerver Developer/2000 +Egyéb eszközök: SQL*Plus, SQL*DBA, segédprogramok

4 4 Bevezetés az Oracle SQL-be Az ORACLE Szerver funkciói •Adatbázis kialakítása, objektumok létrehozása •Adatok tárolása, karbantartása •Adatok visszakeresése •Adatvédelem, adatbiztonság megoldása •Tranzakciókezelés –véglegesítés, visszagörgetés, rollback szegmensek –automatikus helyreállítás –elosztott adatbázisok •Felhasználók kezelése –jogosultságok kiosztása –egyidejű hozzáféréskor lefoglalási mechanizmusok

5 5 Bevezetés az Oracle SQL-be A relációs adatbázis fogalmai •Az adatok táblákban kerülnek tárolásra. Minden tábla sorokból és oszlopokból áll. •Egy oszlopban azonos típusú adatokat tárolunk. •A sorok tartalmazzák az összetartozó oszlopértékeket. •Ha egy oszlop nem kap értéket valamelyik sorban, akkor azt modjuk, hogy az értéke NULL. Telephely tábla Sor Oszlop

6 6 Bevezetés az Oracle SQL-be A relációs adatbázis fogalmai •Az elsődleges kulcs (Primary key) olyan oszlop, vagy oszlopok kombinációja, amely egyedileg azonosítja a tábla minden sorát. •Az idegen kulcs (Foreign key) olyan oszlop, vagy oszlopok csoportja, amely egy másik tábla elsődleges kulcsára hivatkozik. Idegen kulcsok használatával tudunk adatokat több táblából logikailag összekapcsolni.

7 7 Bevezetés az Oracle SQL-be Táblák összekapcsolása Elsődleges kulcs Idegen kulcsElsődleges kulcs

8 8 Bevezetés az Oracle SQL-be A relációs adatbázis jellemzői •Egy relációs adatbázis kétdimenziós táblák halmaza. Felhasználói adatok + Adatszótár •A logikai és fizikai szerkezet független. •Relációs műveletek megvalósítása a táblákon. •Online módon módosítható. •Teljes adatfüggetlenség. •Anyanyelve: SQL

9 B evezetés az Oracle SQL-be 1. SQL alapok

10 10 Bevezetés az Oracle SQL-be Az SQL, PL/SQL és az SQL*Plus •SQL –Szabványos –nem algoritmikus, halmazorientált nyelv; –Minden Oracle eszköz illetve alkalmazás használja a szerverrel való kommunikációra. •PL/SQL –Procedurális nyelv alkalmazáslogika írására és adatok kezelésére az alkalmazáson kívül. •SQL*Plus –Oracle eszköz, amely interaktív környezetet biztosít SQL utasítások és PL/SQL blokkok végrehajtásához; –Saját parancsnyelvvel rendelkezik.

11 11 Bevezetés az Oracle SQL-be Az SQL parancsai •Adatlekérdezés –SELECT •Adatmanipulációs nyelv (DML) –INSERT, UPDATE, DELETE •Adatdefiníciós nyelv (DDL) –CREATE, ALTER, DROP, RENAME, TRUNCATE •Tranzakció kezelés (DCL) –COMMIT, ROLLBACK, SAVEPOINT •Adatvezérlő nyelv (DCL) –GRANT, REVOKE

12 12 Bevezetés az Oracle SQL-be Egyszerű lekérdezések •A SELECT utasításrész meghatározza, hogy mely oszlopok kerülnek kiválasztásra. A * minden oszlop kiválasztását jelenti. •A FROM utasításrész meghatározza, hogy melyik táblából. •Az álnév az oszlopoknak alternatív fejlécet ad. SELECT[DISTINCT] {*| oszlop [álnév],...} FROMtábla;

13 13 Bevezetés az Oracle SQL-be A tábla teljes tartalmának kiíratása SQL> SELECT * 2 FROM telephely; T_KOD T_NEV CIM IRODAK BUDAPEST 20 UJ_AUTO BUDAPEST 30 UJ_AUTO GYOR 40 UJ_AUTO DEBRECEN 50 HASZNALT_AUTO BUDAPEST 60 HASZNALT_AUTO SZEGED 70 DEVIZAS_AUTO BUDAPEST 7 rows selected.

14 14 Bevezetés az Oracle SQL-be Oszlopok kiválasztása SQL> SELECT a_kod, a_nev, beosztas, belepes 2 FROM alkalmazott; A_KOD A_NEV BEOSZTAS BELEPES KOVACS ELADO 10-DEC MOLNAR SZERELO 08-FEB CSIKOS ELADO 12-MAR TOTH VIZSGABIZTOS 22-APR NEMETH TELEPHELYVEZETO 28-NOV SZABO IGAZGATO 01-MAY BALOGH SZERELO 09-JUN KIRALY VIZSGABIZTOS 04-AUG HERCEG ELADO 12-NOV BOGNAR ELADO 08-OCT HALASZ SZERELO 23-MAY HORVAT TELEPHELYVEZETO 09-DEC KISS ELADO 23-DEC-71

15 15 Bevezetés az Oracle SQL-be Aritmetikai kifejezések a SELECT listában •Numerikus és dátum típusú oszlopok, konstansok valamint a következő műveletek kombinációjával kifejezéseket tudunk előállítani: –összeadás+ –kivonás- –szorzás* –osztás/ •A kifejezések kiértékelése a műveletek erősségi sorrendje szerint történik, ami zárójelezéssel megváltoztatható. SQL> SELECTa_nev, fizetes*12 eves_fizetes 2 FROMalkalmazott ;

16 16 Bevezetés az Oracle SQL-be Összekapcsolt oszlopok •Az összefűzés operátorral oszlopokat és karaktersorozatokat kapcsolunk össze. Jele: || •A SELECT listában ún. literálok is elhelyezhetők. SQL> SELECTa_kod||a_nev dolgozok 2 FROMalkalmazott ; SQL> SELECTa_kod||’-’||a_nev ”Dolgozok”, 2 ’Telepe: ’, t_kod 3 FROMalkalmazott ;

17 17 Bevezetés az Oracle SQL-be NULL értékek kezelése •A NULL érték ismeretlen értéket jelent, nem azonos a nullával vagy szóközzel. •Aritmetikai kifejezésben NULL eredményt idéz elő. •NULL érték átalakítása az NVL függvénnyel: –NVL(belepes, ’01-JAN-98’) –NVL(beosztas, ’TANULO’) –NVL(premium, 0) SQL> SELECTa_nev, fizetes*12+premium eves_jov 2 FROMalkalmazott ; SQL> SELECTa_nev, fizetes*12+NVL(premium,0) eves_jov 2 FROMalkalmazott ; ?!

18 18 Bevezetés az Oracle SQL-be Ismétlődő sorok kiküszöbölése •Alapértelmezés szerint egy lekérdezés megjelenít minden sort, beleértve az ismétlődő sorokat is. •Az ismétlődő sorok megjelenítését a SELECT utasításban a DISTINCT kulcsszó használatával kerülhetjük el. SQL> SELECT beosztas 2 FROM alkalmazott; SQL> SELECT DISTINCT beosztas 2 FROM alkalmazott; SQL> SELECT DISTINCT t_kod, beosztas 2 FROM alkalmazott;

19 Bevezetés az Oracle SQL-be 2. Az SQL*Plus használata

20 20 Bevezetés az Oracle SQL-be SQL*Plus: áttekintés •Az SQL*Plus felhasználói felületet nyújt az adatbázishoz. •Elfogad és végrehajt SQL*Plus parancsokat, SQL parancsokat és PL/SQL blokkokat. •Az SQL*Plus parancskészlete: –SQL parancsok szerkesztése a pufferben –A táblák szerkezetének lekérdezése –Parancsállományok mentése, végrehajtása –Változók definiálása –Lekérdezések eredményének formázása –Környezet beállítása –Egyéb parancsok

21 21 Bevezetés az Oracle SQL-be Bejelentkezés az SQL*Plus-ba •Windows környezetből: –az ikonra való dupla kattintással –felhasználói név és jelszó megadásával • Parancssorból: –sqlplus felhasználónév/jelszó •Megjelenik a prompt:SQL> •Kilépés: EXITvagyQUIT •Átjelentkezés másik felhasználó neve alá: CONNECT felhasználónév/jelszó •Lekapcsolódás az adatbázisról: DISCONNECT

22 22 Bevezetés az Oracle SQL-be Parancsok kiadása •SQL parancsok kiadása –Az utasítás végét ; jelzi vagy / üres sorban –Végrehajtás Enter hatására –; nélküli Enter folytatósort eredményez –Utolsó SQL parancs újrafuttatása:RUN vagy / •SQL*Plus parancsok kiadása –Parancsokat jellel lezárni nem kell, végrehajtás Enter hatására –Folytatósor a - karakter beírásával kapható

23 23 Bevezetés az Oracle SQL-be SQL*Plus szerkesztési parancsok Az utoljára begépelt SQL parancs a pufferbe kerül, ahonnan listázható, szerkeszthető vagy futtatható, amíg újabb parancsot nem adunk ki. •L[IST] n Puffer tartalmának listázása. A *-gal jelölt sor az aktuális. •A[PPEND] szöveg Aktuális for folytatása. •C[HANGE] / régi/ új Aktuális sor módosítása. C[HANGE] / szöveg/ Törli a szöveget a sorból. •n szöveg Teljes sor tartalmának cseréje. •I[NPUT] szöveg Új sor bevitele az aktuális után. •DELAktuális sor törlése.

24 24 Bevezetés az Oracle SQL-be Parancsállományok kezelése •Puffer tartalom állományba mentése és visszatöltése ( alapértelmezett kiterjesztés.SQL) : SAVE állománynév GET állománynév •Parancsállományok futtatása: START állománynév •Parancsállomány szerkesztése: EDIT állománynév DEFINE_EDITOR=’editor_név’

25 25 Bevezetés az Oracle SQL-be Változók definiálása •Behelyettesítő változók &változólokális, csak az adott előfordulásnál érvényes &&változóglobális •Felhasználói változók definiálása, törlése DEFINE változó vagy DEFINE változó=érték UNDEFINE •Interaktív értékadással ACCEPT változó [típus] [FORMAT] [PROMPT szöveg] [HIDE] •Szövegek kiírása PROMPT szöveg •Paraméterek használata parancsállományokban jelölése:&1 … &9 futtatáskor: START állománynév pm1 pm2 …

26 26 Bevezetés az Oracle SQL-be Egyéb parancsok •Tábla szerkezetének (oszlopnevek, adattípusok) megjelenítése: DESC[RIBE] tábla •Segítő képernyők megjelenítése: HELP parancs •Képernyőn megjelenő output tördelése: SET PAUSE ON •Parancsok, képernyőtartalom állományba irányítása: SPOOL állománynév SPOOL OFF •Operációs rendszer parancsok futtatása: HOST vagy HOST parancs

27 Bevezetés az Oracle SQL-be 3. Sorok kiválasztása

28 28 Bevezetés az Oracle SQL-be Az ORDER BY utasításrész •A lekérdezett sorokat az ORDER BY utasításrész segítségével tudjuk valamely oszlop vagy kifejezés értéke szerint rendezetten megjeleníteni. •Az ASC az alapértelmezés, ami növekvő sorrendet jelent, a DESC pedig csökkenőt. •Az ORDER BY egy SELECT parancs utolsó része. SELECT[DISTINCT] {*| oszlop [álnév],...} FROMtábla [ORDER BY{kifejezés | n}[ASC |DESC],... ];

29 29 Bevezetés az Oracle SQL-be Sorok rendezése SQL> SELECT a_nev, beosztas, fizetes 2 FROM alkalmazott 3 ORDER BYa_nev; SQL> SELECT a_nev, beosztas, belepes 2 FROM alkalmazott 3 ORDER BYbelepes DESC; SQL> SELECT a_nev, beosztas, t_kod 2 FROM alkalmazott 3 ORDER BY2; •Az oszlopnév helyett használható az oszlop pozíciója a SELECT listában.

30 30 Bevezetés az Oracle SQL-be Sorok rendezése több szempont szerint •Több oszlop szerint is tudunk rendezni. •Olyan oszlop szerint is rendezhetünk, amelyik nincs kiválasztva. •A NULL értékek a növekvő rendezések végén illetve a csökkenő rendezések elején jelennek meg. SQL> SELECT t_kod, a_nev, fizetes 2 FROM alkalmazott 3 ORDER BYt_kod, fizetes DESC;

31 31 Bevezetés az Oracle SQL-be Válogatás a sorok között •A WHERE utasításrész használatával szelektálunk a sorok között. A lekérdezés csak a feltételnek eleget tevő sorokat adja vissza. •A WHERE utasításrész a FROM utasításrészt követi. •A feltétel egy logikai kifejezés, melyben szerepel: –oszlopnév, kifejezés, állandó –összehasonlító operátor SELECT[DISTINCT]{*| oszlop [álnév],...} FROMtábla [WHEREfeltétel ];

32 32 Bevezetés az Oracle SQL-be Összehasonlító és logikai operátorok •Relációs operátorok = != > >= < <= •SQL operátorok –BETWEEN... AND... –IN (értéklista) –LIKE ’karakterminta’ –IS NULL •Logikai operátorok –NOT –AND –OR

33 33 Bevezetés az Oracle SQL-be Relációk a feltételben SQL> SELECT * 2 FROM alkalmazott 3 WHEREfizetes >= 25000; SQL> SELECT * 2 FROM alkalmazott 3 WHEREbelepes > ’01-JAN-80’; SQL> SELECT * 2 FROM alkalmazott 3 WHEREbeosztas = ’ELADO’;

34 34 Bevezetés az Oracle SQL-be A BETWEEN és az IN operátorok •A BETWEEN operátorral egy oszlop vagy kifejezés értékének egy értéktartományba tartozását vizsgáljuk. •Az IN operátorral eldönthető, hogy a vizsgált érték az listában felsoroltak között előfordul-e. SQL> SELECT * 2 FROM alkalmazott 3 WHEREfizetes BETWEEN AND 30000; SQL> SELECT * 2 FROM alkalmazott 3 WHEREt_kod IN (10, 30, 60);

35 35 Bevezetés az Oracle SQL-be A LIKE operátor •A LIKE operátorral egy karaktermintához való illeszkedést vizsgálunk. •A karaktermintában használható joker karakterek: –%tetszőleges számú karaktert helyettesít –_egy karaktert jelöl SQL> SELECT * 2 FROM alkalmazott 3 WHEREa_nev LIKE ’H%’; SQL> SELECT * 2 FROM alkalmazott 3 WHEREa_nev LIKE ’_E%’;

36 36 Bevezetés az Oracle SQL-be Az IS NULL operátor •NULL értékhez hasonlítás csak ezzel az operátorral végezhető. SQL> SELECT * 2 FROM alkalmazott 3 WHEREpremium IS NULL; SQL> SELECT * 2 FROM alkalmazott 3 WHEREpremium IS NOT NULL;

37 37 Bevezetés az Oracle SQL-be Összetett feltételek •A relációs műveletekkel alkotott feltételekből logikai operátorokkal összetett logikai kifejezéseket készíthetünk. •Műveletek erősségi sorrendje: összehasonlító operátorok, NOT, AND, OR SQL> SELECT * 2 FROM alkalmazott 3 WHEREbeosztas NOT IN (’SZERELO’, ’ELADO’) AND belepes BETWEEN ’01-JAN-75’ AND ’31-DEC-83’; SQL> SELECT * 2 FROM alkalmazott 3 WHEREbeosztas = ’ELADO’ AND (t_kod=20 OR t_kod=40);

38 Bevezetés az Oracle SQL-be 4. Egysoros függvények

39 39 Bevezetés az Oracle SQL-be Az SQL függvényeinek áttekintése •Függvények használhatók: –adatokon történő számítások végrehajtására –adategységek módosítására –sorok csoportonkénti kezelésére –dátum adatok különböző formátumú megjelenítésére –oszlop adattípusok konvertálására •Függvény típusok: –Egysoros függvények karakteres numerikus dátum konverziós egyéb –Csoport függvények

40 40 Bevezetés az Oracle SQL-be Egysoros függvények •Az egysoros függvények –a lekérdezés által visszaadott sorok mindegyikén végrehajtódnak –soronként egy eredményt adnak vissza –egy vagy több argumentumuk van –egymásba ágyazhatók •Függvénykifejezés bárhol szerepelhet egy parancsban, ahol oszlop, kifejezés vagy változó állhat.

41 41 Bevezetés az Oracle SQL-be Karakteres függvények A karakteres függvények karakteres vagy szám értéket adnak. LOWER(sztring)Karaktersorozatot kisbetűsre alakít. UPPER(sztring)Karaktersorozatot nagybetűsre alakít. INITCAP(sztring) A kezdőbetűt nagybetűre a többit kisbetűre alakítja. CONCAT(sztring1,sztring2) A két szöveget összefűzi. SUBSTR(sztring, n [, m])Az eredeti szöveg n. pozíciójától kezdődőm hosszú részkaraktersorozatot adja. LENGTH(sztring)A karaktereksorozat hosszát adja. INSTR(sztring1,sztring2 [,n [,m]])Az első szöveg n. karakterétől kezdve a második szöveg m. előfordulásának pozícióját adja vissza.

42 42 Bevezetés az Oracle SQL-be Karakteres függvények LPAD(sztring, h [,’karakterek’])A karaktersorozatot balról kiegészíti h hosszúra a karakterekkel. RPAD(sztring, h [,’karakterek’])A karaktersorozatot jobbról kiegészíti h hosszúra a karakterekkel. LTRIM(sztring [,’karakterek’])A karaktersorozat elejéről levágja a felsorolt karaktereket. RTRIM(sztring [,’karakterek’])A karaktersorozat végéről levágja a felsorolt karaktereket. TRANSLATE(sztring, s1,s2)Az első szövegben az s1 karaktereit kicseréli s2 karaktereire. REPLACE(sztring, s1 [,s2])Az első szövegben megkeresi az s1 szöveget és kicseréli s2-re.

43 43 Bevezetés az Oracle SQL-be Karakteres függvények SQL> SELECT INITCAP(a_nev), LOWER(beosztas) 2 FROM alkalmazott; SQL> SELECT a_nev 2 FROM alkalmazott 3 WHEREbeosztas=UPPER(’elado’); SQL> SELECT LENGTH(a_nev), SUBSTR(beosztas,2,4) 2 FROM alkalmazott; SQL> SELECT RPAD(a_nev,15,’_’),LPAD(beosztas,20), 2LPAD(t_kod,8, ’.’) 3 FROM alkalmazott;

44 44 Bevezetés az Oracle SQL-be Karakteres függvények SQL> SELECT beosztas, LTRIM(beosztas,’ET’), 2RTRIM(beosztas,’OTD’) 3 FROM alkalmazott; SQL> SELECT beosztas, REPLACE(beosztas,’EL’,’XY’), 2TRANSLATE(beosztas,’EL’,’XY’) 3 FROM alkalmazott;

45 45 Bevezetés az Oracle SQL-be Numerikus függvények A numerikus függvények argumentuma és visszaadott értéke is numerikus. ABS(érték)Abszolútérték. CEIL(érték) A legkisebb olyan egész, amely nagyobb vagy egyenlő az értéknél. FLOOR(érték) A legnagyobb olyan egész, amely kisebb vagy egyenlő az értéknél. MOD(m, n) Az m / n egészosztás maradéka. POWER(érték, kitevő) Hatványozás. ROUND(érték [, n]) Kerekítés n tizedesjegyre. SIGN(érték) Előjel függvény. SQRT(érték) Négyzetgyök. TRUNC (érték [, n]) Csonkolás n tizedesjegyre.

46 46 Bevezetés az Oracle SQL-be Numerikus függvények SQL> SELECT ROUND(89.342,2), ROUND(51.659), 2ROUND(73.856,-1) 3 FROM DUAL; SQL> SELECT TRUNC(89.342,2), TRUNC(51.659), 2TRUNC(73.856,-1) 3 FROM DUAL; SQL> SELECT ABS(-128), SIGN(-8), POWER(2,3), 2SQRT(99), MOD(9,2) 3 FROM DUAL; SQL> SELECT fizetes, fizetes/30, 2CEIL(fizetes/30), FLOOR(fizetes/30) 3 FROM alkalmazott;

47 47 Bevezetés az Oracle SQL-be Az ORACLE dátum formátum •Az ORACLE a dátumokat belső numerikus formában tárolja – évszázad, év, hónap, nap, óra, perc, másodperc •A dátumok alapértelmezés szerinti megjelenítése a következő: DD-MON-YY •A SYSDATE olyan függvény, amely az aktuális dátumot és az időt adja eredményül. •A DUAL olyan segédtábla, amelyet akkor használunk, ha csak a szintakszis miatt van szükségünk táblanévre. SQL> SELECT SYSDATE 2 FROM DUAL;

48 48 Bevezetés az Oracle SQL-be Aritmetikai műveletek dátumokkal •Dátumhoz adott számú napot ad hozzá lehet adni, vagy ki lehet vonni, hogy dátum értéket kapunk eredményül. •Két dátum kivonható egymásból, ezáltal megkapjuk a két dátum közötti napok számát. •Dátumhoz adott számú órát ad hozzá lehet adni úgy, hogy az órák számát 24-gyel osztja. SQL> SELECT a_nev, belepes, belepes+14, 2(SYSDATE-belepes)/365 3 FROM alkalmazott;

49 49 Bevezetés az Oracle SQL-be Dátum függvények Minden dátum függvény, a MONTHS_BETWEEN kivételével dátum típusú értéket ad vissza. MONTHS_BETWEEN(d1,d2)Két dátum közötti hónapok száma. ADD_MONTHS(dátum,n) n hónapot ad a dátumhoz. NEXT_DAY(dátum,’nap’) A megadott dátumot követő nap pl. ’FRIDAY’ dátuma. LAST_DAY(dátum) A hónap utolsó napja. ROUND(dátum [,’fmt’]) A dátumot kerekíti a formátumnak megfelelően. TRUNC(dátum [,’fmt’]) Csonkolja a dátumot a formátumnak megfelelően.

50 50 Bevezetés az Oracle SQL-be Dátum függvények SQL> SELECT a_nev, belepes, 2MONTHS_BETWEEN(SYSDATE, belepes) 3 FROM alkalmazott; SQL> SELECT NEXT_DAY(SYSDATE,’FRIDAY’), 2LAST_DAY(SYSDATE) 3 FROM DUAL; SQL> SELECT ROUND(SYSDATE,’MONTH’), 2ROUND(SYSDATE,’YEAR’) 3 FROM DUAL; SQL> SELECT TRUNC(SYSDATE,’MONTH’), 2TRUNC(SYSDATE,’YEAR’) 3 FROM DUAL;

51 51 Bevezetés az Oracle SQL-be Konverziós függvények áttekintése •A TO_CHAR szám vagy dátum értéket alakít át karakter- sorozattá: TO_CHAR(szám/dátum [, ’formátum’]) •A TO_NUMBER számjegyeket tartalmazó karakter - sorozatot alakít át számmá: TO_NUMBER(sztring [, ’formátum’]) •A TO_DATE dátumot jelentő karaktersorozatot alakít át dátum értékké: TO_DATE(sztring [, ’formátum’]) •A konverziós függvények számos elemből álló formátum modelleket használhatnak.

52 52 Bevezetés az Oracle SQL-be Dátumok konvertálása SQL> SELECT a_nev, TO_CHAR(belepes, ’YYYY.MM.DD’) 2 FROM alkalmazott; SQL> SELECT TO_CHAR(SYSDATE, ’Day, YYYY Month DD’) 2 FROM DUAL; SQL> SELECT TO_CHAR(SYSDATE, ’YY.MM.DD HH:MI:SS’) 2 FROM DUAL; SQL> SELECT * 2 FROM alkalmazott 3 WHEREbelepes>= 4 TO_DATE(’ ’, ’YYYY.MM.DD’)

53 53 Bevezetés az Oracle SQL-be Dátum formátum elemek YYYY Az év négy számjegyen. YY Az év évszázad nélkül. QA negyedév sorszáma. MMA hónap két számjegyen. MON A hónap nevének 3 betűs rövidítése. MONTH A hónap teljes neve. WW vagy WAz év vagy hónap hanyadik hete. DDD v. DD v. DAz év, hónap vagy hét hanyadik napja. DYA hét napjának hárombetűs rövidítése. DAY A nap teljes neve. AM vagy PMDélelőtt vagy délután. HHvagy HH24A nap hanyadik órája. MIPerc (0-59). SSMásodperc (0-59).

54 54 Bevezetés az Oracle SQL-be Számok konvertálása •A következő formátum elemek használhatók: 9Számjegyet jelöl. 0A vezető nullákat megjeleníti. $Lebegő dollárjelet helyez el. LLebegő helyi pénznem szimbólumot használ..Tizedespontot jelenít meg., Ezresek elválasztó jelét jeleníti meg. MIMínuszjel a jobb oldalon. PRNegatív szám zárójelben. EEEELebegőpontos megjelenítés. SQL> SELECT a_nev, TO_CHAR(fizetes,’999,999’), 2 TO_CHAR(premium,’0999,999’), 3 FROM alkalmazott;

55 55 Bevezetés az Oracle SQL-be Egyéb függvények •Bármilyen típusú adatot elfogadnak argumentumként. SQL> SELECT t_kod, DECODE(t_nev,’IRODAK’,’Irodak’, 2 ’UJ_AUTO’,’Uj autok’,’HASZNALT_AUTO’,’Hasznalt 3 autok’,’Egyeb’) 4 FROM telephely; SQL> SELECT a_nev, GREATEST(fizetes,premium) 3 FROM alkalmazott; SQL> SELECT a_nev, LEAST(fizetes,premium) 3 FROM alkalmazott; SQL> SELECT a_nev, NVL(fonok,’NINCS’) 3 FROM vallalat;

56 56 Bevezetés az Oracle SQL-be Egymásba ágyazott egysoros függvények •Az egysoros függvények bármilyen szinten egymásba ágyazhatók. •Az egymásba ágyazott függvények kiértékelése a legbelső szinttől kifelé történik. SQL> SELECT CONCAT(INITCAP(a_nev), LOWER(beosztas)) 2 FROM alkalmazott;

57 Bevezetés az Oracle SQL-be 5. Csoport függvények

58 58 Bevezetés az Oracle SQL-be Csoport függvények •Sorok egy csoportján hajtódnak végre és csoportonként egy eredményt adnak vissza. •A GROUP BY utasításrész a SELECT által kiválaszott sorokat csoportokba osztja valamilyen szempont szerint. •A HAVING utasításrészben a csoportok között lehet szelektálni. SELECToszlop, csoportfüggvény FROMtábla [WHEREfeltétel] [GROUP BYoszlop] [HAVINGcsoport_feltétel] [ORDER BYoszlop];

59 59 Bevezetés az Oracle SQL-be Csoport függvények AVG([DISTINCT | ALL] num.kif)A kifejezés átlaga. COUNT([DISTINCT | ALL] kif | *)A nem NULL értékek száma, * esetén a sorok száma. MAX([DISTINCT | ALL] kif)A kifejezés maximális értéke. MIN([DISTINCT | ALL] kif)A kifejezés minimális értéke. SUM([DISTINCT | ALL] num.kif)A kifejezés összege. VARIANCE([DISTINCT | ALL] num.kif) A kifejezés szórásnégyzete. STDDEV([DISTINCT | ALL] num.kif)A kifejezés normál szórása. •Alapértelmezés szerint minden értékre, a DISTINCT opcióval csak a különbözőekre vonatkoznak a függvények. •A COUNT(*) kivételével a függvények nem veszik figyelembe a NULL értékeket.

60 60 Bevezetés az Oracle SQL-be Csoport függvények •A teljes tábla egy csoport: •Tábla szűkítése a WHERE feltétellel: SQL> SELECT MIN(fizetes), MAX(fizetes), 2 AVG(fizetes), SUM(fizetes), COUNT(premium) 3 FROM alkalmazott; SQL> SELECT MIN(a_nev), MAX(a_nev) 2 FROM alkalmazott; SQL> SELECT MIN(a_nev), MAX(a_nev) 2 FROM alkalmazott 3 WHEREbeosztas=’ELADO’;

61 61 Bevezetés az Oracle SQL-be A GROUP BY utasításrész •A tábla sorainak csoportosítása a GROUP BY utasításrészben felsorolt oszlop vagy oszlopok értékei alapján. A sorok csoportosítása után kerülnek kiértékelésre a csoportokon a függvények. SQL> SELECT t_kod, MIN(fizetes), MAX(fizetes), 2 AVG(fizetes), SUM(fizetes), COUNT(*) 3 FROM alkalmazott 4 GROUP BYt_kod; SQL> SELECT beosztas, AVG(fizetes) 2 FROM alkalmazott 3 GROUP BYbeosztas 4 ORDER BY AVG(fiztes);

62 62 Bevezetés az Oracle SQL-be A HAVING utasításrész •Szelektálás a csoportok között a HAVING után megadott feltétellel lehetséges. Mivel csoportok között válogat, csoport kifejezésre vonatkozik a feltétel. SQL> SELECT t_kod, MIN(fizetes), MAX(fizetes), 2 AVG(fizetes), SUM(fizetes), COUNT(*) 3 FROM alkalmazott 4 GROUP BYt_kod 5 HAVINGCOUNT(*)>2; SQL> SELECT t_kod 2 FROM alkalmazott 3 GROUP BYt_kod 4 HAVINGAVG(fiztes)>17000;

63 63 Bevezetés az Oracle SQL-be Csoportfüggvények használata •A SELECT listában csoport kifejezés mellett oszlopnév abban az esetben szerepelhet, ha a GROUP BY után is fel van sorolva. •A tábla sorai közötti válogatásra csak a WHERE használható. •A csoportok kiválasztása csak a HAVING használatával lehetséges. •Az alapértelmezett sorrend a GROUP BY után szereplő oszlop értékeinek növekvő sorrendje.

64 64 Bevezetés az Oracle SQL-be Csoportok egymásba ágyazása •A GROUP BY utasításrészben több oszlop felsorolásával csoportokon belüli alcsoportok képezhetők. SQL> SELECT t_kod, beosztas, COUNT(*) 2 FROM alkalmazott 3 GROUP BYt_kod, beosztas;

65 Bevezetés az Oracle SQL-be 6. Lekérdezés több táblából

66 66 Bevezetés az Oracle SQL-be Táblák összekapcsolása •Az összekapcsolás vagy JOIN művelet adatok egynél több táblából történő lekérdezésére szolgál. •A táblák sorai a megfelelő oszlopokban levő közös értékek, jellemzően elsődleges és idegen kulcs értékek alapján kapcsolhatók össze. •Összekapcsolási módszerek: – egyen-összekapcsolás (equi-join) – nem-egyen-összekapcsolás (non-equi-join) – külső összekapcsolás (outer join) – összekapcsolás önmagával – halmazműveletek

67 67 Bevezetés az Oracle SQL-be Táblák közötti kapcsolat

68 68 Bevezetés az Oracle SQL-be Egyenlőségen alapuló összekapcsolás •A WHERE kulcsszó után szerepel az összekapcsolási feltétel. •Ha egy oszlopnév mindkét táblában szerepel, a táblanév előtaggal kell ellátni. •Kettőnél több tábla is összekapcsolható. SELECTtábla.oszlop, tábla.oszlop FROMtábla1, tábla2 WHEREtábla1.oszlop1 = tábla2.oszlop2;

69 69 Bevezetés az Oracle SQL-be Egyenlőségen alapuló összekapcsolás •Minden dolgozó telephely kódja és neve mellett jelenítsük meg, hogy melyik városban dolgozik! •Az AND operátorral valódi szelekciós feltétellel egészíthető ki a kapcsoló feltétel: SQL> SELECT alkalmazott.t_kod, a_nev, cim 2 FROM alkalmazott, telephely 3 WHEREalkalmazott.t_kod=telephely.t_kod; SQL> SELECT alkalmazott.t_kod, a_nev, cim 2 FROM alkalmazott, telephely 3 WHEREalkalmazott.t_kod=telephely.t_kod 4 AND a_nev LIKE ’H%’;

70 70 Bevezetés az Oracle SQL-be Tábla álnevek alkalmazása •Tábla álnevek vezethetők be a FROM utasításrészben a hosszú táblanevek helyett. •Ha tábla álneveket vezetünk be, a továbbiakban ezeket kell használni az oszlopok neveinek minősítéséhez. •Csak az aktuális SELECT utasításra érvényesek. SQL> SELECT a.t_kod, a_nev, cim 2 FROM alkalmazott a, telephely t 3 WHEREa.t_kod=t.t_kod; SQL> SELECT a.*, t_nev, cim 2 FROM alkalmazott a, telephely t 3 WHEREa.t_kod=t.t_kod;

71 71 Bevezetés az Oracle SQL-be Szorzat •Amennyiben a WHERE kulcsszó után nem adunk meg összekapcsolási feltételt, az első tábla minden sora össze lesz kapcsolva a második tábla minden sorával. Az eredménysorok száma 91. SQL> SELECT alkalmazott.t_kod, a_nev, cim 2 FROM alkalmazott, telephely;

72 72 Bevezetés az Oracle SQL-be Nem-egyen-összekapcsolás •A táblák összekapcsolása nem a kapcsolódó oszlopok értékének egyenlősége alapján történik, hanem valamilyen más műveletet alkalmazunk. A lekérdezés azokat az alkalmazottakat adja eredményül, akiknek a fizetése nagyobb, mint BALOGH fizetése. SQL> SELECT a.a_nev, a.beosztas, a.fizetes, 2b.a_nev, b.fizetes 3 FROM alkalmazott a, alkalmazott b 4 WHEREa.fizetes>b.fizetes 5 AND b.a_nev=’BALOGH’;

73 73 Bevezetés az Oracle SQL-be Külső összekapcsolás •Külső összekapcsolást akkor használunk, ha az olyan sorokat is látni akarjuk, amelyekhez a kapcsoló feltétel szerint nem tartozik sor a másik táblából. •A külső összekapcsolás jele a plusz jel (+), amelyet a kapcsoló feltételnek arra az oldalára kell helyeznünk, ahol nincs összekapcsolni való érték. Ekkor ez a tábla egy csupa NULL értéket tartalmazó sorral egészül ki. A 70-es telephely is megjelenik. SQL> SELECT t.t_kod, t_nev, cim, a_kod, a_nev 2 FROM alkalmazott a, telephely t 3 WHEREt.t_kod=a.t_kod(+);

74 74 Bevezetés az Oracle SQL-be Tábla összekapcsolása önmagával •Egy tábla sorai ugyanabban a táblában lévő sorokkal is összekapcsolhatók. •A FROM utasításrészben két különböző álnevet kell használni ugyanarra a táblára. SQL> SELECT a.a_nev, a.beosztas, a.fizetes, 2b.a_nev, b.fizetes 3 FROM vallalat a, vallalat b 4 WHEREa.fonok=b.a_kod;

75 75 Bevezetés az Oracle SQL-be Halmazműveletek SQL> SELECT beosztas FROM alkalmazott 2 WHERE t_kod=30 3 UNION 4 SELECT beosztas FROM alkalmazott 5 WHERE t_kod=40; SQL> SELECT beosztas FROM alkalmazott 2 WHERE t_kod=30 3 INTERSECT 4 SELECT beosztas FROM alkalmazott 5 WHERE t_kod=40; SQL> SELECT beosztas FROM alkalmazott 2 WHERE t_kod=30 3 MINUS 4 SELECT beosztas FROM alkalmazott 5 WHERE t_kod=40;

76 76 Bevezetés az Oracle SQL-be Halmazműveletek használata •A SELECT listában azonos számú, egymásnak megfelelő adattípusú oszlop kell hogy szerepeljen. •Az eredményben az első SELECT oszlopnevei jelennek meg. •A duplikált sorok nem jelennek meg. •Az ORDER BY utasításrészt az utasítás végén kell elhelyezni, és benne az oszlopokra csak sorszámokkal lehet hivatkozni.

77 Bevezetés az Oracle SQL-be 7. Belső lekérdezések

78 78 Bevezetés az Oracle SQL-be Belső lekérdezések •A belső lekérdezés egy olyan SELECT utasítás, amely egy másik SQL utasításba van beillesztve. •Akkor használatos, amikor egy lekérdezés feltételében olyan ismeretlen érték szerepel, ami a táblában levő adatoktól függ. SELECT... FROM... WHERE... (SELECT... FROM... WHERE...); Belső lekérdezés Külső lekérdezés

79 79 Bevezetés az Oracle SQL-be Belső lekérdezések •Belső lekérdezés egy SELECT utasítás WHERE vagy HAVING utasításrészébe ágyazható. •A belső lekérdezést zárójelek közé kell helyezni. •A belső lekérdezések nem tartalmazhatnak ORDER BY utasításrészt. •A belső lekérdezés a visszaadott sorok számának megfelelően lehet egysoros vagy többsoros. •Több SQL utasítás is tartalmazhat belső SELECT-et. •A kiértékelés menete: –először a beágyazott SELECT utasítás hajtódik végre –az eredmény a külső lekérdezés feltételébe kerül át.

80 80 Bevezetés az Oracle SQL-be Egysoros belső lekérdezések •Kik azok az alkalmazottak, akiknek a beosztása ugyanaz, mint HERCEG beosztása? •Több oszlop átvétele a belső lekérdezésből: SQL> SELECT a_nev, beosztas 2 FROM alkalmazott 3 WHEREbeosztas = (SELECT beosztas 4 FROM alkalmazott 5 WHERE a_nev=’HERCEG’); SQL> SELECT a_nev, beosztas, fizetes 2 FROM alkalmazott 3 WHERE(beosztas,fizetes)= 4(SELECT beosztas, fizetes 5 FROM alkalmazott 6 WHERE a_nev=’BOGNAR’);

81 81 Bevezetés az Oracle SQL-be Többsoros belső lekérdezések •Kik dolgoznak UJ AUTO nevű telephelyen? •Kerssük meg minden telephelyen a legkisebb fizetésű alkalmazottat! SQL> SELECT a_nev, beosztas, t_kod 2 FROM alkalmazott 3 WHEREt_kod IN (SELECT t_kod 4 FROM telephely 5 WHERE t_nev=’UJ_AUTO’); SQL> SELECT a_nev, fizetes, t_kod 2 FROM alkalmazott 3 WHERE(fizetes,t_kod) IN 4(SELECT MIN(fizetes),t_kod 5 FROM alkalmazott 6 GROUP BY t_kod);

82 82 Bevezetés az Oracle SQL-be Belső lekérdezés a HAVING utasításrészben •Melyik a legalacsonyabb átlagfizetéssel járó beosztás? SQL> SELECT beosztas, AVG(fizetes) 2 FROM alkalmazott 3 GROUP BY beosztas 4 HAVING AVG(fizetes)=(SELECT MIN(AVG(fizetes)) 5 FROM alkalmazott 6 GROUP BY beosztas);

83 83 Bevezetés az Oracle SQL-be Korrelált lekérdezések •Amikor a belső lekérdezés hivatkozik a külső valamelyik oszlopára, a belső SELECT nem értékelhető ki önállóan. •A kiértékelés menete: –a külső lekérdezés minden egyes sorára végrehajtódik a belső lekérdezés –az eredmény birtokában eldönthető, hogy az adott sor bekerül-e a végső eredménybe. •Kik keresnek többet a telephelyük átlagánál? SQL> SELECT a_nev, fizetes, t_kod 2 FROM alkalmazott a 3 WHEREfizetes > (SELECT AVG(fizetes) 4 FROM alkalmazott 5 WHERE t_kod=a.t_kod);

84 84 Bevezetés az Oracle SQL-be Az EXISTS használata •Néha csak arra vagyunk kiváncsiak, hogy a belső lekérdezés ad-e vissza sort. •Mely telephelyeken dolgozik ELADO? •További operátorok: SOME, ALL. SQL> SELECT DISTINCT t_kod 2 FROM alkalmazott a 3 WHEREEXISTS (SELECT * FROM alkalmazott 4 WHERE a.beosztas=’ELADO’);

85 Bevezetés az Oracle SQL-be 8. Hierarchikus keresés

86 86 Bevezetés az Oracle SQL-be Táblákban kódolt hierarchiák a_kod=1239 fonok=1239 •Ha egy táblában valamely oszlop hivatkozik egy másik oszlop értékeire, akkor ez a kapcsolat szemléletessé tehető egy speciális SELECT utasítással. •A VALLALAT táblában az A_KOD és FONOK oszlopok között van ilyen kapcsolat:

87 87 Bevezetés az Oracle SQL-be Hierachikus keresés •A CONNECT BY után adhatók meg a kapcsolatot megvalósító oszlopok. •A PRIOR a bejárás irányát határozza meg. •A START WITH a bejárás kezdőpontját jelöli ki. •A SELECT listában szerepelhet a LEVEL pszeudooszlop, amelynek értéke az adott sor hierarchiában elfoglalt szintje. •A SELECT csak egy táblára adható ki. SELECToszlop, oszlop,... FROMtábla CONNECT BY PRIORoszlop1 = oszlop2 START WITH oszlop = kifejezés;

88 88 Bevezetés az Oracle SQL-be Hierarchikus keresés •A hierarchia bejárása felülről lefelé: •Az eredménysorok rendezése: SQL> SELECT DISTINCT level,t_kod,a_kod,a_nev, 2 beosztas,fonok 3 FROM vallalat 4 CONNECT BY PRIOR a_kod=fonok 5 START WITH fonok IS NULL; SQL> SELECT DISTINCT level,t_kod,a_kod,a_nev, 2 beosztas,fonok 3 FROM vallalat 4 CONNECT BY PRIOR a_kod=fonok 5 START WITH fonok IS NULL 6 ORDER BY t_kod;

89 89 Bevezetés az Oracle SQL-be Hierarchikus keresés •A hierarchia bejárása alulról felfelé: SQL> SELECT DISTINCT level,t_kod,a_kod,a_nev, 2 beosztas,fonok 3 FROM vallalat 4 CONNECT BY PRIOR fonok=a_kod 5 START WITH a_nev=’KOVACS’;

90 90 Bevezetés az Oracle SQL-be Szelektív hierarchikus keresés •Az egyik telephelyvezető, NAGY kimarad, de az alárendeltjei szerepelnek: •NAGY teljes ága kimarad: SQL> SELECT DISTINCT level,t_kod,a_kod,a_nev, 2 beosztas,fonok 3 FROM vallalat WHERE a_nev<>’NAGY’ 4 CONNECT BY PRIOR a_kod=fonok 5 START WITH fonok IS NULL; SQL> SELECT DISTINCT level,t_kod,a_kod,a_nev, 2 beosztas,fonok 3 FROM vallalat 4 CONNECT BY PRIOR a_kod=fonok AND a_nev<>’NAGY’ 5 START WITH fonok IS NULL;

91 Bevezetés az Oracle SQL-be 9. Változók használata

92 92 Bevezetés az Oracle SQL-be SQL*Plus változók •Egy SQL utasításban elhelyezhetők változók, hogy az utasítást különböző értékekkel lehessen futtatni. •Változók szerepelhetnek oszlonevek, táblanevek, konstansok és kifejezések helyett az utasításban. •Az ún. behelyettesítő változók neve előtt & jel szerepel, értéküket az utasítás futtatásakor kell megadni. •Globális változók definiálhatók a DEFINE és ACCEPT SQL*Plus parancsokkal. •A fájlba mentett SQL utasításoknak, azaz a parancseljárásoknak &n-el jelölt paraméterek adhatók át.

93 93 Bevezetés az Oracle SQL-be Behelyettesítő változók •A &változó lokális, értékét az utasítás minden egyes futtatásakor, minden előfordulásánál meg kell adni. SQL> SELECT a_kod,a_nev,beosztas 2 FROM alkalmazott 3 WHEREt_kod=&telepkod 4 AND beosztas=’&munkakor’; Enter value for telepkod: 40 Enter value for munkakor: ELADO SQL> SELECT a_nev,beosztas,&oszlop1 2 FROM alkalmazott 3 ORDER BY&oszlop2; Enter value for oszlop1: BELEPES Enter value for oszlop2: A_NEV

94 94 Bevezetés az Oracle SQL-be Behelyettesítő változók •A &&változó globális, értékét csak egyszer kell megadni, az SQL*Plus tárolja és további futtatáskor azt használja, amíg meg szüntetjük a változót vagy ki nem lépünk az SQL*Plus-ból. SQL> SELECT a_nev,beosztas,&oszlop 2 FROM &&tabla; Enter value for oszlop: BELEPES Enter value for tabla: ALKALMAZOTT

95 95 Bevezetés az Oracle SQL-be Felhasználói változók •Felhasználói változók definiálása értékadással együtt végezhető el a DEFINE paranccsal. Az így lértehozott globális változó értéke felhasználható új érték adásáig, vagy a változó törléséig. DEFINE változó Változó értékének lekérdezése. DEFINE változó=értékVáltozó definiálása. UNDEFINE változó Változó törlése. SQL> DEFINE jov=fizetes*12+NVL(premium,0) SQL> SELECT a_nev,&jov 2 FROM alkalmazott; old 1: SELECT a_nev, &jov new 1: SELECT a_nev, fizetes*12+NVL(premium,0)

96 96 Bevezetés az Oracle SQL-be Felhasználói változók •Interaktív értékadással is definiálható változó: ACCEPT változó [típus] [FORMAT] [PROMPT szöveg] [HIDE] típusCHAR, NUMBER vagy DATE lehet. FORMAT fmtFormátum modell adható meg. PROMPT szövegMegjeleníti a szöveget. HIDEElrejti a felhasználói inputot. •Szövegek kiírása: PROMPT szöveg

97 97 Bevezetés az Oracle SQL-be Felhasználói változók A telep.sql parancseljaras: PROMPT Kerem, irja be a telephely kodjat! PROMPT Letezo telephelyek: 10, 20, …, 70 ACCEPT telepkod PROMPT ’Telephely kod: ’ SELECT a_nev,beosztas,fizetes FROM alkalmazott WHEREt_kod=&telepkod / SQL> START telep

98 98 Bevezetés az Oracle SQL-be Paraméterek •Egy SQL utasításban szereplő paraméterek értékét a parancseljárás indításánál lehet átadni. Jelölés: &1, … &9. •Futtatáskor a parancssorban az értékeket a paraméterek jelölésének megfelelő sorrendben kell megadni. A beosztas.sql parancseljárás: SELECT a_nev,beosztas,fizetes FROM alkalmazott WHEREbeosztas=’&1’ AND fizetes>&2 / SQL> START beosztas SZERELO 20000

99 Bevezetés az Oracle SQL-be 10. Táblák létrehozása

100 100 Bevezetés az Oracle SQL-be Adatstruktúrák •Az ORACLE adatbázisban különböző adatstruktúrák definiálhatók: –Tábla –Nézettábla –Szekvencia –Index •A szerkezeti elemek kezelését az adatdefiníciós résznyelv (DDL) utasításai végzik: –CREATE TABLE, VIEW, SEQUENCE, INDEX –ALTER TABLE, SEQUENCE –DROP TABLE, VIEW, SEQUENCE, INDEX

101 101 Bevezetés az Oracle SQL-be Tábla létrehozása •Tábla létrehozáshoz a felhasználónak CREATE TABLE jogosultsággal és tárolási területtel kell rendelkeznie. •Bármikor létrehozhatók táblák az adatbázisban. •A méretet nem szükséges előre meghatároznunk, az adatbázishoz rendelt tárolóhely mérete szab határt a növekedésnek. •A táblák szerkezete online is módosítható.

102 102 Bevezetés az Oracle SQL-be Tábla létrehozása •A tábla neve előtti séma megegyezik a tulajdonos nevével. •Zárójelek között vesszővel elválasztva következnek az oszlopdefiníciók. Megadandó az oszlop neve, adattípusa és mérete, definiálható alapértelmezett érték és az oszlopra vonatkozó integritási megszorítás. •Az oszlopdefiníciókat a táblára vonatkozó integritási megszorítás követheti. CREATE TABLE [séma.] tábla (oszlop adattípus [DEFAULT kifejezés] [oszlop_megszorítás],... [tábla_megszorítás] );

103 103 Bevezetés az Oracle SQL-be Táblák és oszlopok elnevezése •Szabályok: –A táblanevek és oszlopnevek hosszúsága 1 és 30 karkter között változhat. –A neveknek betűvel kell kezdődni és csak az A–Z, a–z, 0–9, _, $, és a # karaktereket tartalmazhatják. –A felhasználó sémáján belül a táblaneveknek, egy táblán belül az oszlopneveknek egyedinek kell lenniük. –A név nem lehet foglalt szó. •Tanácsok: –A név utaljon a tartalomra. –A rövidítések, egyes- és többesszám használata legyen következetes. –Ugyanaz az oszlop azonos névvel szerepeljen különböző táblákban

104 104 Bevezetés az Oracle SQL-be Adattípusok VARCHAR(n)Változó hosszúságú karakteres adat, n max lehet. CHAR(n)Fix hosszúságú karakteres adat, n max NUMBERLebegőpontos szám. NUMBER(n)n jegyből álló egész szám. NUMBER(n,d)n jegyből álló szám, melyből d a tizedesek száma. DATEDátum és idő. (ie isz. 4712) LONG Változó hosszúságú karakteres adat, max. 2GB méretű, változó méretű. RAW és LONG RAWUa. mint VARCHAR(2) és LONG, változó nagyságú bináris adat tárolására (kép, hang).

105 105 Bevezetés az Oracle SQL-be Tábla definiálása •Az ALKALMAZOTT tábla lehetséges definíciója: •A NOT NULL biztosítja, hogy az oszlopnak mindig kell valamilyen értéket adni adatbevitelkor. •A DEFAULT opció után megadott konstans, kifejezés vagy függvény értéke lesz az oszlop értéke, ha nem adunk meg semmit adatbevitelkor, elkerülve a NULL értéket. CREATE TABLE alkalmazott (a_kod VARCHAR(4) NOT NULL, a_nev VARCHAR(20), beosztas VARCHAR(16), belepes DATE DEFAULT SYSDATE, fizetes NUMBER(6), premium NUMBER(6), t_kod VARCHAR(2) NOT NULL);

106 106 Bevezetés az Oracle SQL-be Integritási megszorítások •Egy táblára vagy annak oszlopaira megszorítások vagy ún. kényszerek definiálhatók. Ezek olyan szabályok, amelyeket az ORACLE ellenőriz, és csak olyan műveleteket enged meg, amelyek ezeknek eleget tesznek. •A megszorítások definiálhatók: –tábla szinten (egy vagy több oszlopra vonatkoznak) –oszlop szinten (egy oszlopra vonatkoznak, az oszlopdefiníció részét képezik) •Megszorításokat vagy a tábla létrehozásakor adunk meg (CREATE TABLE) vagy később (ALTER TABLE). Ellenőrzésük ideiglenesen kikapcsolható. •Megszorítás típusok: NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK.

107 107 Bevezetés az Oracle SQL-be Integritási megszorítások •Oszlop szintű megszorítás: •Tábla szintű megszorítás: •A megszorítások az adatszótárban kerülnek tárolásra, a felhasználó által megadott névvel, vagy ennek hiányában az automatikusan generált SYS_Cn névvel. •A NOT NULL megszorítás csak oszlop szinten, a többi mindkét szinten megadható. oszlop [CONSTRAINT megszorítás_neve] megszorítás_típusa ( oszlop …, [CONSTRAINT megszorítás_neve] megszorítás_típusa,…)

108 108 Bevezetés az Oracle SQL-be A UNIQUE megszorítás •Egyedi értéket biztosít egy oszlopnak vagy oszlopok kombinációjának. •Ha egy oszlopra vonatkozik, akkor az oszlopban NULL érték is lehet. •Több oszlopra külön-külön is megadható. •Automatikusan UNIQUE indexet hoz létre. •A TELEPHELY tábla definíciója úgy, hogy ne legyen egy városban két azonos nevű telep: CREATE TABLE telephely (t_kod VARCHAR(2) NOT NULL, t_nev VARCHAR(20), cim VARCHAR(15), CONSTRAINT unq_tn_c UNIQUE (t_nev,cim));

109 109 Bevezetés az Oracle SQL-be A PRIMARY KEY megszorítás •A táblához elsődleges kulcsot hoz létre, egyedi értéket biztosítva egy oszlopnak vagy oszlopok kombinációjának. •Táblánként csak egy PRIMARY KEY megszorítást adhatunk meg. Ha több oszlopra vonatkozik, az elsődleges kulcs összetett lesz. •A kulcshoz tartozó oszlopokban nem szerepelhet NULL. •Automatikusan UNIQUE indexet hoz létre. •A TELEPHELY tábla definíciója PRIMARY KEY megszorítással: CREATE TABLE telephely (t_kod VARCHAR(2) CONSTRAINT pk_tk PRIMARY KEY, t_nev VARCHAR(20), cim VARCHAR(15));

110 110 Bevezetés az Oracle SQL-be A FOREIGN KEY megszorítás •Idegen kulcsként jelöl ki egy oszlopot vagy oszlopok csoportját. •Kapcsolatot teremt ugyanazon vagy másik tábla elsődleges vagy egyedi kulcsai között. •Értékét vagy a szülőtáblából veszi, ellenkező esetben csak NULL lehet. •Tábla szintű hivatkozási kényszer a TELEPHELY és ALKALMAZOTT táblák között: CREATE TABLE alkalmazott (... CONSTRAINT fk_tk FOREIGN KEY (t_kod) REFERENCES telephely(t_kod));

111 111 Bevezetés az Oracle SQL-be A FOREIGN KEY megszorítás •Oszlop szintű hivatkozási kényszer a VALLALAT tábla oszlopai között: •Az alapértelmezéssel ellentétben egy szülő sorral együtt a gyerek sorok is automatikusan törölhetők: CREATE TABLE vallalat (a_kod VARCHAR(4) PRIMARY KEY,... fonok VARCHAR(4) CONSTRAINT alk_fon REFERENCES vallalat(a_kod)); CREATE TABLE alkalmazott (... CONSTRAINT fk_tk FOREIGN KEY (t_kod) REFERENCES telephely(t_kod) ON DELETE CASCADE);

112 112 Bevezetés az Oracle SQL-be A CHECK megszorítás •Olyan feltételt definiál, amelyet minden sornak ki kell elégítenie. •Az alábbi kifejezéseket nem adhatjuk meg: –Hivatkozás pszeduooszlopokra: CURRVAL, NEXTVAL, LEVEL és ROWNUM. –SYSDATE, UID, USER és a USERENV függvények hívása. –Olyan lekérdezések, amelyek más sorok értékeire hivatkoznak. CREATE TABLE alkalmazott (... fizetes NUMBER(6)CHECK (fizetes>12000),...);

113 113 Bevezetés az Oracle SQL-be További opciók •Kényszer működésének felfüggesztése a DISABLE opcióval lehetséges. Később az ALTER TABLE utasítással visszaállítható az ellenőrzés. •A kényszert megsértő sorok táblába írhatók: CREATE TABLE alkalmazott (... fizetes NUMBER(6) CONSTRAINT fiz CHECK (fizetes>12000) DISABLE,...); CREATE TABLE alkalmazott (... fizetes NUMBER(6) CONSTRAINT fiz CHECK (fizetes>12000) EXCEPTIONS INTO fiz_h,...);

114 114 Bevezetés az Oracle SQL-be A mintatáblák definíciója •A TELEPHELY1 tábla: •Az ALKALMAZOTT1 tábla: SQL> CREATE TABLE alkalmazott1 (a_kod VARCHAR(4) PRIMARY KEY, a_nev VARCHAR(20), beosztas VARCHAR(16), belepes DATE, fizetes NUMBER(6), premium NUMBER(6), t_kod VARCHAR(2) REFERENCES telephely); SQL> CREATE TABLE telephely1 (t_kod VARCHAR(2) PRIMARY KEY, t_nev VARCHAR(20), cim VARCHAR(15));

115 115 Bevezetés az Oracle SQL-be Tábla létrehozása lekérdezés segítségével •Az AS opció megadásával úgy is lehetséges tábla létrehozása, hogy egy lekérdezés segítségével alakítjuk ki az új tábla szerkezetét, és egyben adatokkal is feltöltjük. •Az oszlopok definiálásakor csak az oszlopneveket, alapértelmezett értékeket és a rá vonatkozó integritási megszorításokat adhatjuk meg. •A lekérdezésben szereplő oszlopok számának meg kell egyeznie a tábladefinicióban megadott oszlopok számával. •Oszlopdefiníciók hiányában a tábla oszlopainak neve meg fog egyezni a lekérdezésben szerelő oszlopok nevével. CREATE TABLE tábla [(oszlop, oszlop, …)] AS al_lekérdezés;

116 116 Bevezetés az Oracle SQL-be Tábla létrehozása lekérdezés segítségével SQL> CREATE TABLE telep30 2 AS SELECT a_kod,a_nev,beosztas 3 FROM alkalmazott 4 WHEREt_kod=30; SQL> CREATE TABLE fiz20e (nev,munkakor,fizetes,cim) 2 AS SELECT a_nev,beosztas,fizetes,cim 3 FROM alkalmazott a, telephely t 4 WHEREa.t_kod=t.t_kod AND fizetes>=20000;

117 117 Bevezetés az Oracle SQL-be Tábla létrejöttének ellenőrzése •A SQL*Plus DESCRIBE parancsának segítségével ellenőrizhetjük az adatbázistábla létezését, és megtekinthetjük az oszlopdefiníciókat (név, adattípus). •A DESCRIBE csak a NOT NULL megszorítást jeleníti meg, a többit az adatszótárból kell lekérdezni. SQL> DESC telep30

118 Bevezetés az Oracle SQL-be 11. Táblák módosítása

119 119 Bevezetés az Oracle SQL-be Tábla szerkezetének módosítása •Az ALTER TABLE utasítással a következőket tehetjük: - oszlopokkal bővíthetjük a táblát és módosíthatjuk az oszlopok definícióját, - megszorításokat adhatunk meg és törölhetünk, - megszorításokat engedélyezhetünk és kapcsolhatunk ki. •A DROP TABLE utasítás a tábla szerkezetét és összes sorát is törli. •További, táblákkal összefüggő parancsok: RENAME, TRUNCATE, COMMENT. •A DDL parancsok kiadása előtt és után automatikus véglegesítés történik.

120 120 Bevezetés az Oracle SQL-be Oszlop hozzáadása a táblához •Az ADD utasításrészben egy új oszloppal bővíthető a tábladefiníció. •NOT NULL oszlop csak üres táblához adható. •Az új oszlop az utolsó lesz. •Oszlop törlése korlátozásokkal megengedett. ALTER TABLE tábla ADD (oszlop adattípus [DEFAULT kifejezés] [NOT NULL], … ); SQL> ALTER TABLE alkalmazott1 2 ADD (hazastars VARCHAR(20));

121 121 Bevezetés az Oracle SQL-be Oszlop definíciójának módosítása •A MODIFY utasításrészben az oszlopok adattípusa, mérete, alapértelmezett értéke, NOT NULL tulajdonsága változtatható meg. •Növelhető az oszlopszélesség vagy a tizedesek száma. •Csökkenthető az oszlop szélessége, ha az oszlop nem tartalmaz értékeket, vagy ha a táblában nincsenek sorok. •Módosítható az oszlop alapértéke a későbbi sorbeszúrásokra vonatkozóan. •NOT NULL megszorítás csak akkor definiálható, ha az oszlopban nincsenek NULL adatok. ALTER TABLE tábla MODIFY (oszlop adatípus [DEFAULT kifejezés] [NOT NULL],.. );

122 122 Bevezetés az Oracle SQL-be Oszlop definíciójának módosítása •Módosítható az adattípus, ha az oszlop csak NULL értékeket tartalmaz. •A CHAR és VARCHAR típusok konvertálhatók, ha nem változtatjuk a méretet. SQL> ALTER TABLE alkalmazott1 2 MODIFY (a_nev VARCHAR(25) NOT NULL);

123 123 Bevezetés az Oracle SQL-be Megszorítások hozzáadása és törlése •A megszorításokat megadhatjuk vagy törölhetjük, de nem módosíthatjuk. •A CASCADE opcióval a függésben levő megszorítások is törlődnek. ALTER TABLE tábla ADD [CONSTRAINT megszorítás_neve] megszorítás_típusa; ALTER TABLE tábla DROP PRIMARY KEY | UNIQUE (oszlop) | CONSTRAINT megszorítás_neve [CASCADE]; SQL> ALTER TABLE alkalmazott1 2 ADD CONSTRAINT fizell CHECK (fizetes>=15000);

124 124 Bevezetés az Oracle SQL-be Megszorítások letiltása és engedélyezése •A megszorításokat az ALTER TABLE parancs DISABLE utasításrészével tilthatjuk le, egy kikapcsolt megszorítás ellenőrzése pedig az ENABLE használatával állítható vissza. •A CASCADE opcióval kikapcsolhatjuk a függőségben lévő megszorításokat. ALTER TABLE tábla DISABLE | ENABLE CONSTRAINT megsz_neve [CASCADE]; SQL> ALTER TABLE alkalmazott1 2 DISABLE CONSTRAINT fizell;

125 125 Bevezetés az Oracle SQL-be Tábla törlése •A tábladefiníció törlésére szolgál az utasítás. •Táblát csak a tulajdonosa vagy a DROP ANY TABLE jogusultsággal rendelkező felhasználó törölhet. •A tábla adatai és a tábla összes indexe is törlésre kerül. A nézetek, szinonimák megmaradnak, de érvénytelenítődnek. •A CASCADE CONSTRAINTS opció megadása esetén az összes függőségben lévő megszorítás törlődik. •A többi DDL parancshoz hasonlóan a változások azonnal véglegesítődnek, tehát nem görgethető vissza. DROP TABLE tábla [CASCADE CONSTRAINTS]; SQL> DROP TABLE telep30;

126 126 Bevezetés az Oracle SQL-be Tábla adatainak törlése •A TRUNCATE parancs a tábla összes sorát törli, és felszabadítja a tábla által lefoglalt helyet. •A DDL parancsok csoportjába tartozik. •A parancs kiadása után nem nyerhetők vissza a törölt sorok. •A sorok a DELETE paranccsal is törölhetők, ekkor visszállíthatók a törölt sorok. SQL> TRUNCATE TABLE fiz20e;

127 127 Bevezetés az Oracle SQL-be Objektum átnevezése •A RENAME parancs végrehajtásával táblák, nézetek, szekvenciák és szinonimák neve változtatható meg. •Csak a tulajdonunkban lévő objektumokat nevezhetjük át. SQL> RENAME fiz20e TO fizetes20e;

128 128 Bevezetés az Oracle SQL-be Megjegyzések fűzése a táblához •A COMMENT paranccsal megjegyzések írhatók az adatszótárba a táblákhoz és az oszlopokhoz. •Megjegyzés úgy törölhető, hogy üres szöveget adunk meg. SQL> COMMENT ON TABLE alkalmazott1 IS ’Alkalmazottak adatai’; SQL> COMMENT ON COLUMN alkalmazott1.a_kod IS ’Alkalmazott egyedi azonositoja’;

129 Bevezetés az Oracle SQL-be 12. Az adatszótár

130 130 Bevezetés az Oracle SQL-be Az adatbázis tábláinak csoportosítása •Felhasználói táblák –felhasználók által létrehozott és karbantartott táblák csoportja –felhasználók által bevitt adatokat tartalmaz •Adatszótár (Data Dictionary) –a szerver által létrehozott és karbantartott táblák gyűjteménye –az adatbázist leíró adatokat tárolja

131 131 Bevezetés az Oracle SQL-be Az adatszótár jellemzői •Az adatbázis létrehozásakor jön létre, a táblák tulajdonosa a SYS nevű felhasználó. •A szerver végzi a módosítást és a karbantartást. •Nézeteken keresztül kérdezzük le. •Az adatszótárban található információk : – az Oracle adatbázis felhasználóinak neve – felhasználói jogosultságok – az adatbázisban tárolt objektumok nevei – megszorításokkal kapcsolatos adatok – auditálási adatok

132 132 Bevezetés az Oracle SQL-be Az adatszótár nézetek •A nézeteknek négy csoportja van: (előtagok szerint) –USER_…Felhasználóhoz tartozó objektumok. –ALL_…Minden objektum, amelyhez a felhasználónak jogosultsága van. –DBA_...Az összes adatbázis-objektum. –V$…A szerver teljesítmény adatai. •További nézetek: –DICTIONARYAdatszótár táblák, nézetek, szinonimák. –DICT_COLUMNSAdatszótár táblák, nézetek oszlopai. –TABLE_PRIVILEGES Az objektumokhoz rendelt jogosultságok.

133 133 Bevezetés az Oracle SQL-be Az adatszótár nézetek •Néhány hasznos adatszótár nézet és szinonímája: DICTIONARYDICT USER_OBJECTSOBJ USER_CATALOGCAT USER_TABLESTABS USER_TAB_COLUMNSCOLS USER_COL_COMMENTS USER_TAB_COMMENTS USER_SEQUENCESSEQ USER_SYNONYMSYN USER_VIEWS USER_INDEXESIND ALL_OBJECTS ALL_TAB_COLUMNS

134 134 Bevezetés az Oracle SQL-be Az adatszótár lekérdezése •Az összes, elérhető adatbázisnézet megjelenítése: •Adatszótárnézet definíciójának megtekintése: •A tulajdonunkban lévő táblák nevének lekérdezése: SQL> SELECT * FROM DICTIONARY; SQL> DESC USER_OBJECTS SQL> SELECT OBJECT_NAME 2 FROM USER_OBJECTS 3 WHERE OBJECT_TYPE=’TABLE’;

135 135 Bevezetés az Oracle SQL-be Az adatszótár lekérdezése •Felhasználó tulajdonában lévő objektumtípusok megtekintése: •Megszorítások nevének, definíciójának lekérdezése: •A megszorításokban szereplő oszlopok a USER_CONS_COLUMNS nézetből kérdezhetők le. SQL> SELECT DISTINCT OBJECT_TYPE 2 FROM USER_OBJECTS; SQL> SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE, 2 SEARCH_CONDITION, R_CONSTRAINT_NAME 3 FROM USER_CONSTRAINTS 4 WHERE TABLE_NAME=’ALKALMAZOTT1’;

136 Bevezetés az Oracle SQL-be 13. Tranzakció kezelés

137 137 Bevezetés az Oracle SQL-be Adatkezelő és tranzakcióvezérlő utasítások •Az adatkezelő nyelv (DML) utasításaival bővítjük az adatbázist, törlünk vagy módosítunk sorokat. A még nem véglegesített DML utasítások sorozata a tranzakció. •Az INSERT utasítás új sort szúr be az adatbázisba. •Az UPDATE módosít meglévő sorokat. •A DELETE utasítással törlünk sorokat táblákból. •A COMMIT véglegesíti a változásokat. •A SAVEPOINT mentési pontot helyez el. •A ROLLBACK visszagörgeti a függőben lévő változásokat.

138 138 Bevezetés az Oracle SQL-be Új sorok beszúrása •Az INSERT utasítás új sorokat szúr be a táblába. •Egyszerre egy sor bevitele: •Ha minden oszlop értéket kap, akkor az oszlopnevek elhagyhatók. Az értékeket ekkor az oszlopok táblabeli sorrendjében kell megadni. INSERT INTO tábla [(oszlop [, oszlop …])] VALUES (érték [, érték…]) | lekérdezés; SQL> INSERT INTO telephely (t_kod,t_nev,cim) 2 VALUES (80,’AUTO_BONTO’,’DEBRECEN’); SQL> INSERT INTO telephely 2 VALUES (80,’AUTO_BONTO’,’DEBRECEN’);

139 139 Bevezetés az Oracle SQL-be Új sorok beszúrása •Nem minden oszlop kap értéket: •Dátum és karakteres értékek megadása: •Időpontot a TO_DATE függvénnyel lehet bevinni. SQL> INSERT INTO telephely (t_kod,cim) 2 VALUES (80,’DEBRECEN’); SQL> INSERT INTO telephely (t_kod,t_nev,cim) 2 VALUES (80,NULL,’DEBRECEN’); SQL> INSERT INTO alkalmazott 2 (a_kod,a_nev,belepes,t_kod) 3 VALUES (2233,’KEREKES’,’01-MAY-98’,80);

140 140 Bevezetés az Oracle SQL-be Sorok bevitele változók segítségével •Az adatbevitelt gyorsítja, ha változókat használunk. SQL> INSERT INTO telephely (t_kod,t_nev,cim) 2 VALUES (&telepkod,’&telepnev’,’&telepcim’);

141 141 Bevezetés az Oracle SQL-be Sorok másolása másik táblából •Egyszerre több sor is átvehető egy másik tábla lekérdezésével: •Az INSERT után felsorolt oszlopok és a lekérdezésben szereplő oszlopok számának meg kell egyezni. SQL> INSERT INTO telephely1 (t_kod,t_nev,cim) 2 SELECT * FROM telephely 3 WHERE t_kod<40;

142 142 Bevezetés az Oracle SQL-be Tábla sorainak módosítása •Az UPDATE utasítással a tábla egy vagy több sorában megváltoztathatók az oszlopok értékei. UPDATE tábla SET oszlop =érték [, oszlop =érték…] [WHERE feltétel ]; SQL> UPDATE alkalmazott 2 SET beosztas=’SZERELO’, fizetes=1.1*fizetes 3 WHERE a_nev=’HERCEG’; SQL> UPDATE alkalmazott 2 SET fizetes=fizetes WHERE beosztas=’VIZSGABIZTOS’;

143 143 Bevezetés az Oracle SQL-be Lekérdezés az UPDATE utasításban •A módosító értékek előállíthatók lekérdezés eredményeként: •Lekérdezés szerepelhet a WHERE részben. Emeljük a vidéki alkalmazottak fizetését: SQL> UPDATE alkalmazott 2 SET fizetes=(SELECT 1.1*AVG(fizetes) 3 FROM alkalmazott 4 WHERE beosztas=’ELADO’) 5 WHERE beosztas=’ELADO’; SQL> UPDATE alkalmazott 2 SET fizetes=1.1*fizetes 3 WHERE a_nev IN (SELECT a_nev 4 FROM alkalmazott a, telephely t 5 WHERE a.t_kod=t.t_kod AND cim<>’BUDAPEST’);

144 144 Bevezetés az Oracle SQL-be Megszorítások megsértése •Ha módosításnál vagy bevitelnél olyan értéket adunk meg, ami nem felel meg az oszlophoz tartozó megszorításnak, hibaüzenetet kapunk. •Nem adható meg olyan telephelykód, ami nem létezik a TELEPHELY táblában: SQL> UPDATE alkalmazott 2 SET t_kod=11 3 WHERE t_kod=10;

145 145 Bevezetés az Oracle SQL-be Sorok törlése a táblából •A DELETE utasítással eltávolítható a tábla egy vagy több sora. •Ha nem adunk meg feltételt, minden sort töröl. •A törlendő sorok kiválasztására használhatunk lekérdezést a WHERE részben. DELETE FROM tábla [WHERE feltétel ]; SQL> DELETE FROM alkalmazott 2 WHERE belepes<’01-JAN-71’;

146 146 Bevezetés az Oracle SQL-be Megszorítások megsértése törléskor •Alapértelmezés szerint nem törölhető olyan sor, amelyre másik tábla sorai hivatkoznak. SQL> DELETE FROM telephely 2 WHERE t_kod=20;

147 147 Bevezetés az Oracle SQL-be Tranzakciók az adatbázisban •A tranzakció a felhasználó által végrehajtott, logikailag összetartozó utasítások sorozata az adatbázisban. •Az alábbi utasításokból állhat: – DML utasítások, amelyek segítségével egymás után különféle adatmódosításokat hajtunk végre. – Egy DDL parancs – Egy DCL parancs •A tranzakció az első végrehajtható SQL utasítás végrehajtásakor kezdődik. •A tranzakció befejezését a következők okozhatják: – COMMIT vagy ROLLBACK – DDL vagy DCL parancsok végrehajtása –Hibák, kilépés, vagy rendszer-összeomlás

148 148 Bevezetés az Oracle SQL-be Tranzakció vezérlés COMMIT ROLLBACK INSERT UPDATE INSERT DELETE Mentési pont A Mentési pont B RollbackROLLBACK A-igROLLBACK B-ig

149 149 Bevezetés az Oracle SQL-be Implicit tranzakciókezelés •Automatikus véglegesítés az alábbi esetekben történik: – DDL parancs kiadásakor, pl. CREATE. – DCL parancs kiadásakor, pl. GRANT. – SQL*Plus-ból való normális kilépéskor, amikor nem adtuk ki a COMMIT vagy a ROLLBACK parancsot.

150 150 Bevezetés az Oracle SQL-be Adatok állapota ROLLBACK v. COMMIT előtt •Az adatok előző állapota visszaállítható, mivel a módosítások csak az adatbázis-pufferben léteznek. •Az aktuális felhasználó a DML utasítások eredményét egy SELECT parancs kiadásával ellenőrizheti. •A többi felhasználó nem látja az aktuális felhasználó által végrehajtott módosításokat. •A módosítás alatt álló sorokat a szerver lefoglalja, ezért a többi felhasználó nem módosíthatja ezeket a sorokat.

151 151 Bevezetés az Oracle SQL-be Adatok állapota a COMMIT után •Az adatokon végrehajtott módosítások bekerülnek az adatbázisba. •Az adatok előző állapota nem állítható vissza. •Minden felhasználó láthatja az eredményeket. •A módosított sorokra alkalmazott lefoglalások feloldódnak, így a többi felhasználó is kezelheti őket. •Az összes mentési pont törlődik.

152 152 Bevezetés az Oracle SQL-be Adatok állapota a ROLLBACK után •Az összes, függőben lévő módosítás visszavonása. •Az adatmódosítások semmissé válnak. •Visszaállítódik az adatok előző állapota. •A módosított sorokra alkalmazott lefoglalások feloldódnak.

153 153 Bevezetés az Oracle SQL-be Módosítások visszagörgetése mentési pontig •A SAVEPOINT paranccsal megjelölhetjük a tranzakció egy pontját. •A ROLLBACK TO SAVEPOINT paranccsal visszagörgethetjük a tranzakciót.

154 154 Bevezetés az Oracle SQL-be Utasításszintű visszagörgetés •Ha egy DML utasítás végrehajtása során hiba történik, akkor csak az adott utasítás görgetődik vissza. •Az Oracle implicit mentési pontot bocsát ki. •A többi módosítás megmarad. •A felhasználónak ilyenkor explicit módon a COMMIT vagy a ROLLBACK paranccsal kell befejeznie a tranzakciót.

155 Bevezetés az Oracle SQL-be 14. Nézetek használata

156 156 Bevezetés az Oracle SQL-be A nézet fogalma •A nézet (view) ablakot jelent egy vagy több valódi táblára vagy nézetre, amelyek adatai a nézeten keresztül láthatók illetve módosíthatók. •A nézet nem tárol adatokat, tehát nem foglal helyet az adatbázisban, csak a definícióját jelentő SELECT utasítás van tárolva az adatszótárban. •Bonyolult vagy gyakori lekérdezések eredményének egyszerűbb előállítására szolgál. •Korlátozható vele a felhasználó hozzáférése a tárolt adatokhoz. •Az egyszerű nézet egy táblán alapszik, az összetett nézet több táblán, vagy függvénykifejezéseket, csoportokat tartalmaz.

157 157 Bevezetés az Oracle SQL-be A nézet fogalma •Az alaptáblákon végrehajtott változások a nézetekben azonnal megjelennek, ez bizonyos korlátozásokkal fordítva is igaz, azaz nézeteken nem csak lekérdezés, hanem DML utasítások is végezhetők.

158 158 Bevezetés az Oracle SQL-be Nézet létrehozása •Az OR REPLACE hatására felülírja a létező azonos nevűt. •A FORCE akkor is létrehozza a nézetet, ha az alaptáblák nem léteznek. A NOFORCE az alapértelmezés. •A nézet neve után megadhatók a nézet oszlopnevei. •A lekérdezés lehet összetett SELECT utasítás de nem tartalmazhat ORDER BY utasításrészt. CREATE [OR REPLACE] [FORCE |NOFORCE] VIEW nézet [(álnév[, álnév]...)] AS lekérdezés [WITH CHECK OPTION [CONSTRAINT megszorítás]] [WITH READ ONLY];

159 159 Bevezetés az Oracle SQL-be Nézet létrehozása •A WITH CHECK OPTION hatására csak a nézet definíciójának megfelelő sorok szúrhatók be. •A WITH READ ONLY megadása estén nem végezhető DML parancs a nézeten.

160 160 Bevezetés az Oracle SQL-be Egyszerű nézet •Egyszerű nézet definiálása: SQL> CREATE VIEW fov_telep 2 AS SELECT t_kod,t_nev,cim 3 FROM telephely 4 WHERE cim=’BUDAPEST’ 5 WITH CHECK OPTION; SQL>DESC fov_telep SQL>SELECT * FROM fov_telep;

161 161 Bevezetés az Oracle SQL-be Összetett nézet •Összetett nézet definiálása: SQL> CREATE VIEW vid_alk 2 AS SELECT a_kod,a_nev,beosztas,t_kod,cim 3 FROM alkalmazott a, telephely t 4 WHERE a.t_kod=t.t_kod 5 AND cim<>’BUDAPEST’; SQL> CREATE VIEW tel_fiz (kod,minf,maxf,atlf,fo) 2 AS SELECT t_kod,MIN(fizetes),MAX(fizetes), 3 AVG(fizetes),COUNT(*) 4 FROM alkalmazott 5 GROUP BY t_kod;

162 162 Bevezetés az Oracle SQL-be DML műveletek nézeteken •DML műveletek egyszerű nézeteken végezhetők. •Nem törölhetünk sort, ha a nézet tartalmaz: – csoportfüggvényeket, – GROUP BY utasításrészt, – DISTINCT kulcsszót. •Nem módosíthatjuk az adatokat, ha a fentiek mellett a nézet tartalmaz: – kifejezésekkel definiált oszlopokat, – a ROWNUM pszeudooszlopot. •Nem vihetünk be adatokat, ha a fentiek mellett: –az alaptáblában a nézet által nem kiválasztott NOT NULL oszlop van.

163 163 Bevezetés az Oracle SQL-be DML műveletek nézeteken •Bővítsük a FOV_TELEP nézeten keresztül a TELPHELY táblát: •A WITH CHECK opció miatt nem végezhető a nézeten olyan DML utasítás, amely nem felel meg a definíció feltételének: SQL> INSERT INTO fov_telep 2 VALUES (11, ’TITKARSAG’, ’BUDAPEST’); SQL> UPDATE fov_telep 2 SET cim=’MISKOLC’ 3 WHERE t_kod=11;

164 164 Bevezetés az Oracle SQL-be Nézet törlése •A nézet definíciójának lekérdezése az adatszótárból: •A nézet definíciójának törlése természetesen az alaptáblákban tárlt adatokra nincs hatással. SQL> DROP VIEW fov_telep; SQL> SELECT * FROM USER_VIEWS;

165 Bevezetés az Oracle SQL-be 15. Szekvenciák létrehozása

166 166 Bevezetés az Oracle SQL-be Szekvencia jellemzői •Egyedi számok generálásának automatizálására szolgál. •Megosztható objektum. •Általában elsődleges kulcsértékek készítéséhez használjuk. •Puffermemória használatakor gyorsabban férhetünk hozzá a sorszámokhoz.

167 167 Bevezetés az Oracle SQL-be Szekvencia létrehozása •A növekmény alapértelmezett értéke 1, a kezdőértéké és a minimális értéké 1, a maximális értéké •A CYCLE opció esetén a maximális érték elérése után újrakezdődik az értékek kiadása. •A CACHE opciónál az alapérték 20. CREATE SEQUENCE név [INCREMENT BY n] [START WITH n] [{MAXVALUE n | NOMAXVALUE}] [{MINVALUE n | NOMINVALUE}] [{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}];

168 168 Bevezetés az Oracle SQL-be Szekvencia létrehozása •Definiáljunk egy sorszámgenerátort, telephelykódok előállításához: SQL> CREATE SEQUENCE t_kod_seq 2 INCREMENT BY 1 3 START WITH 1 4 MAXVALUE 50; SQL> SELECT * FROM USER_SEQUENCES;

169 169 Bevezetés az Oracle SQL-be NEXTVAL és CURRVAL pszeudooszlopok •A NEXTVAL a következő sorszámot állítja elő. •A NEXTVAL minden használatkor egyedi értéket szolgáltat, különböző felhasználók esetén is. •A CURRVAL az aktuális szekvenciaértéket adja vissza. •A CURRVAL pszeudooszlopra való hivatkozás előtt a NEXTVAL segítségével elő kell állítanunk a következő sorszámot.

170 170 Bevezetés az Oracle SQL-be Szekvencia használata •Szekvencia használata INSERT utasításban: •Aktuális érték kiolvasása: SQL> INSERT INTO telephely1 2 VALUES (t_kod_seq.NEXTVAL,’RAKTAR’,’GYOR’); SQL> SELECT t_kod_seq.CURRVAL 2 FROM DUAL;

171 171 Bevezetés az Oracle SQL-be Szekvencia módosítása és törlése •A szekvencia neve és kezdőértéke kivételével a többi jellemzője az ALTER SEQUENCE utasítással változtatható meg. •A módosítás csak a jövőbeni sorszámokat érinti. •A DROP SEQUENCE utasítással a szekvenciát kitörölhetjük az adatszótárból. SQL> DROP SEQUENCE t_kod_seq; SQL> ALTER SEQUENCE t_kod_seq 2 MAXVALUE 99;

172 Bevezetés az Oracle SQL-be 16. Indexek használata

173 173 Bevezetés az Oracle SQL-be Az index fogalma •Az Oracle szerver használja sorok visszakeresésének gyorsítására. •Az adatbázisban az indexelt táblától elkülönül. •Az Oracle szerver automatikusan tartja karban és használja. •Indextípusok: –Az egyedi (UNIQUE) biztosítja egy oszlop értékeinek egyediségét. –A nem-egyedi gyorsítja a lekérdezéseket. •Mindegyik típusú index tartalmazhat egy vagy akár több oszlopot (konkatenált index).

174 174 Bevezetés az Oracle SQL-be Index létrehozása •Automatikusan: Ha egy táblában egy oszlopot vagy oszlopkombinációt PRIMARY KEY vagy UNIQUE megszorítással definiálunk, akkor az Oracle automatikusan létrehoz egy egyedi indexet. •Manuálisan: A felhasználók indexeket definiálhatnak oszlopokon, hogy ezzel gyorsítsák a sorokhoz való hozzáférést.

175 175 Bevezetés az Oracle SQL-be Index létrehozása •Felhasználó indexet a CREATE INDEX utasítással hozhat létre. •Készítsünk indexet az ALKALMAZOTT tábla A_NEV oszlopához: •Index definíciók visszakeresése: USER_INDEXES USER_IND_COLUMNS CREATE [ UNIQUE ] INDEX index ON tábla (oszlop [, oszlop]...); SQL> CREATE INDEX ind_alk_nev 2 ON alkalmazott (a_nev);

176 176 Bevezetés az Oracle SQL-be Indexek használata •Az indexek használatáról kereséskor az Oracle dönt. •A szerver a következő optimalizációs módszereket veszi figyelembe: – szabályalapú – költségalapú •Akkor használ egy indexet, ha az indexelt oszlop szerepel egy WHERE feltételben, de nem függvény argumentumaként vagy kifejezésben.

177 177 Bevezetés az Oracle SQL-be Indexelési tanácsok Index létrehozása indokolt a következő esetekben: •Az oszlopot gyakran használjuk a WHERE utasításrészben vagy összekapcsoló feltételben. •Az oszlop széles értéktartományt tartalmaz. •Az oszlop nagy számú NULL értéket tartalmaz. •A tábla nagy, és a legtöbb lekérdezés a sorok 2-4 %-ánál kevesebbet ad vissza. •Több index nem mindig gyorsítja a lekérdezéseket.

178 178 Bevezetés az Oracle SQL-be Indexelési tanácsok Ne hozzunk létre indexet, ha •A tábla túl kevés sort tartalmaz. •Az oszlopokat nem használjuk lekérdezés feltételében. •A lekérdezések többsége a sorok 2–4%-ánál többet ad vissza. •A táblát gyakran módosítjuk (ui. a DML műveleteket lassítja). •Index definíciójának törlése: SQL> DROP INDEX ind_alk_nev;

179 Bevezetés az Oracle SQL-be 17. Felhasználók kezelése

180 180 Bevezetés az Oracle SQL-be Felhasználók és a biztonság •A felhasználónak az Oracle többszintű biztonsági rendszerében rendelkeznie kell a következőkkel: •Felhasználói név és jelszó. •Rendszerszintű jogosultságok, amelyek meghatározzák, hogy milyen tevékenységet végezhet az adatbázisban. •Objektumszintű jogosultságok, amelyeket a felhasználó adhat saját objektumaira más felhasználóknak.

181 181 Bevezetés az Oracle SQL-be Rendszerszintű jogosultságok •Több mint nyolcvan jogosultság áll rendelkezésünkre. •A rendszergazda magas szintű rendszerjogosultságokkal rendelkezik: – Új felhasználók létrehozása – Felhasználók törlése – Táblák törlése – Táblák mentése •A rendszergazda a CREATE USER SQL parancs segítségével hoz létre felhasználókat. CREATE USER tanf1 IDENTIFIED BY tanf1;

182 182 Bevezetés az Oracle SQL-be Felhasználói rendszerszintű jogosultságok •Felhasználó létrehozása után a DBA a GRANT parancs használatával biztosíthat neki jogosultságokat, amelyek meghatározzák, hogy milyen tevékenységet végezhet az adatbázisban. •Egy átlagos felhasználó a következő rendszerszintű jogosultságokkal rendelkezik: – CREATE SESSION – CREATE TABLE – CREATE SEQUENCE – CREATE VIEW – CREATE PROCEDURE GRANT CREATE TABLE, CREATE SEQUENCE, CREATE VIEW TO tanf1;

183 183 Bevezetés az Oracle SQL-be Szerep fogalma •A szerep vagy szerepkör különböző rendszerszintű jogosultságok névvel ellátott együttese. •Egy szerephez hozzá lehet rendelni több felhasználót, és egy felhasználó több szerepben is részt vehet. Mindez egyszerűbbé teszi a biztonsági rendszer kialakítását. CREATE ROLE tanfolyam; GRANT CREATE TABLE, CREATE SEQUENCE, CREATE VIEW TO tanfolyam; GRANT tanfolyam TO tanf1;

184 184 Bevezetés az Oracle SQL-be Saját jelszó megváltoztatása •A rendszergazda a felhasználó létrehozásakor ad meg először jelszót. •A felhasználók az ALTER USER parancs segítségével változtathatják meg saját jelszavukat. SQL> ALTER USER tanf1 IDENTIFIED BY titok;

185 185 Bevezetés az Oracle SQL-be Objektumszintű jogosultságok •A rendszergazda lehetővé teheti felhasználók számára, hogy műveleteket végezhessenek megadott objektumokon. •Az objektumszintű jogosultságok az objektum típusától függnek. •Egy objektum tulajdonosa minden jogosultsággal rendelkezik az adott objektumon. •A tulajdonos saját objektumaira jogosultságokat adhat más felhasználóknak.

186 186 Bevezetés az Oracle SQL-be Objektumszintű jogosultságok •Az objektum lehet tábla, nézet, szekvencia, szinoníma. •Jogosultság rendelhető felhasználóhoz, szerephez, vagy minden felhasználóhoz. •A WITH GRANT OPTION kiegészítéssel kapott jogosultságot a felhasználó továbbadhatja. GRANTobjektum_jogosultság [(oszlopok)],... ONobjektum TO{felhasználó |szerep |PUBLIC} [WITH GRANT OPTION];

187 187 Bevezetés az Oracle SQL-be Objektumszintű jogosultságok SELECTLekérdezés táblából vagy nézetből, sorszám kiolvasása szekvenciából. INSERTSorok beszúrása táblába vagy nézetbe. UPDATESorok vagy oszlopok módosítása táblában vagy nézetben. DELETESorok törlése táblából vagy nézetből. ALTERTábla oszlopdefinícióinak vagy szekvencia definíciójának megváltoztatása. INDEXTáblához index definiálása. REFERENCESHivatkozás a táblára oszlop vagy tábla szintű kényszerekben. ALLMinden jogosultság.

188 188 Bevezetés az Oracle SQL-be Objektumszintű jogosultságok SQL> GRANT UPDATE (fiztes, premium) ON alkalmazott 2 TO tanf2, tanf3; SQL> GRANT SELECT ON alkalmazott 2 TO tanfolyam; SQL> GRANT INSERT ON alkalmazott 2 TO tanf4 WITH GRANT OPTION; SQL> GRANT SELECT ON telephely 2 TO PUBLIC; SQL> GRANT ALL ON telephely 2 TO tanf5;

189 189 Bevezetés az Oracle SQL-be Objektumszintű jogosultságok visszavonása •A REVOKE parancs használatával vonhatunk vissza más felhasználóknak kiosztott jogosultságokat. •A másoknak a WITH GRANT OPTION használatával kiosztott jogosultságok is visszavonódnak. SQL> REVOKE INSERT ON alkalmazott 2 FROM tanf4;

190 190 Bevezetés az Oracle SQL-be Szinoníma definiálása •A szinoníma egy objektumnak adott alternatív név. •Létrehozásával megkönnyíthetjük az objektumra történő hivatkozást. •Ha TANF2 felhasználó SELECT joggal rendelkezik TANF1 tábláján, akkor így kérdezi le: •Szinoníma definiálásával: SQL> SELECT * FROM tanf1.alkalmazott; SQL> SELECT * FROM alk; SQL> CREATE SYNONYM alk FOR tanf1.alkalmazott;

191 191 Bevezetés az Oracle SQL-be Szinoníma definiálása •Mindenki által használható szinonímákat a DBA definiálhat és szüntethet meg. •Szinoníma törlése: SQL> DROP SYNONYM alk; CREATE PUBLIC SYNONYM dolg FOR tanf1.alkalmazott;


Letölteni ppt "Bevezetés az Oracle SQL-be Bevezetés. 2 Bevezetés az Oracle SQL-be A tanfolyam céljai •Relációs adatmodellen alapuló adatbáziskezelő rendszer fogalmainak."

Hasonló előadás


Google Hirdetések