PL/SQL folytatás Kurzorok Alprogramok Tárolt eljárások ADATBÁZIS ALAPÚ RENDSZEREK.

Slides:



Advertisements
Hasonló előadás
Tananyag: konzultáció
Advertisements

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.
Analitikus függvények
Anyagadatbank c. tárgy gyakorlat
Adatbázisok SQL. TARTALOM Szijártó M.2 Témakörök  Az SQL tulajdonságai  A műveletek fajtái  Objektum-műveletek  Lekérdezések Tulajdonságok és műveletek.
Felhasználói felületek és üzleti logika Bollobás Dávid ASP.NET
Ismétlés. Ismétlés: Adatbázisok megnyitása: OPEN DATABASE adatbázis_név OPEN DATABASE ”adatbázis_név elérési útvonallal” Adattábla megnyitása: USE tábla_név.
Delphi programozás alapjai
Adatbázis alapú rendszerek
5. GYAKORLAT SQL CREATE TABLE, aktualizálás. S QL Structured Query Language A relációs adatbáziskezelés szabványos nyelve Nem algoritmikus, de beépíthető.
– SQL 2: Adatok kezelése – Tarcsi Ádám, január 30. Adatbázis gyakorlat.
Adatbázis gyakorlat – SUBSELECT – Tarcsi Ádám március.
– Adattáblák & adatok kezelése – Tarcsi Ádám január Adatbázis gyakorlat.
2012. március 6. Rózsa Győző Interaktív környezet március Rózsa Győző
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ű.
megismerése, mintaadatbázis létrehozása
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,
7. előadás (2005. április 12.) Láncolt lista File kezelés 1.
SQL Táblák összekapcsolása lekérdezéskor Aliasok Allekérdezések
Adatbázis alapú rendszerek
Készítette: Sárközi Anikó
Delphi programozás alapjai Nagyváradi Anett PTE PMMK MIT.
2006. október 2.Markó Tamás, PTE TTK1 Az Oracle SQL 5. Nézettáblák létrehozása, módosítása és törlése.
VFP programozása report készítése menü készítése dinamikus elemek
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ő.
Az Input-Output használata Az input-outputot a nyelv előredefiniált csomagokon keresztül valósítja meg. Mindegyik csomag az Ada alapcsomag gyereke.
Adatbázis kezelés SQL. Történeti áttekintés 1976IBM:SEQUEL,SQL 1976IBM:SEQUEL,SQL 1983ORACLE 1983ORACLE 1984INFORMIX 1984INFORMIX 1986SQL – szabvány :
Nézettáblák létrehozása, módosítása és törlése
WEB Technológiák ISAPI ME Általános Informatikai Tsz. dr. Kovács László.
- adatbázisséma definiálása (DDL) Data Definition Languages, - adatok aktualizálása (DML),Data Maniputaion Language - lekérdezési lehetőségek (DML) Data.
Az SQL nyelv alapjai.
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;
Alprogramok deklarációja, definíciója és meghívása Páll Boglárka.
ADATBÁZIS HASZNÁLAT I. 4. gyakorlat. Figyelem!!! A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem.
2012. tavaszi félév Véső Tamás Véső Tamás OE­NIK / 18.
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.
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!
Adatbázis-kezelés SQL-lel
Felhasználók és jogosultságok
Készítette: Tóth Ervin
Az SQL nyelv. SQL Az SQL utasításait két fő csoportba szokták sorolni: DDL (= Data Definition Language): adatstuktúra definiáló utasítások. DML (= Data.
SQL.
2006. október 30.Markó Tamás, PTE TTK1 Az Oracle SQL 9. Triggerek és tárolt eljárások. Kliens oldali programok.
XML fejlesztések TSQL fejlesztések Tábla paraméter SQLCLR fejlesztések 8k limit feloldása Több paraméteres UDA-ek Ordered UDF-ek Entity Framework ADO.NET.
– SQL 3: SELECT - 1. – Tarcsi Ádám, január 31. Adatbázis gyakorlat.
Objektum orientált programozás 3. Függvények Nagy Szilvia.
– SELECT - 2. – Tarcsi Ádám március Adatbázis gyakorlat.
– SELECT - 2. – Tarcsi Ádám március Adatbázis gyakorlat.
Objektum orientált programozás
PL/SQL alapok Adatbázis-kezelés.
Adatbázis rendszerek II
Ma az un. Relációs adatmodelleket használjuk.
5. gyakorlat Fleiner Rita.
Webprogramozó tanfolyam
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.
1 Verseny 2000 gyakorlat SQL 2000 Server Portál adatbázis létrehozása.
– SELECT - 1. – Tarcsi Ádám január Adatbázis gyakorlat.
SQL aggregálás, csoportosítás és összekapcsolás Adatbázisok 1.
Adatbázis alapú rendszerek
PL/SQL gyakorlás Kalmár György.
Triggerek gyakorlás.
Triggerek Kalmár György.
Adatbázis-kezelés (PL/SQL)
Függvénysablonok használata
Előadás másolata:

PL/SQL folytatás Kurzorok Alprogramok Tárolt eljárások ADATBÁZIS ALAPÚ RENDSZEREK

 Adattábla soronkénti feldolgozására szolgál  A memóriában egy munkaterületen tárolódik a kurzorhoz tartozó tábla  Explicit kurzor: a kurzorhoz tartozó tábla SELECT utasítással definiált  Implicit kurzor: minden INSERT, DELETE, UPDATE és explicit kurzorral nem rendelkezõ SELECT utasításhoz automatikusan jön létre  Kurzorfüggvények:  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 KURZOR

DECLARE v_sor DEMO.vevo%ROWTYPE; BEGIN SELECT * INTO v_sor FROM DEMO.vevo WHERE partner_id = 21; DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT); END; 1. PÉLDA: IMPLICIT KURZOR

 Deklaráció: CURSOR kurzornév IS lekérdezés  Megnyitás: OPEN kurzornév (megnyitáskor hajtódik végre a lekérdezés, a létrejövõ eredménytábla nem frissítõdik!!!)  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 EXPLICIT KURZOR HASZNÁLATA

