C# - Adatok betöltése állományokból

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

forráskód letöltése
Az adatok bevitelére számtalan módszer létezik Oracle adatbázis-kezelő rendszerünkben. Cikksorozatunk mai számában ennek egyik módját ismerhetjük meg. A cikkben bemutatjuk az Oracle SQL Loader (SQLLDR.EXE) segédprogramját, melynek segítségével ún. kontrol-állományokban tárolt, szöveges információt importálhatunk a rendszerbe. Cikkünk végére kiderül, hogyan utasítható a betöltő-program különböző viselkedésekre.
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 Oracle14.sql nevű parancsállományt a hivatkozott további objektumok létrehozásához.
Az Oracle szerverünk segédprogramjai közt találjuk meg az SQL Loader (SQLLDR.EXE) programot, mely alapértelmezésben a %winroot%:\oracle\ora81\bin\sqlldr.exe elérési útvonalon található. A program segítségével .CTL kiterjesztésű szöveges állományokban tárolt adatokat tölthetünk be a megadott sémába.
A szöveges állomány elején kell megadnunk, hogy milyen DML műveletet kívánunk elvégezni az adott táblán, a megadott adatokkal. A művelet lezajlásának eredményét, valamint a betöltéskor előforduló hibákat egy megadott nevű naplóállományban nézhetjük meg. A naplóállományt nem kell explicit módon létrehoznunk, ezt megteszi helyettünk a segédprogram első alkalommal, amikor azt elindítjuk.
A mellékelt példa futtatása előtt lefuttatott Oracle14.sql parancsállomány létrehoz két adattáblát a SOUSER sémában. A példaprogram segítségével – mely elindítja a sqlldr.exe programot – két kontrol-állományban tárolt adathalmazt vihetünk be EMPLOYEES és DEPARTMENT tábláinkba.
Az SQLLDR.EXE segédprogram indításakor meg kell adnunk néhány parancssori argumentumot, melyek információt adnak a programnak a betöltendő adatokról. Általánosan a következőképen indítható a segédprogram:
sqlldr <felhasználónév/jelszó> control=<kontrolfájl neve> log=<naplófájl neve> bad=<hibás adatokat tartalmazó állomány neve>
A felhasználónév és jelszó a létrehozott SOUSER séma, és a hozzá tartozó jelszó. A CONTROL kulcsszó után kell megadnunk a kontrolállomány nevét, melyben elhelyeztük az adatokat, vagy ezekre egy hivatkozást. A LOG kulcsszó után kell megadnunk a naplófájl nevét, a BAD kulcsszó után pedig egy másik állománynevet, mely tartalmazza az adott process-ben valamilyen hiba miatt be nem olvasott rekordokat. Jelen példánkban a parancssor a következő:
sqlldr souser/souser control=dept_loader.ctl log=loading.log
Az EMPLOYEES táblába beszúrandó adatokat tartalmazó .CTL állomány a következő felépítésű. Kezdjük a fejléccel:
LOAD DATA
INFILE *
Amennyiben nem a .CTL állományban helyezzük el az adatokat, hanem egy külön állományban (.DAT), akkor annak nevét és elérési útvonalát a ’*’ karakter helyén kell feltüntetnünk.
A következő szakaszban kell megadnunk, hogy milyen műveletet végzünk el:
REPLACE
A REPLACE kulcsszó jelenti az UPDATE műveletet. Amennyiben az APPEND kulcsszót használjuk, akkor INSERT műveletet végzünk úgy, hogy lehetnek rekordok a táblában. Mindennemű kulcsszó elhagyásával az INSERT művelethez üres táblával kell rendelkezzünk.
Megadjuk tábla nevét:
INTO TABLE Employees
A beszúrandó adatok elhelyezésére vonatkozó instrukciókat:
(EMPNO   "myseq.nextval",
 EMPNAME POSITION(01:20), 
 HIRE_DATE "to_date(SYSDATE, 'YY-MM-DD HH24:MI')",
 SALARY POSITION(21:30),
 OWNER "USER"
)
Létrejött adatbázisunkban egy MYSEQ nevezetű SEQUENCE objektum, melynek segítségével az EMPNO oszlop elemei automatikusan adódnak a rekordokban.
A POSITION kulcsszóval adjuk meg, hogy a következőkben felsorolt adatokat hogyan kell értelmeznie a feldolgozónak. A 01:20 kifejezés azt jelenti, hogy a karakteres formában megjelenő adatokban milyen részlánc jelenti az egyes oszlopok értékeit.
Az adatok a BEGINDATA kulcsszó után következnek:
BEGINDATA
John Smith          120000 
Thomas Brown        150000
Fill Man            180000
Látható, hogy a három rekord elemei az EMPNAME és SALARY oszlopok értékeit tartalmazzák, a feldolgozó a meghatározott pozíciótól kezdve olvassa be az egyes értékeket.
A loading.log állományban megtalálhatjuk a művelet leírását, valamint, hogy milyen eredménnyel ért véget a beolvasás.
A DEPARTMENT adattábla kontrol állományának felépítése abban különbözik az EMPLOYEES tábla adatait tartalmazó állomány felépítésétől, hogy itt a rekordok elemei vessző (,) karakterrel vannak elválasztva, és ehhez speciális instrukciót kell adni a betöltő programnak:
...
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(dept     position (01:04) char(4),
 deptname position (06:27) char(20)
)
begindata
COSC,COMPUTER SCIENCE
ENGL,ENGLISH LITERATURE
MATH,MATHEMATICS
POLY,POLITICAL SCIENCE
A mellékelt program indulása után ki kell választanunk, hogy mely meghajtón találja meg a programunk az Oracle-rendszert, vagyis a betöltő programot. A program Form-jának fülei alatt ezt követően a FUTTATÁS gombokkal indítható a kontrol állományok betöltése, majd a FRISSÍTÉS gombokkal jeleníthetjük meg a táblába bekerült adatok rekordjait.

Oracle adatbázis-kezelés cikksorozat