Kalmár György Adatbázis alapú rendszerek

Hasonló dokumentumok
PL/SQL (folytatás) Kurzorok, függvények, eljárások

B IT MAN 65/1. Adatbázis Rendszerek II. Ellenőrző kérdések APLSQL B IT MAN. v:

Együttes hozzárendelés

Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN

Haladó DBMS ismeretek 1

Tranzakciókezelés PL/SQL-ben

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Adatbázis Rendszerek II. 4. PLSQL Kurzorok, hibakezelés 53/1B IT MAN

Csomag. Adatbázis-objektum Programozási eszközök gyűjteménye Két részből áll. specifikáció törzs (opcionális)

PL/SQL 1. rész. Procedural Language extension to SQL

Adatbázis Rendszerek II. 1. SQL programozási felületek 39/1B IT MAN

Táblakezelés: Open SQL Internal table. Tarcsi Ádám: Az SAP programozása 1.

Adatbázis Rendszerek II. 2. Ea: Gyakorló környezet

Adatbázis Rendszerek I. 10. SQL alapok (DML esettanulmány)

Adatbázis Rendszerek II. 2. Gyakorló környezet

Összefoglaló. <variable_name> [IN OUT IN OUT] <data_type> [:=<default_value>] ... <label_name>: <statements>... GOTO <label_name>;...

Adatbázisok II. Jánosi-Rancz Katalin Tünde 327A 1-1

Az SQL adatbázisnyelv: DML

Kilencedik témakör: Lazarus-Firebird. Készítette: Dr. Kotsis Domokos

Database Systems II. ZH összefoglaló

Adatbázis kezelés Delphiben. SQL lekérdezések

Adatbázis tartalmának módosítása

SQL DDL-2 (aktív elemek) triggerek

B I T M A N B I v: T M A N

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

Adatbázisok-I. előadás dr. Hajas Csilla (ELTE IK)

OO PDO. Tehát PDO használatával, könnyen átállhatunk egy másik adatbáziskezelőre, anélkül hogy a kódot teljes egészében újraírnánk.

A trigger egy aktualizálási művelet esetén végrehajtandó programrészletet definiál. Alakja:

Adatbázisban tárolt kollekciók

PL/SQL feladatok 8. gyakorlat

SQL/PSM kurzorok rész

Tartalomjegyzék. Tartalomjegyzék 1. Az SQL nyelv 1 Az SQL DDL alapjai 2

5. téma XML DB. Az adatkezelés és XML kapcsolata. Miért fontos az XML használata az adatbázis kezelésben?

Kliens oldali SQL-API

Triggerek. Olyan névvel ellátott adatbázisobjektumok, amelyek eseményorientált feldolgozást tesznek lehetővé

A könyv tartalomjegyzéke