DECLARE v_veznev DEMO.munkatars.vezeteknev%TYPE; v_kernev DEMO.munkatars.keresztnev%TYPE; v_tel DEMO.munkatars.telefon%TYPE; CURSOR nev_es_tel IS SELECT vezeteknev, keresztnev, telefon FROM DEMO.munkatars ORDER BY vezeteknev, keresztnev; BEGIN OPEN nev_es_tel; LOOP FETCH nev_es_tel INTO v_veznev, v_kernev, v_tel; EXIT WHEN nev_es_tel%NOTFOUND; DBMS_OUTPUT.PUT_LINE(v_veznev || ' ' || v_kernev || ': ' || v_tel); END LOOP; CLOSE nev_es_tel; END; 2. PÉLDA: EXPLICIT KURZOR

DECLARE CURSOR nev_es_tel IS SELECT vezeteknev, keresztnev, telefon FROM DEMO.munkatars ORDER BY vezeteknev, keresztnev; BEGIN /* a rekordnevet nem kell külön deklarálni */ FOR m_rek IN nev_es_tel LOOP DBMS_OUTPUT.PUT_LINE(m_rek.vezeteknev || ' ' || m_rek.keresztnev || ': ' || m_rek.telefon); END LOOP; END; 3. PÉLDA: EXPLICIT KURZOR FOR CIKLUSBAN

CURSOR kurzornév (paraméternév adattípus,..., paraméternév adattípus) IS alkérdés;  Lehetőségünk van így a kurzort különböző paraméterekkel megnyitni (pl. más és más kódú dolgozó adatainak lekérése, stb.) PARAMÉTEREZETT KURZOR

ACCEPT partner_azon PROMPT 'Kérem adja meg a partner azonosítót: ' DECLARE row_id ROWID; id DEMO.vevo.partner_id%TYPE; BEGIN SELECT ROWID INTO row_id FROM DEMO.vevo WHERE partner_id = '&partner_azon'; UPDATE DEMO.vevo SET kiallt_szamlak_db = kiallt_szamlak_db + 1 WHERE ROWID = row_id; DBMS_OUTPUT.PUT_LINE(row_id); END; TÁBLA MÓDOSÍTÁSA KURZORRAL / ROWID

DECLARE CURSOR partner_update(p_azon CHAR) IS SELECT kiallt_szamlak_db FROM DEMO.vevo WHERE partner_id = p_azon FOR UPDATE OF kiallt_szamlak_db NOWAIT; darab DEMO.vevo.kiallt_szamlak_db%TYPE; BEGIN OPEN partner_update('&partner_azon'); FETCH partner_update INTO darab; UPDATE DEMO.vevo SET kiallt_szamlak_db = darab + 1 WHERE CURRENT OF partner_update; CLOSE partner_update; END; TÁBLA MÓDOSÍTÁSA KURZORRAL / FOR UPDATE, CURRENT OF paraméteres kurzor a pillanatnyilag érintett rekordot módosítja NOWAIT: Ha egy másik tranzakció zárolta a kérédéses sort, akkor hibajelentéssel tovább fut NOWAIT: Ha egy másik tranzakció zárolta a kérédéses sort, akkor hibajelentéssel tovább fut

 Névvel ellátott és paraméterezhetõ blokk (eljárás / függvény)  Deklarációjuk a fõprogram DECLARE szegmensének végén  Eljárások: PROCEDURE név [(paraméterek)] IS [lokális deklarációk] BEGIN utasítások END név;  paramétereik lehetnek IN, OUT, INOUT módúak (bemeneti változó, kimeneti változó, B/K változó) egy_szam IN NUMBER, egy_szam_negyzete OUT NUMBER ALPROGRAMOK

