Adatbázisban tárolt kollekciók

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

Együttes hozzárendelés

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

Haladó DBMS ismeretek 1

Tranzakciókezelés PL/SQL-ben

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

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

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

Adattípusok. Max. 2GByte

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

Adatbázisok* tulajdonságai

Adattípusok. Max. 2GByte

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

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

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

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

Adatbázis rendszerek SQL nyomkövetés

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

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

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

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.

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

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

Adatbázis használat I. 5. gyakorlat

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

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

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

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

ADATBÁZISOK gyakorlat: SQL 2. rész SELECT

Az SQL adatbázisnyelv: DML

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

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

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

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-kezelés. Harmadik előadás

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

Összetett típusok Rekordtípus

SQL gyakorló feladatok. 6. Adatbázis gyakorlat április 5.

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

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

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

SQL parancsok feldolgozása

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

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

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

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

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

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

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

Tankönyv példák kidolgozása

BEVEZETÉS Az objektum fogalma

LEKÉRDEZÉSEK SQL-BEN. A relációs algebra A SELECT utasítás Összesítés és csoportosítás Speciális feltételek

Java és web programozás

SQL OO elemei aktív komponensek

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

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

Objektum relációs lehetőségek az Oracle-ben. Katona Endre Adatbázis alapú rendszerek diasorozata alapján

Oracle Spatial. Térbeli adatot tartalmazó tábla: Geometry table Legalább 2 oszlopa van: Elsődleges kulcs, SDO_GEOMETRY típusú oszlop.

LOGISZTIKAI ADATBÁZIS RENDSZEREK UNIÓ, ALLEKÉRDEZÉSEK

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

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

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

ADATBÁZIS RENDSZEREK I BEADANDÓ

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.

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];

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

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

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

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

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

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

BGF. 4. Mi tartozik az adatmodellek szerkezeti elemei

A könyv tartalomjegyzéke

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

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

Adatbázis rendszerek. Gyakorlati jegyzet. Készítette: Selling István

Relációs algebra áttekintés és egy táblára vonatkozó lekérdezések

Debreceni Egyetem Informatikai Kar TANULÓI NYILVÁNTARTÓ SZOFTVER FIREBIRD ADATBÁZIS ALKALMAZÁSÁVAL

Adatbázisok I. Az SQL nyelv

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

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

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

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

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

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

Programozás és adatbázis kezelés PHP ben

SQL/PSM kurzorok rész

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

Spatial a gyakorlatban

SQL bevezetés. Select-From-Where záradékok Több relációt tartalmazó lekérdezések Alkérdések

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

Egészítsük ki a Drupal-t. Drupal modul fejlesztés

Adatbázis. AMP! (Apache + MySql + PHP) XAMPP, LAMP, MAMP, WAMP et cetera

Adatbáziskezelés php-ben MySQL adatbáziskezelı rendszert használva

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

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

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

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

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

Átírás:

Adatbázisban tárolt kollekciók Dinamikus tömb és beágyazott tábla lehet CREATE TYPE t_beagy IS TABLE OF NUMBER; CREATE TYPE t_dint IS VARRAY(5) OF NUMBER; CREATE TABLE koll_tab ( azon NUMBER PRIMARY KEY, szamok t_beagy, lotto t_dint ) NESTED TABLE szamok STORE AS koll_szamok; INSERT INTO koll_tab VALUES (1, t_beagy(), t_dint(23, 47, 52, 53, 88));

TABLE operátor TABLE(kollekciókifejezés) A kollekció elemeihez, mint egy tábla soraihoz férünk hozzá (kibontás, unnest) SELECT * FROM TABLE(SELECT lotto FROM koll_tab);

insert into table(select szamok from koll_tab where azon=1) values (5); update table(select szamok from koll_tab where azon=1) set column_value=3 where column_value=5; delete table(select szamok from koll_tab where azon=1) where column_value=3;

CAST függvény CAST({kifejezés (alkérdés) MULTISET(alkérdés)} AS típusnév) Típuskényszerítés kifejezést vagy egy értéket szolgáltató alkérdést adott típusúvá vagy MULTISET esetén akárhány értéket szolgáltató alkérdést kollekció típusúvá alakít UPDATE koll_tab SET szamok=cast(lotto AS t_beagy) WHERE azon=1;