A PL/SQL motor. A PL/SQL nyelvű egységek fordítását és futtatását végző rendszer. az adatbázis-kezelőben fejlesztőeszközben (pl.

SQL haladó. Külső összekapcsolások, Csoportosítás/Összesítés, Beszúrás/Törlés/Módosítás, Táblák létrehozása/kulcs megszorítások

Adatbázis Rendszerek II. 6. PLSQL Triggerek 32/1B IT MAN

ORACLE. SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Bevezetés: az SQL-be

Adatbázisok-1 előadás Előadó: dr. Hajas Csilla

Java és web programozás

PL/SQL blokk. [címke] [DECLARE deklarációs utasítás(ok)] BEGIN végrehajtható utasítás(ok) [EXCEPTION kivételkezelő] END [név];

Adatbázis-lekérdezés. Az SQL nyelv. Makány György

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 4.ELŐADÁS. Adatbázis alapú alkalmazások készítése PHP-ben

Adatbázisok elmélete 9. előadás

Hozzunk ki többet abból amink van. Fehér Lajos

Adatbáziskezelő-szerver. Relációs adatbázis-kezelők SQL. Házi feladat. Relációs adatszerkezet

SQL. Táblák összekapcsolása lekérdezéskor Aliasok Allekérdezések Nézettáblák

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai

Adatbázis rendszerek II. Adatbázis elérése C# kliens programból ADO.NET API-n keresztül

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

8-9.előadás: Adatbázisok-I. dr. Hajas Csilla (ELTE IK)

Jegyz könyv. Adatbázis-rendszerek II. Beadandó feladat. Miskolci Egyetem

Adatbázisok II. Jánosi-Rancz Katalin Tünde 327A

SQL jogosultság-kezelés. Privilégiumok Grant és Revoke Grant Diagrammok

Tábla létrehozása: CREATE TABLE alma( ID INT( 3 ) NOT NULL PRIMARY KEY, Leiras VARCHAR( 100 ) );

Adatbázis Rendszerek II. 8. Gyakorló környezet

Objektum-relációs adatbázisok. Felhasználói típusok (User-Defined Types) Objektum ID-k Beágyazott táblák (Nested Tables)

Informatikai képzés Információs rendszerek dr. Hajas Csilla (ELTE IK)

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:

Gyakorlás: Hozzunk létre egy Alkalmazottak táblát AZO szám, Részleg szöveg, Munkakör szöveg és BelépésDátuma dátum típussal.

SQL OO elemei aktív komponensek

Adatbáziskezelı-szerver SQL. Relációs adatbázis-kezelık. Relációs adatszerkezet. Házi feladat

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) ABR 2( Adatbázisrendszerek 2) 3. Előadás: Tárolt eljárások (folytatás) Nézetek

Az indexelés újdonságai Oracle Database 12c R1 és 12c R2

Adatbázisok. 2. gyakorlat SQL november november 12. Adatbázisok 1 / 31

Programozási nyelvek Java

B I T M A N B I v: T M A N

SQL PÉLDATÁR. készült a PTE TTK Iskolai informatika III. kurzus teljesítésére

AB1 ZH mintafeladatok. 6. Minősítse az állításokat! I-igaz, H-hamis

Adatbázisok elmélete 9. előadás

Adatbázis rendszerek SQL nyomkövetés

Relációsémák létrehozása SQL nyelvben

Adatbázisok I. Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

Tankönyvben: SQL/PSM Gyakorlaton: Oracle PL/SQL

Adatbázisok elmélete 10. előadás

LBRA6i integrált rendszer

Nézetek és indexek. AB1_06C_Nézetek_Indexek - Adatbázisok-1 EA (Hajas Csilla, ELTE IK) - J.D. Ullman elıadásai alapján

Adatbázisok. 9. gyakorlat SQL: SELECT október október 26. Adatbázisok 1 / 14

Bevezetés: Relációs adatmodell

SQL DDL-1: táblák és megszorítások

ADATBÁZIS-KEZELÉS FÉLÉVES FELADAT

Indexek és SQL hangolás

Készítette: Szabóné Nacsa Rozália

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

Adatbázis Rendszerek II. 3. PLSQL alapok 92/1B IT MAN

Adatbázisok tavaszi félév Vizsgatételsor

Adatbázis használata PHP-ből

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) ABR 2( Adatbázisrendszerek 2) 2. Előadás: Tárolt eljárások

Kivételkezelés 2. SQLCODE lehetséges értékei:

SQL. 1.rész. 1.elıadás // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 1

PHP-MySQL. Adatbázisok gyakorlat

Adatbázis rendszerek. Molnár Bence. Szerkesztette: Koppányi Zoltán

SQLServer. DB Recovery modes

Tranzakciók, nézettáblák, indexek. Párhuzamos folyamatok irányítása Virtuális és materializált nézettáblák Az adathozzáférés felgyorsítása

Java és web programozás

B I T M A N B I v: T M A N

Átírás:

Kalmár György Adatbázis alapú rendszerek

Oracle-ben az SQL utasítások feldolgozásához szükség van egy ún. kontextus memóriára, amely az összes lényeges információt tárolja egy utasítás végrehajtásához. Pl: feldolgozandó sorok száma. A kurzor ezen területre mutató pointer, amelyen keresztül tehát információt szerezhetünk az SQL utasításokról és azok eredményeiről. Két féle kurzor létezik: Explicit Implicit

