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

Hasonló előadás


Az előadások a következő témára: "Bevezetés az Oracle SQL-be"— Előadás másolata:

1 Bevezetés az Oracle SQL-be

2 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 Az ORACLE Szerver és az ORACLE eszközök
Discoverer/2000 Designer/2000 Developer/2000 ORACLE Szerver +Egyéb eszközök: SQL*Plus, SQL*DBA, segédprogramok

4 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 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 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 Táblák összekapcsolása
Elsődleges kulcs Elsődleges kulcs Idegen kulcs

8 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 Bevezetés az Oracle SQL-be
1. SQL alapok

10 Az SQL, PL/SQL és az SQL*Plus
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 Az SQL parancsai Adatlekérdezés Adatmanipulációs nyelv (DML)
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 Egyszerű lekérdezések
SELECT [DISTINCT] {*| oszlop [álnév], ...} FROM tábla; 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.

13 A tábla teljes tartalmának kiíratása
SQL> SELECT * 2 FROM telephely; T_KOD T_NEV CIM 10 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 Oszlopok kiválasztása
SQL> SELECT a_kod, a_nev, beosztas, belepes 2 FROM alkalmazott; A_KOD A_NEV BEOSZTAS BELEPES 1234 KOVACS ELADO DEC-86 1235 MOLNAR SZERELO FEB-71 1236 CSIKOS ELADO MAR-85 1237 TOTH VIZSGABIZTOS APR-80 1238 NEMETH TELEPHELYVEZETO 28-NOV-83 1239 SZABO IGAZGATO MAY-77 1240 BALOGH SZERELO JUN-83 1244 KIRALY VIZSGABIZTOS AUG-80 1245 HERCEG ELADO NOV-84 1246 BOGNAR ELADO OCT-79 1247 HALASZ SZERELO MAY-81 1248 HORVAT TELEPHELYVEZETO 09-DEC-81 1249 KISS ELADO DEC-71

15 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> SELECT a_nev, fizetes*12 eves_fizetes 2 FROM alkalmazott;

16 Ö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> SELECT a_kod||a_nev dolgozok 2 FROM alkalmazott; SQL> SELECT a_kod||’-’||a_nev ”Dolgozok”, 2 ’Telepe: ’, t_kod 3 FROM alkalmazott;

17 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> SELECT a_nev, fizetes*12+premium eves_jov 2 FROM alkalmazott; ?! SQL> SELECT a_nev, fizetes*12+NVL(premium,0) eves_jov 2 FROM alkalmazott;

18 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 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 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: EXIT vagy QUIT Átjelentkezés másik felhasználó neve alá: CONNECT felhasználónév/jelszó Lekapcsolódás az adatbázisról: DISCONNECT

22 Parancsok kiadása SQL parancsok kiadása SQL*Plus 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 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. DEL Aktuális sor törlése.

24 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 @ állománynév Parancsállomány szerkesztése: EDIT állománynév DEFINE_EDITOR=’editor_név’

25 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 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 Az ORDER BY utasításrész
SELECT [DISTINCT] {*| oszlop [álnév], ...} FROM tábla [ORDER BY {kifejezés | n} [ASC |DESC], ... ]; 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.

29 Sorok rendezése SQL> SELECT a_nev, beosztas, fizetes 2 FROM alkalmazott 3 ORDER BY a_nev; SQL> SELECT a_nev, beosztas, belepes 2 FROM alkalmazott 3 ORDER BY belepes DESC; Az oszlopnév helyett használható az oszlop pozíciója a SELECT listában. SQL> SELECT a_nev, beosztas, t_kod 2 FROM alkalmazott 3 ORDER BY 2;

30 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 BY t_kod, fizetes DESC;

31 Válogatás a sorok között
SELECT [DISTINCT] {*| oszlop [álnév], ...} FROM tábla [WHERE feltétel ]; 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

32 Ö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 Relációk a feltételben
SQL> SELECT * 2 FROM alkalmazott 3 WHERE fizetes >= 25000; SQL> SELECT * 2 FROM alkalmazott 3 WHERE belepes > ’01-JAN-80’; SQL> SELECT * 2 FROM alkalmazott 3 WHERE beosztas = ’ELADO’;

