PL/SQL alapok Adatbázis-kezelés.

Slides:



Advertisements
Hasonló előadás
2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
Advertisements

PL/SQL I. ADATBÁZIS ALAPÚ RENDSZEREK.  PL/SQL = Procedural Language/SQL  utasítást ; zárja le  PL/SQL blokk lezárása: /  kis- és nagybetű egyenértékű.
PL/SQL alapok Adatbázis-kezelés.
FOL függvényjelekkel Zsebibaba anyja A 2 harmadik hatványa a oszlopában az első blokk Ezek is nevek, de nem in- konstansok Azért, mert összetettek Predikátum:
1 Az önértékelés mint projekt 6. előadás 1 2 Az előadás tartalmi elemei  A projekt fogalma  A projektek elemei  A projekt szervezete  Projektfázisok.
CÉLCÉLCSOPORT  Egészségügyi szakmai tájékoztatás és betegtájékoztatás, az egészséges életvitelhez szükséges információk szolgáltatása, publikálása, áttekint-
Forrás: Reiter István C_Sharp programozás lépésről lépésre (frissített tartalommal )
Internet tudományos használata
OvidSP és az értéknövelt szolgáltatásai
ERASMUS+ DISSZEMINÁCIÓS PLATFORM
Fájlkezelés.
PL/SQL gyakorlás Kalmár György.
Adatbázis rendszerek II.
Operációs rendszerek.
Adatbázis normalizálás
Programstruktúrák.
A víziközmű-szolgáltatásról szóló évi CCIX
Idegen kulcsok Lokális és globális megszorítások Triggerek
Microsoft Excel BAHAMAS tanfolyam
Scilab programozás alapjai
videós team Team vezetője: Tariné Péter Judit Tagok:
Káros szenvedélyek A szenvedélybetegség – másként addikció vagy kóros szenvedély – hátrányos helyzetbe hozhatja az érintett személyt és környezetét is,
Adatok importálása, rendezése és szűrése
ACCESS ALAPOK Alapfogalmak
Adatbázisok 8. előadás Tikk Domonkos.
PHP - függvények.
T.R. Adatbázis-kezelés - Alapfogalmak Adatbázis:
Adatbázisok SQL.
Programozás I. Gyakorlás egydimenziós tömbökkel Többdimenziós tömbök
Kovács Gergely Péter Egyszerű lekérdezések
Triggerek Kalmár György.
Adatbázis-kezelés (PL/SQL)
PHP-SQL adatbáziskezelő parancsai
adatbázis alapú rendszerek
Animációk.
Adatbázis-kezelés (PL/SQL)
Tranzakciók, nézettáblák, indexek
2. Bevezetés A programozásba
☺ Programozási környezetek Validátorok Fazekas Judit PTI 2010.
VB ADATTÍPUSOK.
Közigazgatási alapvizsga a Probono rendszerben
Business Mathematics
Grosz imre f. doc. Kombinációs hálózatok /43 kép
Az én házi feladatom volt:
Adatbázis alapfogalmak
Rendszerfejlesztés gyakorlat
Számítógépes Hálózatok
Kovács Gergely Péter Bevezetés
Az Endnote bibliográfia adatbázis-kezelő szoftver alapvető használata november Skultéti Attila
CONTROLLING ÉS TELJESÍTMÉNYMENEDZSMENT DEBRECENI EGYETEM
Tájékoztató az Önkormányzati ASP Projektről
Informatikai gyakorlatok 11. évfolyam
Informatikai gyakorlatok 11. évfolyam
Oracle Adatbázisok kezelése c#-ban
A távoli asztal, valamint az Endnote használata a távoli asztalon
Lapkiadó, rendezvényszervező vállalatirányítási rendszer SQL alapon
Adatbázisok használata
A szállítási probléma.
Binomiális fák elmélete
INFORMATIKA ELŐADÁS november 8. I. ELŐADÓ Informatika
Idegen kulcsok Lokális és globális megszorítások Triggerek
Matematika II. 5. előadás Geodézia szakmérnöki szak 2015/2016. tanév
SQL jogosultság-kezelés
Utasítások, elágazás- és ciklusszervezés C nyelvi utasítások
Mintaillesztés Knuth-Morris-Pratt (KMP) algoritmus
Szöveges adatok tárolása
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Access alapok Táblák, kapcsolatok, űrlapok.
Előadás 08 Eljárások, függvények Hibakezelés (Kivétel kezelés)
Algoritmusok.
Előadás másolata:

PL/SQL alapok Adatbázis-kezelés

Jelölések Az SQL, PL/SQL utasítások, nevek stb. (terminálisok) nagybetűvel szerepelnek, pl.: SELECT. A nemterminálisok kisbetűvel, pl.: eredmeny. Az alternatívákat függőleges vonal választja el egymástól ( | ). Az opcionális elemek szögletes zárójelben állnak ( [ ] ), pl.: [NOT NULL]. A kötelezően megadandó alternatívákat kapcsos zárójelek fogják közre ( { } ), pl.: {kifejezes | feltetel}. Az iteráció jelölésére három pont szolgál (...), pl.: utasitas [utasitas]...

A példákhoz használt adatbázis automata (azon, penz, reszl_azon, varos) ugyfel (azon, nev, szuletes, keret) szamla (azon, ugyf_azon, reszl_azon, osszeg, lejarat) reszleg (azon, varos, tartalek) tranzakcio (azon, aut_azon, szaml_azon, ugyf_azon, datum, osszeg) Itt az automata tábla reszl_azon attribútuma azt adja meg, hogy melyik bank részleghez tartozik az adott automata, a penz pedig az automatán rendelkezésre álló pénzösszeget tárolja. A tranzakcio tábla osszeg attribútumának egy-egy értéke, ha negatív előjelű, pénzlevételt, ha pozitív, számlafeltöltést jelöl. A példa adatbázisban a Zseton Bank részlegeiről van szó.

Blokk A PL/SQL alapvető programegysége a blokk. Bárhol megjelenhet, ahol végrehajtható utasítás állhat. Felépítése: [DECLARE deklaraciok] BEGIN utasitas [utasitas]... [EXCEPTION kivetelkezelo] END; Megjegyzés: A címkék és GOTO utasítás használatához lásd Oracle dokumentáció.

Összetett típus, rekord Az összetett típust mindig felhasználói adattípusként kell létrehozni. A rekord heterogén összetett típus, ezzel szemben az index alapú tábla, beágyazott tábla, dinamikus tömb minden eleme azonos típusú. Rekord szintaxisa: TYPE nev IS RECORD ( mezonev tipus [[NOT NULL] {:= | DEFAULT} kifejezes] [, mezonev tipus [[NOT NULL] {:= | DEFAULT} kifejezes]]…); A mezonev a rekord mezőinek neve. A típus REF CURSOR kivételével bármi lehet. Ha egy NOT NULL mező NULL értéket kap VALUE_ERROR kivétel váltódik ki.

Példa rekordra Példa: DECLARE TYPE film IS RECORD ( cim VARCHAR2(20) NOT NULL, datum DATE DEFAULT SYSDATE, hossz NUMBER, studio VARCHAR2(15));

%TYPE, %ROWTYPE %TYPE: egy korábban már deklarált kurzorváltozó, mező, rekord, adatbázistábla oszlop vagy változó típusát veszi át és ezzel a típussal deklarálja a változót. Tábla oszlopának típusa is definiálható így egy korábban megadott táblát használva. %ROWTYPE: olyan rekordtípust szolgáltat, amely egy adatbázistábla sort vagy kurzor által kezelt sort reprezentál. Mindkét esetben, ha a hivatkozott objektumban változás lép fel, ezt a %TYPE, %ROWTYPE segítségével deklarált változó is követi.

%TYPE, %ROWTYPE példa CREATE TABLE pelda AS ( nev VARCHAR2(20), id CHAR(3) NOT NULL); DECLARE sor pelda%ROWTYPE, valtozo pelda.id%TYPE, …

Feltételes kifejezés A legtöbb kifejezés az SQL tárgyalásánál szerepelt. Feltételes kifejezés alakja: CASE szelektor WHEN kifejezes THEN eredmeny [WHEN kifejezes THEN eredmeny]... [ELSE eredmeny] END

