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

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

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 használat I. 5. gyakorlat

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

Tranzakciókezelés PL/SQL-ben

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

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

Együttes hozzárendelés

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

Haladó DBMS ismeretek 1

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

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

Adattípusok. Max. 2GByte

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

Adattípusok. Max. 2GByte

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

Bevezetés: az SQL-be

Adatbázis használat I. 2. gyakorlat

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

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

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

PL/SQL feladatok 8. gyakorlat

SQL/PSM kurzorok rész

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

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

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

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.

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

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

Adatbázis rendszerek SQL nyomkövetés

Adatbázis használat I. 2. gyakorlat

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

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

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

Karakterkészlet. A kis- és nagybetűk nem különböznek, a sztringliterálok belsejét leszámítva!

SQL- Utasítások csoportosítása Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

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

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

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

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

Adatbázis Rendszerek I. 9. SQL alapok (DDL esettanulmány)

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

Adatbázisok webalkalmazásokban

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

Adatbázis használat I. 1. gyakorlat

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

Database Systems II. ZH összefoglaló

Vektoros grafikát tároló adatbázisok. Katona Endre Térképi adatbázisok diasorozata alapján

Java és web programozás

Kliens oldali SQL-API

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

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

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

Elemi alkalmazások fejlesztése IV.

Adatbázisban tárolt kollekciók

Adatbázisok elleni fenyegetések rendszerezése. Fleiner Rita BMF/NIK Robothadviselés 2009

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

A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai

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

Bevezetés az SQL-be. Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009

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

Vizuális programozás gyakorlat

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

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

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

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

Adatbázis-kezelés. Harmadik előadás

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

Adatbázis másolás Slony-I segítségével

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

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

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

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

Hatékony PL/SQL programok írása

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

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

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

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

SQL OO elemei aktív komponensek

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.

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

Programozási nyelvek (ADA)

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 I BEADANDÓ

Java és web programozás

Az SQL nyelv Structured Query Language (Struktúrált lekérdező nyelv)

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

BEVEZETÉS Az objektum fogalma

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

Bevezetés: Relációs adatmodell

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

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

ADATBÁZIS HASZNÁLAT I. 4. gyakorlat

Adatbázisok biztonsága

SELECT DISTINCT deptno FROM emp; (distinct) SELECT STATEMENT HASH UNIQUE TABLE ACCESS FULL EMP

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

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

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

Adatbázis-kezelés, információs-rendszerek

2007. február 25. TARTALOM

Átírás:

Csomagok

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

Csomagspecifikáció CREATE [OR REPLACE] PACKAGE csomagnév [AUTHID {DEFINER CURRENT_USER}] {IS AS} {típusdefiníciók nevesített_konstans_deklarációk változódeklarációk kivételdeklarációk kurzorspecifikációk alprogramspecifikációk pragmák} END [csomagnév]; Nincs futtatható kód! Nyilvános deklarációk, a csomag nevével minősítünk Az alprogramnevek túlterhelhetők

Csomagtörzs CREATE [OR REPLACE] PACKAGE BODY csomagnév {IS AS} deklarációk [BEGIN végrehajtható_utasítások] END [csomagnév]; Ha a specifikációban van kurzor- vagy alprogramspecifikáció, akkor kötelező megadni! Privát deklarációk, csak a csomagtörzsből látszanak A BEGIN után inicializáló utasítások vannak A törzs függ a specifikációtól!

CREATE OR REPLACE PACKAGE konyvtar_csomag AS CURSOR cur_lejart_kolcsonzesek( p_datum DATE DEFAULT SYSDATE ) RETURN t_lejart_rec; END;

CREATE OR REPLACE PACKAGE BODY konyvtar_csomag AS CURSOR cur_lejart_kolcsonzesek(p_datum DATE DEFAULT SYSDATE ) RETURN t_lejart_rec IS ; END; SELECT kolcsonzo, konyv, datum, hosszabbitva, megjegyzes, napok FROM (SELECT kolcsonzo, konyv, datum, hosszabbitva, megjegyzes, TRUNC(p_Datum, 'DD') - TRUNC(datum, 'DD') - 30*(hosszabbitva+1) AS napok FROM kolcsonzes) WHERE napok > 0

Működés Fordítás: p-kódra ALTER PACKAGE csomagnév COMPILE [DEBUG] {PACKAGE SPECIFICATION BODY}; DROP PACKAGE [BODY] csomagnév;

Példányosítás és inicializálás Amikor egy munkamenet egy csomagbeli elemre hivatkozik, Oracle példányosítja a csomagot ahhoz a munkamenethez. Minden olyan munkamenet, amely csomagot hivatkozik, rendelkezik a csomaghoz egy saját példánnyal. Amikor az Oracle példányosít egy csomagot, akkor inicializálja is. Az inicializáció a következőket jelenti: A publikus konstansok értéket kapnak A publikus változók megkapják azt az értéket, amely a deklarációban van meghatározva A csomag törzsének az inicializációs része lefut

Csomag állapot A csomagban deklarált változók, konstansok és kurzorok értéke Állapottal rendelkező <-> állapot nélküli csomag A csomag állapota egy munkamenet végéig megmarad, kivéve: SERIALLY_REUSABLE használata esetén A csomagtörzs újrafordításakor Ha a munkamenet által használt valamely csomag érvénytelenné válik vagy újra lesz érvényesítve.

