Mint minden adatbázisokkal kapcsolatos feladathoz, így az Oracle adatbázis-kezelő esetében is ismernünk kell, hogy milyen adattípusokat támogat a rendszer. Ebben a cikkben bemutatjuk az Oracle főbb adattípusait, felhasználásuk módját. A típusok megismerése után végignézzük, hogyan végezhetünk el alapvető, adatmanipulációs SQL utasításokat programjainkban.

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 futtatni a mellékelt Oracle02.sql script-et a megfelelő objektum létrehozásához.
PL/SQL
Előző cikkünkben csak említés szintjén találkozhattunk a PL/SQL kifejezéssel, most azonban bővebb magyarázattal szolgálunk. Ahhoz ugyanis, hogy komolyan munkához láthassunk az Oracle rendszerben, meg kell ismernünk a rendszer belső nyelvét. A PL/SQL, mint belső nyelv lehetővé teszi, hogy blokk struktúrájú procedurális kódrészletekben adatmanipulációs és lekérdező utasításokat hajtsunk végre. Hatékonyan támogatja tranzakció-kezelési feladatok megoldását.
Struktúrája a következő:
Ezen jellemzője révén a PL/SQL–ben a programok logikai részekre oszlanak, melyekhez utasítások és az adott blokkban használható (lokális) változók tartoznak. Ezen túlmenően a blokk lehetővé teszi a blokkon belül bekövetkezett hibaállapotok (kivételek) kezelését.
Használhatunk feltételes utasításokat, hurkokat és elágazásokat a program lefolyásának vezérlésére, és annak eldöntésére, hogy mikor és hogyan kell SQL vagy más utasításokat végrehajtani. Az Oracle eszközei az utasítások együttesét így csoportosan értelmezik, és nem kell minden parancsot külön trigger lépésekbe tennünk, illetve nem kell minden SQL utasítást külső programnyelvbe ágyaznunk.
A PL/SQL központi szerepet játszik az Oracle szerverben a tárolt eljárások, triggerek és csomagok létrehozásakor. Változói és adattípusai megfelelnek az SQL adattípusainak.
A PL/SQL nem önálló Oracle termék, hanem egy programnyelv és a hozzá tartozó fordító és futtató rendszer, melyet az Oracle szerver és bizonyos Oracle eszközök alkalmaznak. A PL/SQL blokkokat az ún. „PL/SQL gépek” hajtják végre, melyek részei az Oracle szervernek. A PL/SQL támogatja az alapvető SQL utasításokat.
Támogatott adattípusok
A következőkben megvizsgáljuk az Oracle alapvető adattípusait, valamint megadjuk azok megfelelőit az MS SQL Server rendszerben. Használni később csak azt a néhány adattípust fogjuk, amelyet mind a PL/SQL nyelv, mind pedig a Delphi rendszere támogat.
Az Oracle adattípus-listája, összevetve az SQL Server jól megszokott listájával nem tűnik hosszúnak, azonban látni fogjuk, hogy egy-egy adattípus megfelel jó néhány SQL Serveres típus együttesének, mintegy kiváltva azt. Ez jól tükrözi, hogy az Oracle cég elsősorban nagygépes környezetre fókuszálta rendszerét. Az alábbi típuslista tájékoztató jellegű, ismertetése után felsoroljuk azt a néhány típust, melynek megvan a PL/SQL-oldali támogatása is.
Oracle adattípus |
Definíció |
CHAR |
Fix hosszúságú karakteres adattípus, minimális mérete 1, maximális mérete 2000 karakter. |
DATE |
Dátum adattípus. Lehetséges értékei: ie. 4712-től isz. 4712-ig. |
DECIMAL |
Megegyezik a NUMBER típussal. |
FLOAT |
Megegyezik a NUMBER típussal. |
INTEGER |
Megegyezik a NUMBER típussal. |
LONG |
Számértékek tárolása legfeljebb 2GB méretben. |
LONG RAW |
Nyers adatok tárolására. Megegyezik a LONG típussal. |
LONG VARCHAR |
Megegyezik a LONG típussal. |
NUMBER(<jegyek>,<tizedesek>) |
Számértékek tárolására szolgál. Tizedesek megadása nélkül a numerikus értékeket egész számmá kerekíti. Max. értéke: 9.99..E125. |
SMALLINT |
Megegyezik a NUMBER típussal. |
RAW |
Nyers bináris adatok tárolása legfeljebb 255 bájt méretben. |
VARCHAR2 |
Legfeljebb 4000 bájtos karakterlánc tárolására. |
VARCHAR |
Megegyezik a VARCHAR2 típussal. |
BLOB |
Nagyméretű bináris objektumok tárolása legfeljebb 4GB méretben. |
COB |
Nagyméretű karakteres objektumok tárolása legfeljebb 4GB méretben. |
BFILE |
Mutató egy bináris állományra. |
Lássunk néhány megfeleltetést a MS SQL Server adattípusaival.
SQL Server 2000 adattípusai |
Oracle adattípusai |
bigint |
NUMBER |
binary |
LONG RAW NOT NULL |
bit |
NUMBER(1,0) |
char |
VARCHAR2(900) NOT NULL |
datetime |
DATE |
decimal |
NUMBER(255,3) NOT NULL |
float |
FLOAT NOT NULL |
image |
LONG RAW |
int |
NUMBER(255,3) NOT NULL |
money |
NUMBER(255,3) NOT NULL |
nchar |
VARCHAR2(2000) NOT NULL |
ntext |
LONG |
numeric |
NUMBER(255,3) NOT NULL |
nvarchar |
VARCHAR2(2000) NOT NULL |
real |
FLOAT NOT NULL |
smallint |
NUMBER(255,3) NOT NULL |
smalldatetime |
DATE NOT NULL |
smallmoney |
NUMBER(255,3) NOT NULL |
sql_variant |
LONG |
sysname |
CHAR(255) |
text |
LONG |
timestamp |
RAW(255) |
tinyint |
NUMBER(255,3) NOT NULL |
A lista tovább szűkül, ha figyelembe vesszük, hogy a Delphi rendszerben milyen módon érhetjük el Oracle adatbázisunkat. Az adatbázis az ADO (ActiveX Data Objects) provider-ét használja, melyet az ADOdb egység reprezentál. Ennek megfelelően a támogatott típusok: NUMBER, CHAR, VARCHAR, VARCHAR2, DATE.
Gyakorlati felhasználás
A mellékelt példában az Oracle02.sql script lefuttatása után létrejön egy Table2 adattábla. A táblába a Form-ra felhelyezett Edit kontrolokon keresztül lehet új rekordokat beszúrni, meglévő rekordokat módosítani, valamint törölni. A művelet egy ComboBox kontrolban válaszható ki.
Az adatbázis eléréséhez felhasználtunk egy TADOConnection típusú komponenst, melynek ConnectionString property-jét kapcsolódáskor töltjük fel. A szerver neve természetesen az a név, melyen megtalálható a SOUSER felhasználó. A program indításakor a „Kapcsolódás” feliratú gomb lenyomásával lehet kapcsolatot teremteni az adatbázissal. Az adatokat egy TADODataSet típusú komponensbe gyűjtjük. A Form-ra helyezett DBGrid kontrolban azonnal követhetőek az adattáblán végzett módosítások. A kapcsolat Connectionstring property-je:
DM.oraConnect.ConnectionString := 'Provider=MSDAORA.1;Password=souser;User ID=souser;Data Source=soserver';
Az adatelérési komponensek közé felvettünk egy TADOCommand típusú komponenst, melynek CommandText property-je tartalmazza az adott utasítás karakterláncát. A property értéke rekordok beszúrásakor a következő:
DM.oraCommand.CommandText := 'INSERT INTO Table2 VALUES (' + id.Text + ',''' + name.Text + ''',''' + desc.Text + ''',TO_DATE(''' + s + ''',''YYYY.MM.DD.''))';
Rekordok módosításakor:
DM.oraCommand.CommandText := 'UPDATE Table2 SET NAME = ''' + name.Text + ''',DESCRIPTION = ''' + desc.Text + ''',REG_DATE = TO_DATE(''' + s + ''',''YYYY.MM.DD.'')';
DM.oraCommand.CommandText := DM.oraCommand.CommandText + ' WHERE (ID = ' + id.Text + ')';
Törléskor pedig:
DM.oraCommand.CommandText := 'DELETE FROM Table2 WHERE ID = ' + id.Text;
A DATE típusú oszlop adatainak bevitele és módosítása némi magyarázatot igényelhet. Az ilyen típusú adatok megadásakor használnunk kell egy TO_DATE nevű beépített függvényt, melynek első paramétere tartalmazza a rögzítendő dátumot karakteresen, második paramétere pedig azt a karakterlánc-mintát, amilyen formátumban a dátumot megadtuk az első paraméterben. Bármilyen különbség illeszkedési-hibát okoz.
A dátum megadásakor azt a módot választottuk, hogy egy TDateTimePicker kontrolban választjuk ki a dátumot, melynek visszaadatott dátum-értékét karakterlánccá konvertáljuk, majd ezt adjuk meg a TO_DATE függvény első paramétereként. A függvény második paraméterét pedig ehhez a formátumhoz igazítjuk, mely most „YYYY.MM.DD.” lesz.
Oracle adatbázis-kezelés cikksorozat