Példa feltételes kifejezésre DECLARE         datum  DATE := DATE '1983-05-29';         evszak VARCHAR2(6); BEGIN         evszak :=         CASE                 WHEN TO_CHAR(datum, 'MM') IN ('01', '02', '12') THEN 'tel'                 WHEN TO_CHAR(datum, 'MM') IN ('03', '04', '05') THEN 'tavasz'                 WHEN TO_CHAR(datum, 'MM') IN ('06', '07', '08') THEN 'nyar'                 WHEN TO_CHAR(datum, 'MM') IN ('09', '10', '11') THEN 'osz'                 ELSE 'Hiba'         END;         DBMS_OUTPUT.PUT_LINE (evszak); END;

Üres utasítás, feltételes utasítás Üres utasítás használható általában mindenütt, ahol végrehajtható utasítás állhat. Alkalmazásakor a vezérlés a következő utasításra kerül. Használható pl. rekurzív függvények „zárásaként”. Alakja: NULL; Feltételes utasítás alakja: IF feltetel THEN utasitas [utasitas].... [ELSIF feltetel THEN utasitas [utasitas]....]... [ELSE utasitas [utasitas]....] END IF;

Példa feltételes utasításra DECLARE                 szam NUMBER := -5;                 absz NUMBER; BEGIN IF szam >= 0 THEN absz := szam; ELSE absz:= -1 * szam; END IF; DBMS_OUTPUT.PUT_LINE (szam || ' abszolút értéke: '|| absz); END;

CASE utasítás A CASE utasítás alakja: CASE [szelektor_kifejezes] WHEN {kifejezes | feltetel} THEN utasitas [utasitas]... [WHEN {kifejezes | feltetel} THEN utasitas [utasitas]...]... [ELSE utasitas [utasitas]...] END CASE;

Példa CASE utasításra DECLARE         osztalyzat NUMBER(1) := 4; BEGIN         CASE osztalyzat                 WHEN 1 THEN DBMS_OUTPUT.PUT_LINE('elégtelen');                 WHEN 2 THEN DBMS_OUTPUT.PUT_LINE('elégséges');                 WHEN 3 THEN DBMS_OUTPUT.PUT_LINE('közepes');                 WHEN 4 THEN DBMS_OUTPUT.PUT_LINE('jó');                 WHEN 5 THEN DBMS_OUTPUT.PUT_LINE('jeles');                 ELSE DBMS_OUTPUT.PUT_LINE('Nincs ilyen jegy.');         END CASE; END;

Alapciklus Alakja: LOOP utasitas [utasitas]... END LOOP; Példa: DECLARE                 fakt  NUMBER:=1;                  i     PLS_INTEGER:=2; BEGIN                 LOOP                         fakt:=fakt*i;                         EXIT WHEN fakt > 1000;                         i:=i+1;                 END LOOP;                 DBMS_OUTPUT.PUT_LINE('A faktorialis: ' || fakt); END;

WHILE ciklus Alakja: WHILE feltétel LOOP utasitas [utasitas]... END LOOP; Példa: DECLARE                 ossz  NUMBER :=1;          BEGIN                 WHILE ossz < 10000 LOOP                         ossz := 2*ossz;                 END LOOP;                 DBMS_OUTPUT.PUT_LINE (ossz);         END;

FOR ciklus Alakja: FOR ciklusvaltozo IN [REVERSE] also_hatar..felso_hatar LOOP utasitas [utasitas]... END LOOP; A ciklusvaltozo PLS_INTEGER típusú változó lesz, hatásköre a ciklusmag. Rendre felveszi az also_hatar, felso_hatar egészértékű kifejezések által definiált tartomány minden értékét. Az EXIT utasítással itt is bármikor kiléphetünk a ciklusból.

Példa FOR ciklusra DECLARE ossz NUMBER := 0; BEGIN         FOR i in 1..100 LOOP                 ossz := ossz + i;         END LOOP;         DBMS_OUTPUT.PUT_LINE('Az első száz szám összege: ' || ossz); END;

A SELECT INTO utasítás I. Példa I.: DECLARE                 reszl_varos           reszleg.varos%TYPE;          BEGIN                           SELECT varos                 INTO reszl_varos                 FROM reszleg                 WHERE azon = 'B01';                 DBMS_OUTPUT.PUT_LINE('A varos: ' || reszl_varos); END;

