HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Szekvenciák használata


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

Példaprogram letöltése

4298 bájt

A cikksorozat mai számában bemutatjuk, hogy miként hozhatunk létre szekvenciákat (SEQUENCE) az adott sémában. A mellékelt példában készített szekvencia felhasználásával lehetővé tesszük, hogy az adott adattáblába beszúrásra kerülő rekordok mindig eggyel magasabb indexszel rendelkezzenek, vagyis az egyik oszlop értékei mintegy automatikusan inkrementálódjanak.

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 Oracle13.sql nevű parancsállományt a hivatkozott további objektumok létrehozásához.
Szekvenciák
Az Oracle-rendszerben létrehozott adatbázisok tábláinak is rendelkezniük kell egy ID oszloppal, mely egyértelműen azonosítja a rekordokat, így elsődleges kulcsot képez a táblában. Az Oracle-ben van egy igen hasznos technika arra, hogy ezeknek az oszlopoknak az értékeit automatikusan növeljük anélkül, hogy a felhasználótól egy konkrét értéket kérnénk be. Ekkor minden egyes rekord beszúrásakor az ID oszlop értéke eggyel nagyobb lesz az előző rekord esetén adott értéknél. A mellékelt példában csak az INSERT műveletre mutatunk példát, azonban ennek ismeretében a DELETE művelet után elvégzendő procedúra megalkotható.
A szekvenciák generálása az, amelynek segítségével a fenti művelet egy trigger-rel kiegészítve megvalósítható. A mellékelt Oracle13.sql parancsállomány lefuttatása után ezen objektumok a SOUSER sémába bekerülnek, csupán használnunk kell azokat.
A szekvenciákat objektumként kezeli a rendszer, a DBA Studio segédalkalmazásban is megtekinthetjük jellemzőiket. Jellemzőjük, hogy kezdő értékkel, végértékkel rendelkeznek, valamint meg kell adni, hogy mekkora legyen a „lépésköz” az egyes ciklusokban. Szintaxisa a következő:
CREATE SEQUENCE [séma.]szekvencia_név opció(k)
Az opciók lehetek:
  • INCREMENT BY (egész): növelés mértéke
  • START WITH (egész): kezdőérték
  • MAXVALUE | NOMAXVALUE (egész): maximum érték
  • MINVALUE | NOMINVALUE (egész): minimum érték
  • CYCLE | NOCYCLE: ciklusos legyen a szekvencia
A létrehozott szekvenciában akkor kell megadni az opciókat, ha az alapértelmezéstől eltérő viselkedésre szeretnénk kényszeríteni azt. Példánkban a MYSEQ szekvenciát a következőképpen hoztuk létre:
CREATE SEQUENCE MYSEQ;
A szekvencia 1-től indul, maximális értéke nincs, hiszen a rekordok száma végtelen lehet. Amennyiben az alapértelmezéstől eltérő szekvenciát akarunk létrehozni, akkor a következőképpen kell megadnunk a szükséges opciókat:
create sequence seq1
start with 10
increment 10
maxvalue 150
cycle;
A szekvencia ekkor 10-től indul, 150-ig halad, és 10-es léptékben. A végéhez érve kezdi a ciklus elölről.
AutoIncrement oszlop
A példában úgy járunk el, hogy minden egyes rekordbeszúrás előtt kinyerjük a szekvencia következő értékét, melyet ezt követően az ID oszlop értékeként adunk meg. Ennek legjobb módja az, amikor ezt a műveletet egy BEFORE INDEX trigger-re bízzuk. A mellékelt parancsállományban a következő trigger végzi el ezt a műveletet. Ennek első sorában megadjuk, hogy minden sorra hajtódjon végre:
CREATE TRIGGER AUTOINC BEFORE INSERT ON Table1
FOR EACH ROW
Megadjuk azt a feltételt, melyre beindul a trigger végrehajtása. A feltétel az, hogy az INSERT művelet megadásakor az ID oszlop értékeként a NULL értéket kell megadnunk:
WHEN (NEW.ID IS NULL)
A trigger törzsében megadjuk, hogy a szekvencia következő értéke képzi az ID oszlop aktuális értékét:
BEGIN
 SELECT MYSEQ.nextval INTO :NEW.ID FROM dual;
END;
Ennek eredményeképpen az alkalmazásban az INSERT utasítás a következőképpen fest:
INSERT INTO TABLE1 VALUES(NULL,<adat>);

Cikksorozat

#IDKategóriaCikk címeSorozat
2535C#Oracle adatbázis-elérés alapjai1. rész
2546C#SQL utasítások végrehajtása2. rész
2557C#Tárolt eljárások és függvények fejlesztése3. rész
2565C#Csomagok fejlesztése4. rész
2573C#Adatbázis triggerek fejlesztése5. rész
2581C#Kivételek kezelése PL/SQL-ben6. rész
3276C#Kurzorok deklarálása PL/SQL-ben7. rész
3297C#Tömb adattípus létrehozása és kezelése PL/SQL-ben8. rész
3326C#Adatbevitel tömb-adattípussal rendelkező oszlopokba9. rész
3357C#Adattárolás beágyazott tábla-típusú oszlopokban10. rész
3388C#Adatok beszúrása beágyazott táblákba11. rész
3418C#Index létrehozása PL/SQL-ben12. rész
3444C#Szekvenciák használata13. rész
3488C#Adatok betöltése állományokból14. rész
1765DelphiOracle adatbázis-elérés alapjai15. rész
1774DelphiSQL utasítások végrehajtása16. rész
1784DelphiTárolt eljárások és függvények fejlesztése17. rész
1794DelphiCsomagok fejlesztése18. rész
1803DelphiAdatbázis triggerek fejlesztése19. rész
1815DelphiKivételek kezelése PL/SQL-ben20. rész
3256DelphiKurzorok deklarálása PL/SQL-ben21. rész
3287DelphiTömb adattípus létrehozása és kezelése PL/SQL-ben22. rész
3318DelphiAdatbevitel tömb-adattípussal rendelkező oszlopokba23. rész
3348DelphiAdattárolás beágyazott tábla típusú oszlopokban24. rész
3377DelphiAdatok beszúrása beágyazott táblákba25. rész
3408DelphiIndex létrehozása PL/SQL-ben26. rész
3436DelphiSzekvenciák használata27. rész
3467DelphiAdatok betöltése állományokból28. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 110. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |