SQL/PSM kurzorok rész

Hasonló dokumentumok
Bevezetés: Relációs adatmodell

Tankönyv: SQL/PSM + Gyak:PL/SQL

SQL/PSM tárolt modulok rész

Database Systems II. ZH összefoglaló

Datalog: logikai alapú lekérdezı nyelv

SQL DDL-2 (aktív elemek) triggerek

Rekurzió a Datalogban és az SQL3-ban

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

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

Bevezetés: az SQL-be

Adatbázisok 1. Rekurzió a Datalogban és SQL-99

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

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

Construction of a cube given with its centre and a sideline

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

(Asking for permission) (-hatok/-hetek?; Szabad ni? Lehet ni?) Az engedélykérés kifejezésére a következő segédigéket használhatjuk: vagy vagy vagy

Széchenyi István Egyetem

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

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

Tranzakciókezelés PL/SQL-ben

Együttes hozzárendelés

EN United in diversity EN A8-0206/419. Amendment

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

Mapping Sequencing Reads to a Reference Genome

Using the CW-Net in a user defined IP network

Relációs algebra 2.rész példák

SQL DDL: Táblák, megszorítások (constraints), triggerek, nézettáblák

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

Tankönyv példák kidolgozása

Lekérdezések az SQL-ben 1.rész

Lekérdezések az SQL-ben 2.rész

Proxer 7 Manager szoftver felhasználói leírás

Adatbázisok-1 előadás

Haladó DBMS ismeretek 1

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

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

Teszt topológia E1/1 E1/0 SW1 E1/0 E1/0 SW3 SW2. Kuris Ferenc - [HUN] Cisco Blog -

Kliens oldali SQL-API

Csatlakozás a BME eduroam hálózatához Setting up the BUTE eduroam network

Tavaszi Sporttábor / Spring Sports Camp május (péntek vasárnap) May 2016 (Friday Sunday)

Az SQL adatbázisnyelv: DML

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

Correlation & Linear Regression in SPSS

TestLine - Angol teszt Minta feladatsor

Feladatok A mai előadáson: Tankönyv -- Termékek feladatai:

Create & validate a signature

T Á J É K O Z T A T Ó. A 1108INT számú nyomtatvány a webcímen a Letöltések Nyomtatványkitöltő programok fülön érhető el.

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

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

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

Lopocsi Istvánné MINTA DOLGOZATOK FELTÉTELES MONDATOK. (1 st, 2 nd, 3 rd CONDITIONAL) + ANSWER KEY PRESENT PERFECT + ANSWER KEY

Bevezetés: Relációs adatmodell

Angol Középfokú Nyelvvizsgázók Bibliája: Nyelvtani összefoglalás, 30 kidolgozott szóbeli tétel, esszé és minta levelek + rendhagyó igék jelentéssel

Datalog: logikai alapú lekérdezı nyelv

Adatbázisban tárolt kollekciók

Statistical Dependence

There is/are/were/was/will be

Bevezetés: Relációs adatmodell

Az adatbázisrendszerek világa

Hogyan használja az OROS online pótalkatrész jegyzéket?

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

Tudományos Ismeretterjesztő Társulat

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

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

ANGOL NYELV KÖZÉPSZINT SZÓBELI VIZSGA I. VIZSGÁZTATÓI PÉLDÁNY

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

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

Adatbázis tartalmának módosítása. SQL DML utasítások

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

Can/be able to. Using Can in Present, Past, and Future. A Can jelen, múlt és jövő idejű használata

Cloud computing. Cloud computing. Dr. Bakonyi Péter.

Lekérdezések az SQL-ben 1.rész

(NGB_TA024_1) MÉRÉSI JEGYZŐKÖNYV

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

Logikai lekérdezı nyelv: Datalog Rekurzió a Datalogban és az SQL-ben

16F628A megszakítás kezelése

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

Relációs algebrai lekérdezések átírása SQL SELECT-re (példák)

Relative Clauses Alárendelő mellékmondat

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

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

Adatbázis tartalmának módosítása (DML), az adatbázis-kezelı rendszerek felépítése,

Adatbázis-kezelés ODBC driverrel

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

KN-CP50. MANUAL (p. 2) Digital compass. ANLEITUNG (s. 4) Digitaler Kompass. GEBRUIKSAANWIJZING (p. 10) Digitaal kompas

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

USER MANUAL Guest user

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

ANGOL NYELVI SZINTFELMÉRŐ 2012 A CSOPORT. to into after of about on for in at from

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

Cloud computing Dr. Bakonyi Péter.

Példák átírásokra: Relációs algebrai kifejezések, a kiértékelı fák átírása SQL lekérdezésekre

Lexington Public Schools 146 Maple Street Lexington, Massachusetts 02420

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

Elemi alkalmazások fejlesztése IV.

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