CREATE TYPE T_Dinamikus IS VARRAY(10) OF VARCHAR2(100); CREATE TYPE T_Beagyazott IS TABLE OF varchar2(100); DECLARE v_dinamikus T_Dinamikus; v_beagyazott T_Beagyazott; BEGIN SELECT CAST(v_Beagyazott AS T_Dinamikus) INTO v_dinamikus FROM dual; SELECT CAST(MULTISET(SELECT cim FROM konyv ORDER BY UPPER(cim)) END; INTO v_beagyazott FROM dual; AS T_Beagyazott)

create type t_nt_number_5 is table of number(5); create table nt_elemek (nev varchar2(50),o_nt t_nt_number_5) nested table o_nt store as nt_elemek_nt; insert into nt_elemek values ('elso',cast(multiset(select azon from orszagok where foldresz='európa') as t_nt_number_5))

Kollekciók Beágyazott tábla SQL logikai operátorok (bt1, bt2 beágyazott táblák): bt1=bt2, bt1<>bt2: két beágyazott tábla megegyezik, ha ugyanaz a típusuk és számosságuk, valamint ugyanazon multihalmazt adják meg bt1 IN bt_lista: bt1 benne van-e bt_listában? bt1 IS [NOT] A SET: bt1 elemei között van-e ismétlődés? bt1 IS [NOT] EMPTY: bt1 üres-e? e MEMBER [OF] bt1: az e elem benne van-e bt1-ben? bt1 SUBMULTISET [OF] bt2: bt1 részmultihalmaza-e bt2-nek?

declare type t_nt is table of number(5); nt1 t_nt; nt2 t_nt; begin nt1:=t_nt(1,2,5); if nt1 is a set then dbms_output.put_line('halmaz'); else dbms_output.put_line('nem halmaz'); end if; nt2:=t_nt(); if nt2 is empty then dbms_output.put_line('üres'); else dbms_output.put_line('nem üres'); end if; nt2:=t_nt(1,1,1,2,2,5,5,3); if nt1 submultiset of nt2 then dbms_output.put_line('részhalmaza'); else dbms_output.put_line('nem részhalmaza'); end if; end;

select nev from nt_elemek n where o_nt is a set; select nev from nt_elemek n where o_nt is empty; select nev from nt_elemek n where 1 member of o_nt; select nev from nt_elemek n where t_nt_number_5(1,2,3) submultiset of o_nt; select nev from nt_elemek n where t_nt_number_5(1,2,3,5,6,7) =o_nt;

Kollekciók Beágyazott tábla SQL kollekció operátorok (bt1, bt2 beágyazott táblák): bt1 MULTISET EXCEPT [{ALL DISTINCT}] bt2: bt1 és bt2 közötti multihalmaz-műveletek, különbségképzés bt1 MULTISET INTERSECT [{ALL DISTINCT}] bt2: bt1 és bt2 közötti multihalmaz-műveletek, metszet bt1 MULTISET UNION [{ALL DISTINCT}] bt2: bt1 és bt2 közötti multihalmaz-műveletek, unió

Kollekciók Beágyazott tábla PLSQL-ben is használható SQL függvények: CARDINALITY(bt1): bt1 elemszámát adja meg (itt bt1 dinamikus tömb is lehet!) SET(bt1): eredménye egy beágyazott tábla, amelyet bt1- ből az ismétlődések elhagyásával kapunk

declare type t_nt is table of number(5); nt1 t_nt; nt2 t_nt; nt3 t_nt; procedure bejar(p_nt t_nt) is i pls_integer; begin i:=p_nt.first; while i is not null loop dbms_output.put(p_nt(i)); i:=p_nt.next(i); end loop; dbms_output.put_line(null); end;

begin nt1:=t_nt(1,2,3,3,4); nt2:=t_nt(1,3,3,3,5,5,7); nt3:=nt2 multiset except nt1; bejar(nt3); nt3:=nt2 multiset except all nt1; bejar(nt3); nt3:=nt2 multiset except distinct nt1; bejar(nt3); nt3:=nt2 multiset intersect nt1; bejar(nt3); nt3:=nt2 multiset intersect all nt1; bejar(nt3); nt3:=nt2 multiset intersect distinct nt1; bejar(nt3); nt3:=nt2 multiset union nt1; bejar(nt3); nt3:=nt2 multiset union all nt1; bejar(nt3); nt3:=nt2 multiset union distinct nt1; bejar(nt3); nt3:=set(nt2);bejar(nt3); dbms_output.put_line('nt2 elemeinek száma:' cardinality(nt2)); end;