DECLARE v_megnev DEMO.vevo.megnevezes%TYPE; PROCEDURE nyomtat(szoveg IN VARCHAR2) IS BEGIN DBMS_OUTPUT.PUT_LINE(szoveg); END; BEGIN SELECT megnevezes INTO v_megnev FROM DEMO.vevo WHERE partner_id = 22; nyomtat(v_megnev); END; 4. PÉLDA: EGY ELJÁRÁS eljáráshívás főprogramon belül

 azonos szabályok érvényesek, mint az eljárásoknál, de van visszatérési értékük FUNCTION név [(paraméterek)] RETURN adattípus IS [lokális deklarációk] BEGIN utasítások END név; ALPROGRAMOK / FÜGGVÉNYEK

BEGIN SELECT MIN(partner_id) INTO v_partnerid FROM DEMO.munkatars; LOOP SELECT ber INTO v_ber FROM DEMO.munkatars WHERE partner_id = v_partnerid; v_partnerid := v_partnerid + 1; EXIT WHEN min_ber(v_ber); END LOOP; DBMS_OUTPUT.PUT_LINE('A minimal ber: ' || v_ber); END; 5. PÉLDA: EGY FÜGGVÉNY DECLARE v_partnerid NUMBER; v_ber DEMO.munkatars.ber%TYPE; FUNCTION min_ber (ber IN NUMBER) RETURN BOOLEAN IS tmp_ber DEMO.munkatars.ber%TYPE; BEGIN SELECT MIN(ber) INTO tmp_ber FROM DEMO.munkatars; RETURN (tmp_ber = ber); END min_ber;

 lehetőség van az adatbázisban eltárolni alprogramokat  ezek később tetszőleges, az adatbázison futtatott PL/SQL blokkból, SQL lekérdezésből, az EXEC utasítással, vagy SQL*Plus környezetben az EXECUTE paranccsal hívhatók  deklaráció elejére CREATE, IS helyett AS  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 PROCEDURE nyomtat(szoveg IN VARCHAR2 DEFAULT 'empty') FUNCTION min_ber (ber IN NUMBER DEFAULT 0) RETURN BOOLEAN CREATE OR REPLACE PROCEDURE kiir AS BEGIN DBMS_OUTPUT.PUT_LINE(‘Szoveg’); END kiir;  Később: exec kiir(); ADATBÁZIS-OBJEKTUMKÉNT TÁROLT ALPROGRAM

1.Adj meg egy tárolt eljárást, ami kiírja a képernyőre az EMP tábla sorainak számát és a dolgozók átlagfizetését. A megoldáshoz ne használd az SQL összesítő függvényeit, hanem kurzorral és ciklussal számold ki az értékeket. Adj példát az eljárás meghívására. 2.Adj meg egy tárolt függvényt, amely egy adott osztálykódra meghatározza, hogy az osztályon dolgozók összesen hány dollárt keresnek. Kivételkezeléssel biztosítsd, hogy ne lehessen érvénytelen osztálykódot megadni; ha ez történne, -1 legyen a visszaadott érték. Adj meg egy olyan SQL lekérdezést, ami megjeleníti az összes dolgozó kódját, nevét, fizetését, és a vele egy osztályon dolgozók bérösszegét! FELADATOK / 1.

3.Adj meg egy olyan PL/SQL programot, ami FOR UPDATE OF … kurzorral a 2000 dollárnál kevesebbet kereső dolgozóknak az alapbérük 10%-át jutalomként adja! A jutalmat a COMM oszlophoz kell hozzáadni. Futás közben írjuk ki a jutalmat kapó dolgozók nevét a képernyőre, majd végül jelenjen meg a ‘Kész.’ üzenet!  Szükséges lehet az NVL() függvény használata.  A SET AUTOCOMMIT ON SQL*Plus utasítással automatikusan végrehajtódik a változtatások COMMIT-ja. 4.Adj meg egy olyan PL/SQL programot, ami alprogram segítségével ellenőrzi egy adott megnevezésű munkakör bérköltségét. Az alprogram egy eljárás legyen, és OUT paraméterrel adja át a kiszámolt értéket. A munkakört a program futása előtt a felhasználótól kérd be. Az alprogramban kivételkezeléssel ellenőrizd, hogy valódi-e a megadott munkakör; ha nem, -1 legyen a visszaadott bérösszeg. FELADATOK / 2.