34 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 WHERE fizetes BETWEEN AND 30000; SQL> SELECT * 2 FROM alkalmazott 3 WHERE t_kod IN (10, 30, 60);

35 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 WHERE a_nev LIKE ’H%’; SQL> SELECT * 2 FROM alkalmazott 3 WHERE a_nev LIKE ’_E%’;

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

37 Ö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 WHERE beosztas NOT IN (’SZERELO’, ’ELADO’) AND belepes BETWEEN ’01-JAN-75’ AND ’31-DEC-83’; SQL> SELECT * 2 FROM alkalmazott 3 WHERE beosztas = ’ELADO’ AND (t_kod=20 OR t_kod=40);

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

39 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 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 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 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 s szöveget és kicseréli s2-re.

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

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

45 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 Numerikus függvények SQL> SELECT ROUND(89.342,2), ROUND(51.659),
3 FROM DUAL; SQL> SELECT TRUNC(89.342,2), TRUNC(51.659), 2 TRUNC(73.856,-1) 3 FROM DUAL; SQL> SELECT ABS(-128), SIGN(-8), POWER(2,3), 2 SQRT(99), MOD(9,2) 3 FROM DUAL; SQL> SELECT fizetes, fizetes/30, 2 CEIL(fizetes/30), FLOOR(fizetes/30) 3 FROM alkalmazott;

47 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 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 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 Dátum függvények SQL> SELECT a_nev, belepes,
2 MONTHS_BETWEEN(SYSDATE, belepes) 3 FROM alkalmazott; SQL> SELECT NEXT_DAY(SYSDATE,’FRIDAY’), 2 LAST_DAY(SYSDATE) 3 FROM DUAL; SQL> SELECT ROUND(SYSDATE,’MONTH’), 2 ROUND(SYSDATE,’YEAR’) 3 FROM DUAL; SQL> SELECT TRUNC(SYSDATE,’MONTH’), 2 TRUNC(SYSDATE,’YEAR’) 3 FROM DUAL;

51 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 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 WHERE belepes>= 4 TO_DATE(’ ’, ’YYYY.MM.DD’)

53 Dátum formátum elemek YYYY Az év négy számjegyen.
YY Az év évszázad nélkül. Q A negyedév sorszáma. MM A 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 W Az év vagy hónap hanyadik hete. DDD v. DD v. D Az év, hónap vagy hét hanyadik napja. DY A hét napjának hárombetűs rövidítése. DAY A nap teljes neve. AM vagy PM Délelőtt vagy délután. HH vagy HH24 A nap hanyadik órája. MI Perc (0-59). SS Másodperc (0-59).

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

55 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 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 Csoport függvények SELECT oszlop, csoportfüggvény FROM tábla [WHERE feltétel] [GROUP BY oszlop] [HAVING csoport_feltétel] [ORDER BY oszlop]; 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.

59 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 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 WHERE beosztas=’ELADO’;

61 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 BY t_kod; SQL> SELECT beosztas, AVG(fizetes) 2 FROM alkalmazott 3 GROUP BY beosztas 4 ORDER BY AVG(fiztes);

62 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 BY t_kod 5 HAVING COUNT(*)>2; SQL> SELECT t_kod 2 FROM alkalmazott 3 GROUP BY t_kod 4 HAVING AVG(fiztes)>17000;

63 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 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 BY t_kod, beosztas;

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

66 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 Táblák közötti kapcsolat

68 Egyenlőségen alapuló összekapcsolás
SELECT tábla.oszlop, tábla.oszlop FROM tábla1, tábla2 WHERE tábla1.oszlop1 = tábla2.oszlop2; 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ó.

69 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 WHERE alkalmazott.t_kod=telephely.t_kod; SQL> SELECT alkalmazott.t_kod, a_nev, cim 2 FROM alkalmazott, telephely 3 WHERE alkalmazott.t_kod=telephely.t_kod 4 AND a_nev LIKE ’H%’;

70 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 WHERE a.t_kod=t.t_kod; SQL> SELECT a.*, t_nev, cim 2 FROM alkalmazott a, telephely t 3 WHERE a.t_kod=t.t_kod;

