Delphi - Adattárolás beágyazott tábla típusú oszlopokban

Oracle adatbázis-kezelés 10. rész

forráskód letöltése
Legutóbbi két cikkünkben megismerhettük, hogyan lehet adatokat tárolni tömb típussal rendelkező oszlopokban. Segítségével adatok egydimenziós listáját lehetetett létrehozni és tárolni egy adott tábla oszlopban. A PL/SQL azonban támogatja az adatok kétdimenziós egységekben való tárolását is. Sorozatunknak ebben a számában megismerkedhetünk a beágyazott táblákkal, melyek megsokszorozzák adatbázisunk adattároló képességét.
A példaprogram használata előtt létre kell hozni egy SOUSER sémát az Oracle adatbázis-rendszerünkben, és fel kell ruházni DBA jogosultsággal. A sémába bejelentkezve le kell viszont futtatni a mellékelt Oracle10.sql nevű parancsállományt a hivatkozott további objektumok létrehozásához.
A beágyazott tábla lehetősége biztosítja a tábla a táblában funkcionalitást. Szigorúan relációs elven működő adatbázis-kezelő rendszerekben adatok ilyetén tárolása csak két táblával volna lehetséges, azonban az Oracle-rendszer feloldja ezt az adattárolási korlátot.
A beágyazott tábla rekordok olyan együttese, melyek egy másik (befogadó)tábla soraiban jelennek meg. A beágyazott tábla speciális típussal rendelkezik, melyet mi deklarálhatunk. A típus konstruktorát használva vihetünk be elemeket a beágyazott táblába. Ebben a cikkben a beágyazott tábla elemeinek lekérdezésével foglalkozunk, melyet egy speciális formával rendelkező SELECT utasítással teszünk meg.
A mellékelt parancsállományt lefuttatva hozhatjuk létre a beágyazott tábla típusának deklarációját, a beágyazott táblát, valamint a befogadó táblát. A példában egy olyan táblát hozunk létre, melynek ID-vel azonosított rekordjaiban, a PS oszlopban tároljuk a beágyazott táblát, mely CODE azonosítóval rendelkező típusneveket tartalmaz.
A típus deklarációja a következőképpen fest:
CREATE OR REPLACE TYPE PLANE_INFO AS OBJECT
(
  CODE NUMBER(4),
  PLANE_TYPE VARCHAR2(20)
);
Látható, hogy egy objektumot hoztunk létre (tágabban értelmezve egy osztályt), mely két tag objektumot tartalmaz.
A deklarációt az Oracle DBA Studio segédprogramjában az Object Type csomópont alatt találjuk a SOUSER séma elemeit fellapozva. A program a „%winroot%:\oracle\ora81\bin\oemapp.bat dbastudio” helyről és paraméterezéssel indítható.
Létrehozunk egy ilyen típussal rendelkező változót, mely a PLANES nevet viseli:
CREATE TYPE PLANES AS TABLE OF PLANE_INFO;
Ez is megtalálható a DBA Studio Table Type csomópontban, a SOUSER sémában.
Végül létrehozzuk a fizikai táblát, melynek ’PS’ nevű oszlopa lesz beágyazott tábla típusú:
CREATE TABLE AIRPLANES
(
  ID NUMBER(2),
  PS PLANES
)
NESTED TABLE PS STORE AS PLANES_TABLE;
A példaalkalmazás Form-ján két TDBGrid kontrolban jelenítjük meg a fizikai tábla, valamint az adott sorban megtalálható beágyazott tábla adatait. A felső táblázat egy sorának elemeit úgy jeleníthetjük meg az alsó táblában, hogy a ComboBox kontrolban kiválasztjuk a kívánt ID értéket, majd a ’Lekérdezés’ feliratú gombra kattintunk. Amennyiben egy CODE értéket (mellyel a beágyazott tábla rekordjait azonosítjuk) is megadunk a TextBox kontrolban, és ez egy létező érték a beágyazott táblában, akkor a megjelenő adathalmazt szűkíthetjük.
Ahhoz, hogy lekérdezéseket hajtsunk végre a fizikai táblában, a SELECT utasítást sajátos módon kell fölépítenünk. A PL/SQL által támogatott SELECT utasítás a következőképpen adható meg, amennyiben – mint példánkban – a fizikai tábla ID és PS oszlopokkal, a beágyazott tábla (PS oszlopban) CODE és PLANE_TYPE oszlopokkal rendelkezik, és mi valamennyi rekord valamennyi értékére kíváncsiak vagyunk:
SELECT * FROM THE
(SELECT PS FROM AIRPLANE)
A THE kulcsszó alkalmazásával jelezzük a parancsértelmezőnek, hogy a zárójelben található lekérdezés oszlopa beágyazott tábla típussal rendelkezik.
Természetesen az ilyen típusú adatokat ki lehet nyerni rekordonként is. Ekkor meg kell adni a megfelelő szűkítő értelmű kulcsszavakat. Az ID = 10 azonosítóval rendelkező beágyazott tábla összes rekordját a következő SQL-utasítással kaphatjuk meg:
SELECT * FROM THE
(SELECT PS
 FROM AIRPLANE
 WHERE ID = 10)
Ha csak egy bizonyos CODE (például CODE = 1001) értékkel rendelkező beágyazott tábla rekordot akarunk megjeleníteni, akkor a következő utasítást adhatjuk meg:
SELECT * FROM THE
(SELECT PS
 FROM AIRPLANE
 WHERE ID = 10)
WHERE CODE = 1001
A mellékelt példában a fent megadott két utasítással jelenítjük meg az adott rekord beágyazott táblájában megtalálható sorokat, valamint ezek valamilyen szempont szerinti részhalmazát.

Oracle adatbázis-kezelés cikksorozat