7. Bemutatom a barátomat, Pétert. 8. Hogy hívják Önt? 9. Nagyon örülök, hogy találkoztunk. 10. Nem értem Önt. 11. Kérem, beszéljen lassabban.

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

A teszt a következő diával indul! The test begins with the next slide!

Számítógépes Hálózatok GY 8.hét

Átírás:

SQL/PSM kurzorok --- 2.rész Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009 9.3. Az SQL és a befogadó nyelv közötti felület (sormutatók) 9.4. SQL/PSM Sémában tárolt függvények és eljárások -- volt: PSM1modulok: utasítások, modulok, PSM-kivételek -- most: PSM2kurzorok: lekérdezések PSM-ben Adatbázisok-1 elıadás // AB1_08B_PSM1kurzorok // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 1

Lekérdezések használata a PSM-ben A típuseltérés problémája: Az SQL magját a relációs adatmodell képezi. Tábla gyűjtemény, sorok multihalmaza, mint adattípus nem fordul elő a magasszintűnyelvekben. A lekérdezés eredménye hogyan használható fel? Három esetet különböztetünk meg attól függően, hogy a SELECT FROM [WHERE stb] lekérdezés eredménye skalárértékkel, egyetlen sorral vagy egy listával (multihalmazzal) tér-e vissza. Adatbázisok-1 elıadás // AB1_08B_PSM1kurzorok // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 2

Lekérdezések használata a PSM-ben SELECT eredményének használata: 1. SELECT eredménye egy skalárértékkeltér vissza, elemi kifejezésként használhatjuk. 2. SELECT egyetlen sorral tér vissza SELECTe 1,, e n INTOvált 1, vált n ---A végrehajtásnál visszatérő üzenethez az ---SQL STATE változóban férhetünk hozzá. 3. SELECT eredménye több sorból álló tábla, akkor az eredményt soronként bejárhatóvá tesszük, kurzor használatával. Adatbázisok-1 elıadás // AB1_08B_PSM1kurzorok // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 3

1. Example: Assignment/Query Using local variable p and Sells(bar, beer, price), we can get the price Joe charges for Bud by: SET p = (SELECT price FROM Sells WHERE bar = Joe s Bar AND beer = Bud ); Adatbázisok-1 elıadás // AB1_08B_PSM1kurzorok // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 4

2. SELECT... INTO Another way to get the value of a query that returns one tuple is by placing INTO <variable> after the SELECT clause. Example: SELECT price INTO p FROM Sells WHERE bar = Joe s Bar AND beer = Bud ; Adatbázisok-1 elıadás // AB1_08B_PSM1kurzorok // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 5

3. Cursors Ha a SELECT eredménye több sorral tér vissza, akkor valamilyen ciklussal járjuk be az eredmény sorait A cursor is essentially a tuple-variable that ranges over all tuples in the result of some query. Declare a cursor c by: DECLAREsormutatóCURSOR FOR (lekérdezés); Adatbázisok-1 elıadás // AB1_08B_PSM1kurzorok // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 6

Opening and Closing Cursors To use cursor c, we must issue the command: OPEN sormutató; Hatására a rendszer a lekérdezést kiértékeli és hozzáférhető lesz a lekérdezés eredménye, ehhez a bejáráshoz egy ciklust kell indítani, és a sormutató az eredmény első sorára mutat (ezt a ciklust lásd a következő oldalon) When finished with c, issue command: CLOSE sormutató; Adatbázisok-1 elıadás // AB1_08B_PSM1kurzorok // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 7

Fetching Tuples From a Cursor l: LOOP To get the next tuple from cursor c, issue command: FETCH FROM sormutató INTO v1,,vn; The v s are a list of variables, one for each component of the tuples referred to by c. c is moved automatically to the next tuple. IF ellenőrzés: kaptunk-e új sort? THEN LEAVE l END IF; ENDLOOP; Adatbázisok-1 elıadás // AB1_08B_PSM1kurzorok // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 8

Breaking Cursor Loops The usual way to use a cursor is to create a loop with a FETCHstatement, and do something with each tuple fetched. A tricky point is how we get out of the loop when the cursor has no more tuples to deliver. Each SQL operation returns a status, which is a 5-digit character string. For example, 00000 = Everything OK, and 02000 = Failed to find a tuple. In PSM, we can get the value of the status in a variable called SQLSTATE. Adatbázisok-1 elıadás // AB1_08B_PSM1kurzorok // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 9

Breaking Cursor Loops We may declare a condition, which is a boolean variable that is true if and only if SQLSTATE has a particular value. Example: We can declare condition NotFound to represent 02000 by: DECLARE NotFound CONDITION FOR SQLSTATE 02000 ; DECLARE <name> CONDITION FOR SQLSTATE <value>; Adatbázisok-1 elıadás // AB1_08B_PSM1kurzorok // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 10