71 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 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, 2 b.a_nev, b.fizetes 3 FROM alkalmazott a, alkalmazott b 4 WHERE a.fizetes>b.fizetes 5 AND b.a_nev=’BALOGH’;

73 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 WHERE t.t_kod=a.t_kod(+);

74 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, 2 b.a_nev, b.fizetes 3 FROM vallalat a, vallalat b 4 WHERE a.fonok=b.a_kod;

75 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 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 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. Külső lekérdezés SELECT... FROM... WHERE... Belső lekérdezés (SELECT... FROM... WHERE...);

79 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 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 WHERE beosztas = (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 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 WHERE t_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 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 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 WHERE fizetes > (SELECT AVG(fizetes) 4 FROM alkalmazott 5 WHERE t_kod=a.t_kod);

84 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 WHERE EXISTS (SELECT * FROM alkalmazott 4 WHERE a.beosztas=’ELADO’);

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

86 Táblákban kódolt hierarchiák
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: a_kod=1239 fonok=1239

87 Hierachikus keresés SELECT oszlop, oszlop, ... FROM tábla CONNECT BY PRIOR oszlop1 = oszlop2 START WITH oszlop = kifejezé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.

88 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 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 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 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 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 WHERE t_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 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 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ék Vá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 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ípus CHAR, NUMBER vagy DATE lehet. FORMAT fmt Formátum modell adható meg. PROMPT szöveg Megjeleníti a szöveget. HIDE Elrejti a felhasználói inputot. Szövegek kiírása: PROMPT szöveg

97 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 WHERE t_kod=&telepkod / SQL> START telep

98 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 WHERE beosztas=’&1’ AND fizetes>&2 / SQL> START beosztas SZERELO 20000

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

100 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 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 Tábla létrehozása CREATE TABLE [séma.] tábla ( oszlop adattípus [DEFAULT kifejezés] [oszlop_megszorítás], ... [tábla_megszorítás] ); 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.

103 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 Adattípusok VARCHAR(n) Változó hosszúságú karakteres adat, n max lehet. CHAR(n) Fix hosszúságú karakteres adat, n max. 255. NUMBER Lebegő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. DATE Dátum és idő. (ie isz. 4712) LONG Változó hosszúságú karakteres adat , max GB méretű, változó méretű. RAW és LONG RAW Ua. mint VARCHAR(2) és LONG, változó nagyságú bináris adat tárolására (kép, hang).

105 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 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 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 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 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 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 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 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 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 A mintatáblák definíciója
A TELEPHELY1 tábla: Az ALKALMAZOTT1 tábla: SQL> CREATE TABLE telephely1 (t_kod VARCHAR(2) PRIMARY KEY, t_nev VARCHAR(20), cim VARCHAR(15)); 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);

115 Tábla létrehozása lekérdezés segítségével
CREATE TABLE tábla [(oszlop, oszlop, …)] AS al_lekérdezés; 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.

116 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 WHERE t_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 WHERE a.t_kod=t.t_kod AND fizetes>=20000;

117 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 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 Oszlop hozzáadása a táblához
ALTER TABLE tábla ADD (oszlop adattípus [DEFAULT kifejezés] [NOT NULL], … ); 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. SQL> ALTER TABLE alkalmazott1 2 ADD (hazastars VARCHAR(20));

121 Oszlop definíciójának módosítása
ALTER TABLE tábla MODIFY (oszlop adatípus [DEFAULT kifejezés] [NOT NULL],.. ); 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.

122 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 Megszorítások hozzáadása és törlése
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]; 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. SQL> ALTER TABLE alkalmazott1 2 ADD CONSTRAINT fizell CHECK (fizetes>=15000);

124 Megszorítások letiltása és engedélyezése
ALTER TABLE tábla DISABLE | ENABLE CONSTRAINT megsz_neve [CASCADE]; 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. SQL> ALTER TABLE alkalmazott1 2 DISABLE CONSTRAINT fizell;

125 Tábla törlése A tábladefiníció törlésére szolgál az utasítás.
DROP TABLE tábla [CASCADE CONSTRAINTS]; 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. SQL> DROP TABLE telep30;