Automatikusan generálódik minden utasításhoz. Nem tudjuk módosítani. INSERT esetén: tárolja az adatot, ami beszúrásra kerül DELETE, UPDATE esetén: meghatározza a sorokat, amelyek érintettek lesznek Attribútumai: SQL%FOUND: a legutóbbi SQL utasítás legalább egy sort feldolgozott SQL%NOTFOUND: a legutóbbi SQL utasítás nem dolgozott fel sort SQL%ROWCOUNT: a kurzorral összesen feldolgozott sorok száma SQL%ISOPEN: igaz, ha a kurzor meg van nyitva Explicit kurzor esetén kurzornev%... alakúak

--Folyómenti városok száma. set serveroutput on; DECLARE TYPE folyomenti_tabla IS TABLE OF VAROSOK%ROWTYPE INDEX BY PLS_INTEGER; folyomenti_varosok folyomenti_tabla; SELECT * BULK COLLECT INTO folyomenti_varosok FROM VAROSOK WHERE FOLYOMENTIE=1; DBMS_OUTPUT.PUT_LINE('Folyomenti varosok szama: ' SQL%ROWCOUNT); /

BULK COLLECT Az előző példában láthatjuk, hogyan használható a BULK COLLECT arra, hogy egyszerre több sort mentsünk el egy asszociatív tömb (gyűjtőtábla) típusú változóba.

Mi definiáljuk és nagyobb ráhatásunk van a mutatott területre. A DECLARE-blokkban kell definiálni. Deklaráció: CURSOR kurzornév IS lekérdezés Megnyitás: OPEN kurzornév (megnyitáskor hajtódik végre a lekérdezés) Léptetés: FETCH kurzornév INTO változók (az aktuális sor adatai a változókba kerülnek és a kurzor eggyel előre lép, ellenőrizni kell, hogy a kurzorhoz tartozó eredménytáblának van-e sora) Lezárás: CLOSE kurzornév

--Folyómenti városok végigjárása explicit kurzorral. set serveroutput on; DECLARE CURSOR folyomentik IS SELECT * FROM VAROSOK WHERE FOLYOMENTIE=1; aktualis_varos VAROSOK%ROWTYPE; OPEN folyomentik; LOOP FETCH folyomentik INTO aktualis_varos; EXIT WHEN folyomentik%notfound; DBMS_OUTPUT.PUT_LINE('Folyomenti: ' aktualis_varos.nev); END LOOP; CLOSE folyomentik; /

--Folyómenti városok végigjárása explicit kurzorral. set serveroutput on; DECLARE CURSOR folyomentik IS SELECT * FROM VAROSOK WHERE FOLYOMENTIE=1; FOR aktualis_varos IN folyomentik LOOP DBMS_OUTPUT.PUT_LINE('Folyomenti: ' aktualis_varos.nev); END LOOP; /

--Folyómenti városok végigjárása explicit paraméteres kurzorral. set serveroutput on; DECLARE CURSOR varoslista(folyomenti_e VAROSOK.FOLYOMENTIE%TYPE) IS SELECT NEV FROM VAROSOK WHERE FOLYOMENTIE=folyomenti_e; folyomenti_e_var NUMBER(1) := 0; FOR aktualis_varos IN varoslista(folyomenti_e_var) LOOP DBMS_OUTPUT.PUT_LINE('Folyomenti_e: ' folyomenti_e_var ',neve:' aktualis_varos.nev); END LOOP; /

CURRENT OF KURZORNÉV - utoljára FETCH-elt sor módosítását vagy törlését engedi meg. FOR UPDATE OF ADATTAG - megmondjuk, hogy mely adattagot szeretnénk a kurzoron keresztül frissiteni NOWAIT - Ha egy másik tranzakció zárolta a kérédéses sort, akkor hibajelentéssel tovább fut

