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

Slides:



Advertisements
Hasonló előadás
Szerver oldali programozás
Advertisements

Tananyag: konzultáció
Algoritmusok.
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.
Anyagadatbank c. tárgy gyakorlat
PL/SQL folytatás Kurzorok Alprogramok Tárolt eljárások ADATBÁZIS ALAPÚ RENDSZEREK.
Felhasználói felületek és üzleti logika Bollobás Dávid ASP.NET
Delphi programozás alapjai
Összefoglalás 1. Pascal program szerkezete 2. Pascal típusai
– SQL 2: Adatok kezelése – Tarcsi Ádám, január 30. Adatbázis gyakorlat.
3. előadás (2005. március 1.) Utasítások, tömbök
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ű.
INSERT INTO Egy vagy több rekordot ad hozzá a táblához. Egyetlen rekordot hozzáfűző kifejezés: INSERT INTO cél_tábla (mező1,mező2,…) VALUES (érték1, érték2,
Programozás alapjai.
Triggerek II. ADATBÁZIS ALAPÚ RENDSZEREK.  Az Oracle kifinomult módon támogatja a sorszámozások generálását  Szekvencia: olyan adatbázis-objektum, amely.
(MY)SQL MEGJEGYZÉSEK. MYISAM VS. INNODB  A MySQL-ben többféle tárolási motor is használatos: MyISAM, InnoDB  A régebbi verziókban a MyISAM alapértelmezett,
Adatbázis alapú rendszerek
Adatbázis rendszerek II.
C A C nyelv utasításai.
C A C nyelv utasításai. Ismétlés Utasítások csoportosítása.
Készítette: Sárközi Anikó
Delphi programozás alapjai Nagyváradi Anett PTE PMMK MIT.
SQL92 lehetőségek KL A tábla B tábla C view adatok VIEW működése utasítás: SELECT.. FROM A,B … SELECT.. FROM C Az adatok a hivatkozáskor állítódnak elő.
ORACLE ORDBMS adminisztrációs feladatok 6. rész dr. Kovács László 2004.
ADATBÁZISOK
ADATBÁZISOK
Adattáblák létrehozása, módosítása, tranzakciók, megszorítások Rózsa Győző.
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
SQL, adatdefiníció, adatok megváltoztatása, megszorítások
Vizuális és web programozás II.
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
1 Informatikai Szakképzési Portál Adatbázis kezelés DML – Adat manipuláló nyelv.
Az SQL nyelv alapjai.
C nyelv utasításai.
DML. Új rekord beszúrása: INSERT INTO tábla (oszlop1,oszlop2,…) VALUES (érték1,érték2,…); Rekord módosítása: UPDATE tábla SET oszlop = érték WHERE feltétel;
Access XP Kifejezés-szerkesztő Összehasonlító operátorok:
Alapszint 2.  Készíts makrót, ami a kijelölt cellákat egybenyitja, a tartalmat vízszintesen és függőlegesen középre igazítja és 12 pontos betűméretűre.
Alprogramok deklarációja, definíciója és meghívása Páll Boglárka.
Adattáblák létrehozása, módosítása, tranzakciók, megszorítások Rózsa Győző.
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.
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 a minimum elégséges érdemjegynek!
Ciklusok (iterációk).
Felhasználók és jogosultságok
Készítette: Tóth Ervin
SQL-Structured Query Language. Parancs(utasítás) csoportok CREATE - táblák létrehozása ALTER – táblák módosítása DROP – táblák törlése DDL –Data Definition.
Turbo Pascal Indítás: C:\LANGS\Turbo Pascal Turbo Pascal.
SQL.
– SQL 3: SELECT - 1. – Tarcsi Ádám, január 31. Adatbázis gyakorlat.
– SELECT - 2. – Tarcsi Ádám március Adatbázis gyakorlat.
Tarcsi Ádám, Adatbázis gyakorlat – Adattáblák – Tarcsi Ádám, január.
– SELECT - 2. – Tarcsi Ádám március Adatbázis gyakorlat.
Objektum orientált programozás
Adatbázisok gyakorlat
Adatbázis rendszerek II
5. gyakorlat Fleiner Rita.
Webprogramozó tanfolyam
A Visual Basic nyelvi elemei
SQL. SQL jellemzői Nem algoritmikus (nem tartalmaz algoritmikus szerkezeteket: ciklus, eljárás, elágazás) Nem rekurzív (önmagát nem hívhatja) Halmazorientált.
– SELECT - 1. – Tarcsi Ádám január Adatbázis gyakorlat.
Excel programozás (makró)
1 SQL jogosultság-kezelés Privilégiumok Grant és Revoke Grant Diagrammok.
Adatbázis alapú rendszerek
PL/SQL gyakorlás Kalmár György.
Adatbázis-kezelés (PL/SQL)
Triggerek Kalmár György.
Adatbázis-kezelés (PL/SQL)
Programozás C# -ban Elágazások.
PL/SQL alapok Adatbázis-kezelés.
Informatikai gyakorlatok 11. évfolyam
Algoritmus készítés.
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.