insert into nt_elemek values ('multiset_elso', t_nt_number_5(2,2,3,3,5,6)); insert into nt_elemek values ('multiset_masodik', t_nt_number_5(1,1,2,2,2,3,3,7)); insert into nt_elemek values ('multiset_harmadik',(select o_nt from nt_elemek where nev='multiset_elso') multiset union distinct (select o_nt from nt_elemek where nev='multiset_masodik')); select cardinality(o_nt) from nt_elemek n where n.nev= multiset_elso ; select set(o_nt) from nt_elemek n where n.nev='multiset_elso'

CREATE OR REPLACE TYPE list IS TABLE OF NUMBER; CREATE OR REPLACE FUNCTION format_list(set_in LIST) RETURN VARCHAR2 IS retval VARCHAR2(2000); BEGIN IF set_in IS NULL THEN dbms_output.put_line('result: <Null>'); ELSIF set_in.count = 0 THEN dbms_output.put_line('result: <Empty>'); ELSE FOR i IN set_in.first..set_in.last LOOP IF i = set_in.first THEN IF set_in.count = 1 THEN retval := '(' set_in(i) ')'; ELSE retval := '(' set_in(i); END IF; ELSIF i <> set_in.last THEN retval := retval ', ' set_in(i); ELSE retval := retval ', ' set_in(i) ')'; END IF; END LOOP; END IF; RETURN retval; END format_list;

DECLARE a LIST := list(1,2,3,4); b LIST := list(4,5,6,7); BEGIN dbms_output.put_line(format_list(a MULTISET EXCEPT b)); END; (1, 2, 3) A PLSQL eljárás sikeresen befejeződött. DECLARE a LIST := list(1,2,3,4); b LIST := list(4,5,6,7); BEGIN dbms_output.put_line(format_list(a MULTISET INTERSECT b)); END; (4) A PLSQL eljárás sikeresen befejeződött.

DECLARE a LIST := list(1,2,3,4); b LIST := list(4,5,6,7); BEGIN dbms_output.put_line(format_list(a MULTISET UNION b)); END; (1, 2, 3, 4, 4, 5, 6, 7) A PLSQL eljárás sikeresen befejeződött. DECLARE a LIST := list(1,2,3,4); b LIST := list(4,5,6,7); BEGIN dbms_output.put_line(format_list(a MULTISET UNION DISTINCT b)); END; (1, 2, 3, 4, 5, 6, 7) A PLSQL eljárás sikeresen befejeződött.

DECLARE a LIST := list(1,2,3,4); b LIST := list(4,5,6,7); BEGIN dbms_output.put_line(format_list(set(a MULTISET UNION b))); END; (1, 2, 3, 4, 5, 6, 7) A PLSQL eljárás sikeresen befejeződött. DECLARE a LIST := list(1,2,3,3,4,4,5,6,6,7); BEGIN dbms_output.put_line(format_list(set(a))); END; (1, 2, 3, 4, 5, 6, 7) A PLSQL eljárás sikeresen befejeződött.

A PLSQL eljárás sikeresen befejeződött. DECLARE a LIST := list(1,2,3,3,4,4,5,6,6,7); n PLS_INTEGER := 1; BEGIN IF n MEMBER OF a THEN dbms_output.put_line('benne van!'); ELSE dbms_output.put_line('nincs benne!'); END IF; END; Benne van! A PLSQL eljárás sikeresen befejeződött. DECLARE a LIST := list(1,2,3,3,4,4,5,6,6,7); BEGIN dbms_output.put_line(cardinality(a)); dbms_output.put_line(cardinality(set(a))); END; 10 7

Kollekciók Beágyazott tábla PLSQL-ben nem használható SQL függvények: COLLECT(oszlop): a kiválasztott sorokhoz tartozó oszlopértékekből multihalmazt csinál (CAST szükséges!) POWERMULTISET(multihz): előálítja a legfeljebb 32 elemű multihz összes nemüres részmultihalmazának halmazát POWERMULTISET_BY_CARDINALITY(multihz, db): előálítja a legfeljebb 32 elemű multihalmaz összes db elemszámú részmultihalmazának halmazát (db>0)

create type t_nt_nt_number_5 as table of t_nt_number_5; select cast(powermultiset(t_nt_number_5(1,2,3,5)) as t_nt_nt_number_5) from dual; select * from table(cast(powermultiset( t_nt_number_5(1,2,3,5)) as t_nt_nt_number_5)); select cast(powermultiset_by_cardinality(t_nt_number_5(1,2,3,5),2) as t_nt_nt_number_5) from dual; select * from table(cast(powermultiset_by_cardinality( t_nt_number_5(1,2,3,5),2) as t_nt_nt_number_5)); select cast(collect(azon) as t_nt_number_5) from orszagok where foldresz='európa'