Adatbázisok szerver oldali programozása Előadás, 2006.03.03.
Ez az oldal a korábbi SCH wikiről lett áthozva.
Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!
Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.
<style> code.pre { white-space: pre; display:block; mergin-top: 2px; margin-bottom: 2px;} li { line-height: 18px; } </style>
Adattípusok
Típusok osztályozása
- változó / konstans / oszlop / összetett
- skalár / összetett
- beépitett / programozó által definiált
Skalár típusok
- =NUMBER(p,s)=: fixpontos szám. p=hossz, s=tizedesjegyek száma. Ha s=0, egészet tárol.
- =CHAR(hossz [CHAR|BYTE])=: fix hosszú karakterláncot tárol. A hossz alapérteke 1, legfeljebb 32767 lehet. Táblában maximum 2000 hosszú karakterlánc tárolható. Ha rövidebb karakterláncot szúrunk be, a maradék helyeket automatikusan feltölti szóközökkel, ha hosszabbat, =VALUE_ERROR= exceptiont kapunk. A =CHAR= módositó segítségével unicode karakterek tárolhatók, BYTE esetén 1 karakter 1 byte hosszú.
- =VARCHAR2(hossz [CHAR|BYTE])=: változo hosszú karakterlánc. Ugyanazok a korlátozások érvényesek rá, mint a
CHAR
-ra. Ha a hossz paraméter legfeljebb 2000, akkor a memóriában a maximális hosszt foglalja le, különben csak a string aktuális hosszát.DECLARE
a VARCHAR2(1500);
b VARCHAR(3000);
BEGIN
a:='abcde'; -- 1500 byte
b:='abcde'; -- 5 byte
END;
- =NCHAR2=, =NVARCHAR2=: ugyanazt tudja, mint az előző két típus, csak unicode karaktereket tárol.
- =LONG=: >2000 hosszú karaktersorozatot is tud tárolni
- =DATE=: dátumot és időt tárol
- =BOOLEAN=: értékkészlete: ={TRUE, FALSE, NULL}=. Nem lehet oszlop típusa.
- =BINARY INTEGER=: -2^31+1 és 2^31-1 közötti egész
- =PLS_INTEGER=: ugyanez, csak hardver aritmetikát használ
- =LOB=: Large Object, legfeljebb 4 GB méretű. Típusai:
- =BFILE=: bináris file, az operációs rendszer filerendszerében tárolódik. Az adatbázis csak hivatkozást tartalmaz. Nem backupolódik automatikusan az adatbázissal.
- =BLOB=: adatbázison belül tárolódik, backupolódik.
- =CLOB=: mint a =BLOB=, csak karaktereket tartalmaz.
Altípusok
Altípus = alaptípus + megszorítás
- =BINARY_INTEGER= altípusok
- =NATURAL= ∈ {0..2^31-1, NULL}
- =NATURALN= ∈ {0..2^31-1}
- =POSITIVE= ∈ {1..2^31-1, NULL}
- =POSITIVEN= ∈ {1..2^31-1}
- =SIGNTYPE= ∈ {-1, 0, 1}
- =NUMBER= altípusok
- =DEC=, =DECIMAL=, =NUMERIC=: fixpontos
- =FLOAT=, =DOUBLE PRECISION=, =REAL=: lebegőpontos
- =INTEGER=, =INT=, =SMALLINT=: egész
- =VARCHAR2= altípusok
- =STRING=, =VARCHAR= (csak alias)
Programozó által definiált típusok
Előre definiált típusok + megkötések.
SUBTYPE típusnév IS alaptípus [(megkötés)] [NOT NULL]
Csak a hosszra adható megkötés, értékkészletre nem.
Összetett típusok
- Rekord
- Típus deklaráció: =TYPE típusnév IS RECORD (mezőnév típus, mezőnév típus, ...);=
=típus=:
típusnév [NOT NULL] [{:= | DEFAULT} érték];
- Változó deklaráció: =rekord_változó típusnév=
- Hivatkozás a rekord mezőjére: =rekord_változó.mezőnév=
- Értékadás:
:=
, ha a két rekord azonos típusú,
=SELECT ... INTO rekord= vagy =FETCH ... INTO rekord=
- Rekord az adatbázis sémából
- =rekord_változó1 tábla%ROWTYPE;=
=rekord_változó2 tábla%ROWTYPE;=
A két változó nem lesz azonos típusú, még akkor sem, ha ugyanannak a táblának a sorát reprezentálják.
- Tömb:
- Az elemek azonos típusúak
- Az elemek sorban követik egymást, a tömb nem tartalmazhat lyukakat
- Az elemek indexelése 1-től kezdődik
- A minimális méret 1, az =EXTEND= metódussal növelhető, de nem haladhatja meg a deklarációkor megadott maximumot. Az új elemek a tömb végére szúrhatók be.
- Oszlop típusa is lehet
- Inicializálás előtt NULL értékű
- Deklaráció: =TYPE tömbtípus IS VARRAY(5) OF INT;=
- Konstruktor:
tömb:=tömbtípus(elem, elem, ...);
- Új elem beszúrása: =tömb.EXTEND=; majd
tömb(tömb.LAST):=érték;
- Címzés: =tömbnév(index)=
- Nested table — különbségek a sima tömbhöz képest
- Az elemszám nem korlátos
- Ritka, középről is törölhetők elemek
- Deklaráció: =TYPE típusnév IS TABLE OF elem_típus [NOT NULL];=
- Index-by table = hash tábla
- Nem lehet táblában tárolni
- Nem kell inicializálni, kezdetben üres
- Szerkezeténél fogva ritka
- Az index negatív is lehet, az Oracle 10g-től kezdve pedig =VARCHAR2= is.
- Deklaráció: =TYPE típusnév IS TABLE OF elem_típus INDEX BY index_típus;=
Példa tömb használatára:
DECLARE
TYPE tombtipus IS VARRAY(5) OF INT;
tomb tombtipus;
BEGIN
tomb:=tombtipus(1,4,9);
tomb.EXTEND;
tomb(4):=16;
FOR i IN 1..tomb.LAST LOOP
DBMS_OUTPUT.PUT_LINE(tomb(i));
END LOOP;
END;
Metódusok
=változónév.metódusnév[(paraméterek)]= formában hívhatók
- =EXISTS(n)=: n. indexen van-e elem. Ha túlcímzünk a tömbön,
FALSE
-szal tér vissza. - =COUNT=: a kollekció elemszáma. Nested table-nél értéke különbözhet a
LAST
-tól. - =LIMIT=: a kollekció maximális elemszáma. Nested table-nél NULL.
- =FIRST=, =LAST=: első illetve utolsó elem indexe. Üres kollekció esetén NULL.
- =PRIOR(n)=, =NEXT(n)=: n-et megelőző illetve rákövetkező kitöltött elem indexe. =VARRAY= esetén n-1 illetve n+1, index-by table-re nincs értelmezve. Ha nincs előző vagy következő elem,
NULL
-lal tér vissza. - =EXTEND=, =ENTEND(n)=, =EXTEND(n,i)=: bővíti a
VARRAY
-t vagy a nested table-t 1 dbNULL
-lal, n dbNULL
-lal, illetve n példánnyal az i indexű elemből. Index-by table-re nem értelmezett. - =TRIM=, =TRIM(n)=: törli a =VARRAY= vagy a nested table utolsó 1 illetve n elemét. Index-by table-re nem értelmezett.
- =DELETE=, =DELETE(n)=, =DELETE(n,m)=: törli az összes, az n. illetve a [n...m] intervallum összes elemét az index-by vagy nested table-ből.
-- Peti - 2006.03.06.