A SELECT INTO utasítás II. Példa II.: DECLARE                 sor           reszleg%ROWTYPE; BEGIN                           SELECT *                 INTO sor                 FROM reszleg                 WHERE azon = 'B01'; END; A SELECT, FROM záradékok ugyanúgy viselkednek, mint a „normális” SQL lekérdezések esetében. Gondoskodni kell, hogy a lekérdezés végeredménye megfeleljen az INTO záradékban megadott változó, rekord típusának. A lekérdezés nem adhat vissza több sort végeredményként ebben az esetben.

Tranzakció A logikailag egybetartozó utasításokat általában egy munkamenetként kezelik. Az utasításoknak vagy mindegyike végrehajtódik vagy egyik sem. Az ilyen munkameneteket tranzakciónak nevezzük. Egy-egy adatbáziskezelő általában több párhuzamos tranzakciót kezel egyszerre. Nemzetközi példák: helyfoglalás egy-egy repülőgép járatra, bankjegyautomaták. Kívánalmak. Atomosság: egy tranzakció vagy teljes egészében végrehajtódik vagy egyik része sem hajtódik végre; Konzisztencia: minden adatbázisban adottak bizonyos konzisztencia-feltételek. Pl. egy járat ugyanazon helyét nem foglalhatja le ugyanaz a két utas. A tranzakciók befejeződése után az adatbázisnak konzisztensnek kell lennie. Elkülönítés: a tranzakciók konkurencia-vezérlését úgy kell megoldani, mintha a tranzakciók egymás után futnának. Tartósság: ha egy tranzakció befejezte működését, annak eredménye nem veszhet el azonnali rendszerhiba esetén sem.

Zárak, visszagörgetés A zár átmeneti tulajdonosi jogkört biztosít egy felhasználónak egy-egy adatbázisbeli objektum: pl. tábla, tábla bizonyos sorai fölött. Más felhasználó nem módosíthatja az adatokat mindaddig, amíg a zárolás fennáll. Ha F1 felhasználó egy táblát éppen lekérdez, F2 ugyanazt módosítja, akkor az Oracle egy nézetet hoz létre F1 számára, F2 módosításai pedig a tábla egy pillanatfelvételén történnek meg. Az Oracle egy visszagörgető szegmenst használ a módosítások tárolására és az olvasási konzisztencia biztosítására. Sikeres végrehajtás esetén a visszagörgető szegmens információi átkerülnek az adatbázisba, véglegesítődnek. Ha hiba történik, a tranzakció „visszagörgetődik”, az adatbázis tranzakció előtti állapota nem változik meg.

COMMIT, SAVEPOINT, ROLLBACK Tranzakció véglegesítése: COMMIT [WORK] Megjegyzés: a WORK alapszó csak a jobb olvashatóságot biztosíthatja. A mentési pontok egy tranzakció részleges visszagörgetését szolgálhatják: SAVEPOINT nev; Visszagörgetés: ROLLBACK [WORK] [TO [SAVEPOINT] mentesi_pont]; Az egyszerű ROLLBACK érvényteleníti a teljes tranzakció hatását, oldja a zárakat, törli a mentési pontokat. A TO utasítással rendelkező ROLLBACK a megadott mentési pontig görgeti vissza a tranzakciót. A mentési pont után a zárak feloldásra kerülnek, a tranzakció a mentési ponttól folytatódik. Megjegyzés: az INSERT, DELETE, UPDATE utasítások előtt az Oracle egy implicit mentési pontot helyez. Ha az utasítás sikertelen, visszagörgetés történik. Kezeletlen kivétel esetén a gazdakörnyezet dönt. Emiatt érdemes explicit módon elhelyezni a fenti utasításokat.

Feladatok Írassuk ki a „Szeretlek világ!” üzenetet. Írassuk ki Kismiska születési dátumát. Írassuk ki Malvinka azonosítóját és születési dátumát. Írassuk ki, hogy hány tranzakció történt 2007. április 27-én. Írassuk ki a legkisebb, 10000-nél nagyobb, 7-tel osztható számot. Írassuk ki a 100-nál kisebb prímszámokat.