Csomagkészítési irányelvek Általános célú csomagokat készítsünk Csak a nyilvánosságnak szánt eszközöket vegyük fel a specifikációba (a csomag nem absztrakt adattípus!) A munkameneteken vagy tranzakciókon átívelő adatelemeket helyezzük a csomagtörzs deklarációs részébe A specifikáció változása magával vonja minden rá hivatkozó alprogram érvénytelenítését

CREATE OR REPLACE PACKAGE emp_actions AS -- spec TYPE EmpRecTyp IS RECORD (emp_id INT, salary REAL); CURSOR desc_salary RETURN EmpRecTyp; PROCEDURE hire_employee ( ename VARCHAR2, job VARCHAR2, mgr NUMBER, sal NUMBER, comm NUMBER, deptno NUMBER); PROCEDURE fire_employee (emp_id NUMBER); END emp_actions;

CREATE OR REPLACE PACKAGE BODY emp_actions AS -- body CURSOR desc_salary RETURN EmpRecTyp IS SELECT empno, sal FROM emp ORDER BY sal DESC; PROCEDURE hire_employee (ename VARCHAR2, BEGIN job VARCHAR2, mgr NUMBER, sal NUMBER, comm NUMBER, deptno NUMBER) IS INSERT INTO emp VALUES (empno_seq.nextval, ename, job, mgr, SYSDATE, sal, comm, deptno); END hire_employee; PROCEDURE fire_employee (emp_id NUMBER) IS BEGIN DELETE FROM emp WHERE empno = emp_id; END fire_employee; END emp_actions;

CREATE OR REPLACE PACKAGE pkg IS n NUMBER := 5; END pkg; / CREATE OR REPLACE PACKAGE sr_pkg IS PRAGMA SERIALLY_REUSABLE; n NUMBER := 5; END sr_pkg; / BEGIN pkg.n := 10; sr_pkg.n := 10; END; / BEGIN DBMS_OUTPUT.PUT_LINE('pkg.n: ' pkg.n); DBMS_OUTPUT.PUT_LINE('sr_pkg.n: ' sr_pkg.n); END;

Standard csomag PL/SQL nyelvi környezetét határozza meg. Típusok, kivételek, alprogramok

Példa

SERIALLY_REUSABLE If a package is not SERIALLY_REUSABLE, the package state can persist for the life of a session. If a package is SERIALLY_REUSABLE, the package state persists only for the life of a server call. If a subsequent server call references the package, changes made to the package state in previous server calls are invisible.

-- Create bodiless SERIALLY_REUSABLE package: CREATE OR REPLACE PACKAGE bodiless_pkg IS PRAGMA SERIALLY_REUSABLE; n NUMBER := 5; END; /

-- Create SERIALLY_REUSABLE package with specification and body: CREATE OR REPLACE PACKAGE pkg IS END; / PRAGMA SERIALLY_REUSABLE; n NUMBER := 5; CREATE OR REPLACE PACKAGE BODY pkg IS PRAGMA SERIALLY_REUSABLE; BEGIN n := 5; END; /

CREATE OR REPLACE PACKAGE pkg IS n NUMBER := 5; END pkg; / CREATE OR REPLACE PACKAGE sr_pkg IS PRAGMA SERIALLY_REUSABLE; n NUMBER := 5; END sr_pkg; / BEGIN pkg.n := 10; sr_pkg.n := 10; END; / BEGIN DBMS_OUTPUT.PUT_LINE('pkg.n: ' pkg.n); DBMS_OUTPUT.PUT_LINE('sr_pkg.n: ' sr_pkg.n); END; / Result: pkg.n: 10 sr_pkg.n: 5

DROP TABLE people; CREATE TABLE people (name VARCHAR2(20)); INSERT INTO people (name) VALUES ('John Smith'); INSERT INTO people (name) VALUES ('Mary Jones'); INSERT INTO people (name) VALUES ('Joe Brown'); INSERT INTO people (name) VALUES ('Jane White'); CREATE OR REPLACE PACKAGE sr_pkg IS PRAGMA SERIALLY_REUSABLE; CURSOR c IS SELECT name FROM people; END sr_pkg; /

CREATE OR REPLACE PROCEDURE fetch_from_cursor IS name_ VARCHAR2(200); BEGIN IF sr_pkg.c%isopen THEN DBMS_OUTPUT.PUT_LINE('Cursor is open.'); ELSE DBMS_OUTPUT.PUT_LINE('Cursor is closed; opening now.'); END IF; OPEN sr_pkg.c; FETCH sr_pkg.c INTO name_; DBMS_OUTPUT.PUT_LINE('Fetched: ' name_); / FETCH sr_pkg.c INTO name; DBMS_OUTPUT.PUT_LINE('Fetched: ' name_); END fetch_from_cursor;

First call to server: BEGIN fetch_from_cursor; fetch_from_cursor; END; / Result: Cursor is closed; opening now. Fetched: John Smith Fetched: Mary Jones Cursor is open. Fetched: Joe Brown Fetched: Jane White

New call to server: BEGIN fetch_from_cursor; fetch_from_cursor; END; / Result: Cursor is closed; opening now. Fetched: John Smith Fetched: Mary Jones Cursor is open. Fetched: Joe Brown Fetched: Jane White