126 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 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 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 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 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 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: DICTIONARY Adatszótár táblák, nézetek, szinonimák. DICT_COLUMNS Adatszótár táblák, nézetek oszlopai. TABLE_PRIVILEGES Az objektumokhoz rendelt jogosultságok.

133 Az adatszótár nézetek Néhány hasznos adatszótár nézet és szinonímája:
DICTIONARY DICT USER_OBJECTS OBJ USER_CATALOG CAT USER_TABLES TABS USER_TAB_COLUMNS COLS USER_COL_COMMENTS USER_TAB_COMMENTS USER_SEQUENCES SEQ USER_SYNONYM SYN USER_VIEWS USER_INDEXES IND ALL_OBJECTS ALL_TAB_COLUMNS

134 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 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 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 Új sorok beszúrása Az INSERT utasítás új sorokat szúr be a táblába.
INSERT INTO tábla [(oszlop [, oszlop …])] VALUES (érték [, érték…]) | lekérdezés; 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. 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 Ú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 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 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 Tábla sorainak módosítása
UPDATE tábla SET oszlop =érték [, oszlop =érték…] [WHERE feltétel ]; Az UPDATE utasítással a tábla egy vagy több sorában megváltoztathatók az oszlopok értékei. SQL> UPDATE alkalmazott 2 SET beosztas=’SZERELO’, fizetes=1.1*fizetes 3 WHERE a_nev=’HERCEG’; SQL> UPDATE alkalmazott 2 SET fizetes=fizetes+1000 3 WHERE beosztas=’VIZSGABIZTOS’;

143 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) FROM alkalmazott 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 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 Sorok törlése a táblából
DELETE FROM tábla [WHERE feltétel ]; 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. SQL> DELETE FROM alkalmazott 2 WHERE belepes<’01-JAN-71’;

146 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 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 Tranzakció vezérlés COMMIT ROLLBACK INSERT Mentési pont A UPDATE
DELETE ROLLBACK Rollback ROLLBACK A-ig ROLLBACK B-ig

149 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 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 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 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 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 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 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 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 Nézet létrehozása 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]; 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.

159 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 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 Ö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 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 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 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> SELECT * FROM USER_VIEWS; SQL> DROP VIEW fov_telep;

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

166 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 Szekvencia létrehozása
CREATE SEQUENCE név [INCREMENT BY n] [START WITH n] [{MAXVALUE n | NOMAXVALUE}] [{MINVALUE n | NOMINVALUE}] [{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}]; 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é 1027. 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.

168 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 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 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 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> ALTER SEQUENCE t_kod_seq 2 MAXVALUE 99; SQL> DROP SEQUENCE t_kod_seq;

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

173 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 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 Index létrehozása CREATE [ UNIQUE ] INDEX index ON tábla (oszlop [, oszlop] ...); 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 SQL> CREATE INDEX ind_alk_nev 2 ON alkalmazott (a_nev);

176 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 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 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 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 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 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 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 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 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 Objektumszintű jogosultságok
GRANT objektum_jogosultság [(oszlopok)], ... ON objektum TO {felhasználó |szerep |PUBLIC} [WITH GRANT OPTION]; 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.

187 Objektumszintű jogosultságok
SELECT Lekérdezés táblából vagy nézetből, sorszám kiolvasása szekvenciából. INSERT Sorok beszúrása táblába vagy nézetbe. UPDATE Sorok vagy oszlopok módosítása táblában vagy nézetben. DELETE Sorok törlése táblából vagy nézetből. ALTER Tábla oszlopdefinícióinak vagy szekvencia definíciójának megváltoztatása. INDEX Táblához index definiálása. REFERENCES Hivatkozás a táblára oszlop vagy tábla szintű kényszerekben. ALL Minden jogosultság.

188 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 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 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> CREATE SYNONYM alk FOR tanf1.alkalmazott; SQL> SELECT * FROM alk;

191 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: CREATE PUBLIC SYNONYM dolg FOR tanf1.alkalmazott; SQL> DROP SYNONYM alk;


Letölteni ppt "Bevezetés az Oracle SQL-be"

Hasonló előadás


Google Hirdetések