Breaking Cursor Loops The structure of a cursor loop is thus: cursorloop: LOOP FETCH c INTO ; IF NotFound THEN LEAVE cursorloop; END IF; END LOOP; Adatbázisok-1 elıadás // AB1_08B_PSM1kurzorok // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 11

Example: Cursor Let s write a procedure that examines Sells(bar, beer, price), and raises by $1 the price of all beers at Joe s Bar that are under $3. Yes, we could write this as a simple UPDATE, but the details are instructive anyway. Adatbázisok-1 elıadás // AB1_08B_PSM1kurzorok // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 12

The Needed Declarations CREATE PROCEDURE JoeGouge( ) DECLARE thebeer CHAR(20); DECLARE theprice REAL; DECLARE NotFound CONDITION FOR SQLSTATE 02000 ; DECLARE c CURSOR FOR (SELECT beer, price FROM Sells WHERE bar = Joe s Bar ); --Used to hold -- beer-price pairs -- when fetching -- through cursor c -- Returns Joe s menu Adatbázisok-1 elıadás // AB1_08B_PSM1kurzorok // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 13

The Procedure Body BEGIN OPEN c; menuloop: LOOP FETCH c INTO thebeer, theprice; IF NotFound THEN LEAVE menuloop END IF; IF theprice< 3.00 THEN UPDATE Sells SET price = theprice+ 1.00 WHERE bar = Joe sbar AND beer = thebeer; END IF; END LOOP; CLOSE c; END; Check if the recent FETCH failed to get a tuple If Joe charges less than $3 for the beer, raise its price at Joe s Bar by $1. Adatbázisok-1 elıadás // AB1_08B_PSM1kurzorok // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 14

PL/SQL különbségek In addition to the SQL types, NUMBER can be used to mean INT or REAL, as appropriate. You can refer to the type of attribute x of relation R by R.x%TYPE. Useful to avoid type mismatches. Also, R%ROWTYPE is a tuple whose components have the types of R s attributes. Adatbázisok-1 elıadás // AB1_08B_PSM1kurzorok // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 15

PL/SQL Cursors The form of a PL/SQL cursor declaration is: CURSOR <name> IS <query>; To fetch from cursor c, say: FETCH c INTO <variable(s)>; Adatbázisok-1 elıadás // AB1_08B_PSM1kurzorok // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 16

Example: JoeGouge() in PL/SQL Recall JoeGouge()sends a cursor through the Joe s-bar portion of Sells, and raises by $1 the price of each beer Joe s Bar sells, if that price was initially under $3. Adatbázisok-1 elıadás // AB1_08B_PSM1kurzorok // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 17

Example: JoeGouge() Declarations CREATE OR REPLACE PROCEDURE JoeGouge() AS thebeer Sells.beer%TYPE; theprice Sells.price%TYPE; CURSOR c IS SELECT beer, price FROM Sells WHERE bar = Joe s Bar ; Adatbázisok-1 elıadás // AB1_08B_PSM1kurzorok // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 18

Example: JoeGouge() Body BEGIN OPEN c; LOOP FETCH c INTO thebeer, theprice; EXIT WHEN c%notfound; IF theprice < 3.00 THEN END IF; END LOOP; CLOSE c; END; How PL/SQL breaks a cursor loop UPDATE Sells SET price = theprice + 1.00; WHERE bar = Joe s Bar AND beer = thebeer; Note this is a SET clause in an UPDATE, not an assignment. PL/SQL uses := for assignments. Adatbázisok-1 elıadás // AB1_08B_PSM1kurzorok // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 19

Tuple-Valued Variables PL/SQL allows a variable x to have a tuple type. x R%ROWTYPE gives x the type of R s tuples. Rcould be either a relation or a cursor. x.a gives the value of the component for attribute a in the tuple x. Adatbázisok-1 elıadás // AB1_08B_PSM1kurzorok // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 20

Example: Tuple Type Repeat of JoeGouge() declarations with variable bp of type beer-price pairs. CREATE OR REPLACE PROCEDURE JoeGouge() AS CURSOR c IS SELECT beer, price FROM Sells WHERE bar = Joe s Bar ; bp c%rowtype; Adatbázisok-1 elıadás // AB1_08B_PSM1kurzorok // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 21

JoeGouge() Body Using bp BEGIN OPEN c; LOOP FETCH c INTO bp; EXIT WHEN c%notfound; IF bp.price < 3.00 THEN UPDATE Sells SET price = bp.price + 1.00 WHERE bar = Joe s Bar AND beer =bp.beer; END IF; END LOOP; CLOSE c; END; Components of bp are obtained with a dot and the attribute name Adatbázisok-1 elıadás // AB1_08B_PSM1kurzorok // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 22