--A megadott nevü város irányítószámának növelése eggyel. set serveroutput on; DECLARE CURSOR novelendo(varosnev VAROSOK.NEV%TYPE) IS SELECT * FROM VAROSOK WHERE NEV=varosnev FOR UPDATE OF IRSZ NOWAIT; varos_record VAROSOK%ROWTYPE; irsz_valt VAROSOK.IRSZ%TYPE; OPEN novelendo('&bekert'); FETCH novelendo INTO varos_record; DBMS_OUTPUT.PUT_LINE('Elotte: ' varos_record.irsz); UPDATE VAROSOK SET IRSZ = varos_record.irsz+1 WHERE CURRENT OF novelendo; SELECT IRSZ INTO irsz_valt FROM VAROSOK WHERE NEV=varos_record.NEV; DBMS_OUTPUT.PUT_LINE('Utana: ' irsz_valt); /

Pseudooszlop nem általunk tárolt adat, de minden rekordhoz tárolt Egy rekord fizikai címe --A megadott nevü város országának kiirása ROWID-t használva. set serveroutput on; DECLARE row_id ROWID; orszag_valt VAROSOK.ORSZAG%TYPE; SELECT ROWID INTO row_id FROM VAROSOK WHERE NEV LIKE '&beker'; SELECT ORSZAG INTO orszag_valt FROM VAROSOK WHERE ROWID=row_id; DBMS_OUTPUT.PUT_LINE('A megadott varos ' orszag_valt ' orszagban talalhato.'); /

Névvel ellátott és paraméterezhető blokk Deklarációjuk a főprogram DECLARE szegmens végén Eljárások: PROCEDURE név [(paraméterek)] IS lokális deklarációk utasítások END [név]; IN, OUT, IN OUT paraméterek

--Személy kiirása eljárás segítségével set serveroutput on; DECLARE szemely_valt SZEMELY%ROWTYPE; PROCEDURE szemely_kiir( szemely_p IN SZEMELY%ROWTYPE ) IS DBMS_OUTPUT.PUT_LINE('A ' szemely_p.szigsz ' szigsz-u szemely, kinek neve ' szemely_p.nev ', a(z) ' szemely_p.orszag ' orszag ' szemely_p.irsz ' iranyitoszamu varosaban lakik. Szuletett: ' TO_CHAR(szemely_p.SZULETESIDATUM,'YYYY.MM.DD')); SELECT * INTO szemely_valt FROM SZEMELY WHERE ROWNUM<2; szemely_kiir(szemely_valt); /

Visszatérési értékkel is rendelkeznek. FUNCTION név [(paraméterek)] RETURN adattípus IS lokális deklarációk utasítások END [név];

--Megadott város lakosainak számának visszaadása függvénnyel. set serveroutput on; DECLARE lakosszam NUMBER; FUNCTION lakosok_szama(varosnev_p IN VAROSOK.NEV%TYPE) RETURN NUMBER IS cnt NUMBER; SELECT COUNT(SZEMELY.NEV) INTO cnt FROM VAROSOK,SZEMELY WHERE VAROSOK.NEV LIKE varosnev_p AND SZEMELY.IRSZ=VAROSOK.IRSZ AND SZEMELY.ORSZAG=VAROSOK.ORSZAG; RETURN cnt; lakosszam := lakosok_szama('&varosnev'); DBMS_OUTPUT.PUT_LINE('Lakosok szama: ' lakosszam);

Az elözöekhez hasonlóan kell öket definiálni, de nem csak az adott programban érhetök el, hanem az adatbázisban definiálódnak. deklaráció elejére CREATE feltüntetése alapértelmezés IN típusu paraméterekhez: paraméternév típus DEFAULT érték, paramétert csak a lista végéről lehet elhagyni tárolt eljárás PL/SQL blokkból futtatható, vagy SQL*Plus környezetben az EXECUTE paranccsal

CREATE PROCEDURE szemely_kiir( szemely_p IN SZEMELY%ROWTYPE ) IS DBMS_OUTPUT.PUT_LINE('A ' szemely_p.szigsz ' szigsz-u szemely, kinek neve ' szemely_p.nev ', a(z) ' szemely_p.orszag ' orszag ' szemely_p.irsz ' iranyitoszamu varosaban lakik. Szuletett: ' TO_CHAR(szemely_p.SZULETESIDATUM,'YYYY.MM.DD'));