Documente Academic
Documente Profesional
Documente Cultură
CONCEPTE
SQL *LOADER incarca date din fisiere externe in tabele intr-o
baza de date Oracle.
SQL*LOADER accepta la intrare date intr-o varietate de
formate, poate efectua
filtrarea(incarcarea selectiva a
datelor bazata pe valoarea lor) si poate incarca date in mai
multe tabele ale bazei de date Oracle in aceeasi sesiune de
incarcare.
Fisiere de date de
intrare
Fisierul de
control
Fisierul
log
SQL*Loader
Fisiere bad
Fisiere
discard
(refuzate)
Baza de
date
Tabela
Tabela
Cimpul 1
CHAR
Cimpul 2
INTEGER
| A | l | f | r | e | d |
| S | c | o | t | t |
|
| T | o | m |
|
|
|
1 | 9 | 2 | 6 |
| 3 | 0 | 1 |
|
| 1 | 9 |
Cimpul 2
INTEGER
| A | l | f | r | e | d |
1 | 9 | 2 | 6 |
|S|c|o|t|t|3|0|1|
| T | o | m | 1 | 9 |
(rown,cmnt,len)
exemplu.dat
0001500001,a,00015,
0005000002,abcdefghij,00050,
005900003,abcdefghijklmn,000059,
00005200004,abcdef,000052,
Nota: Pentru formatul inregistrarilor de lungime fixa sau
variabila nu s-a facut nici o prezumptie asupra terminatorului
la sfirsitul fiecarei inregistrari fizice.
Inregistrari logice si fizice
O inregistrare sau linie in fisier (atit in format fix cit si
variabil) este considerata o inregistrare fizica.
O inregistrare logica cuprinde una sau mai multe inregistrari
fizice.
Deseori
inregistrarile
fizice
si
logice
sunt
echivalente. Acesta este cazul cind se incarca putine coloane
scurte. Totusi, anumite inregistrari fizice trebuie combinate
sa creeze o inregistrare logica. De exemplu, o inregistrare
logica contine 24 coloane de 10 caractere cuprinse in trei
inregistrari de 80 de caractere. Deci trei inregistrari fizice
constituie o inregistrare logica.
SQL*Loader permite compunerea inregistrarii logice din mai
multe inregistrari fizice folosind continuare de cimp.
Inregistrarile
fizice
sunt
combinate
intr-o
singura
inregistrare logica cind anumite conditii ale continuatorului
de rind sunt adecvate.
Se poate specifica faptul ca o inregistrare logica poate fi
compusa din mai multe inregistrari fizice in urmatoarele
moduri:
y Un numar fix de inregistrari fizice sunt concatenate sa
formeze o inregistrare logica (nu este folosit continuatorul
de rind).
y Inregistrarile fizice sunt adaugate daca continuatorul de
rind contine un sir specific.
y Inregistrarile fizice sunt adaugate daca contin un caracter
specific ca ultimul lor caracter care nu este blank.
Date binare si date caracter
Tipul de date binar este un tip nativ.
Tipurile native pot fi implementate diferit in sisteme de
operare diferite sau arhitecturii hardware.
Datele tip caracter pot fi incluse in oricare format.
SQL*Loader poate incarca date numerice in format binar sau
caracter. Formatul caracter este referit ca format numeric
extern.
Datele
binare
nu
pot
fi
incarcate
folosind
formatul
inregistrarilor stream (inregistrarea se termina in linie
noua) incit un fisier de intrare binar poate contine
caracterul
linie
noua
care
este
incorect
considerat
delimitator de inregistrare.
Cimpurile de date
SQL*Loader
Rinduri inserate
Date de inserat
Cum se interpreteaza
cinpurile sa recunoasca
datele
Server
Cun se convertesc si
memoreaza datele
Fisier de control
Specificarea
i
il
Fisier
de date
|a|a|a| | | | | | | | | |b|b|b| | |
CHAR(5) Specificare in fisierul de control CHAR(5)
SQL*Loader
Rind inserat
aaa
Baza de date
Coloana 1
bbb
Tabela
Aaa_ _
CHAR(5)
Coloana 2
bbb
VARCHAR(5)
Server
respinse
atit
de
catre
Filtrarea inregistrarilor
Inregistrare
Citita in
SQL*Loader
Procesarea
cimpului
Refuzat (reject)
Accepta
Fisier bad
Refuzat
(discard(
SQL*Loader
Evaluarea clauzei
WHEN
Selectat
Fisier de
refuz
(discard
Refuzat (reject)
RDBMS
Inserare
Baza de
date
1.
2.
3.
4.
5.
6.
LOAD DATA
INFILE *
INTO TABLE dept
FIELDS TERMINATED BY ' ,' OPTIONALLY ENCLOSED BY ' " '
(deptno, dname, loc)
BEGINDATA
12, RESEARCH, "SARATOGA"
10, "ACCOUNTING", CLEVELAND
11, "ART", SALEM
13, FINANCE, "BOSTON"
21, "SALES" ,PHILA.
22, "SALES" ,ROCHESTER
42, "INT'L", "SAN FRAN"
Note:
1. Comanda LOAD DATA este ceruta la inceputul fisierului de
control.
2. INFILE* specifica ca datele sunt gasite in fisierul de
control si nu intr-un fiser extern.
3. Comanda INTO TABLE este ceruta sa identifice tabela care se
incarca (DEPT). Implicit SQL*Loader solicita ca tabela sa fie
goala inainte de inserarea articolelor.
4. FIELDS TERMINATED BY specifica ca datelele se termina prin
virgula, dar pot fi incluse si intre ghilimele. Tipul de data
pentru toate cimpurile este implicit CHAR
5. Numele coloanelor care se incarca sunt cuprinse intre
paranteze. Deoarece nu s-a specificat tipul, implicit este
caracter de lungime 256.
6. BEGINDATA specifica inceputul datelor.
Lansarea SQL*Loader
Sqlldr userid=scott/tiger control=ulcase1.ctl log=ulcase1.log
SQL*Loader incarca tabela DEPT si creeaza fisierul log.
Fisierul log
Control File:
ULCASE1.CTL
Data File :
ULCASE1.DAT
Bad File:
ULCASE1.BAD
Discard File:
none specified
(Allow all discards)
Number to load:
ALL
Number to skip:
0
Errors allowed:
50
Bind array:
64 rows, maximum of 65336 bytes
Continuation:
none specified
Pat used:
Conventional
Table DEPT, loaded from every logical record.
Insert option in effect for this table: INSERT
Column Name
-----------1.DEPTNO
DNAME
2.LOC
Position
-------FIRST
NEXT
NEXT
Len
--*
*
*
Term
----,
,
WHT
Encl
Datatype
-----------O (")
CHARACTER
O (")
CHARACTER
O (")
CHARACTER
Table DEPT:
7 Rows successfully loaded.
0 Rows not loaded due to data errors.
0 Rows not loaded because all WHEN clauses werw failed.
0 Rows not loaded because all fields werw null.
Space allocated for bind array: 49920 bytes (64 rows)
Space allocated for memory besides bind array: 76000 bytes
Total logical recordsskipped:
0
Totallogocal records read:
7
Total logical records rejected:
0
Total logical records discarded: 0
Note:
1. Pozitia si lungimea fiecarui cimp este determinata pentru
fiecare inregistrare pe baza delimitatorilor in fisierul de
intrare.
2. WHT semnifica, ca cimpul LOC este terminat cu spatiu.
Notatia O() specifica inchiderea optionala intre ghilimele.
Cazul 2: Fisierul de control ULCASE2.CTL
1.
2.
3.
4.
LOAD DATA
INFILE 'ulcase2.dat'
INTO TABLE emp
(empno
POSITION (01:04)
ename
POSITION (06:15)
job
POSITION (17:25)
mgr
POSITION (27:30)
sal
POSITION (32:39)
comm
POSITION (41:48)
5. deptno
POSITION (50:51)
Note:
1. LOAD DATA este cerut la inceputul
INTEGER
CHAR,
CHAR,
INTEGER
DECIMAL
DECIMAL
INTEGER
EXTERNAL,
EXTERNAL,
EXTERNAL,
EXTERNAL,
EXTERNAL)
fisierului.
MANAGER
PRESIDENT
CLERK
MANAGER
SALESMAN
SALESMAN
7839
7782
7839
7698
7698
2572.50
5500.00
920.00
3123.75
1600.00
1312.50
300.00
1400.00
10
10
10
20
30
30
Lansarea SQL*Loader
sqlldr userid=scott/tiger control=ulcase2.ctl log=ulcase.2 log
Inregistrarile incarcate in tabele EMP contine numarul
departamentului. In afara cazului cind tabela EMP este
incarcata
prima,
verificarea
referentiala
refuza
inregistrarile.
Fisierul log
Control File:
ULCASE2.CTL
Data File:
ULCASE2.DAT
Bad File:
ULCASE2.BAD
Discard File:
none specified
(Allow all discards)
Number to load:
ALL
Number to skip:
0
Errors allowed:
50
Bind array:
64 rows, maximum of 65336 bytes
Continuation:
none specified
Path used:
Conventional
Table EMP, loaded every logical record.
Insert option in effect for this table: INSERT
Column name
----------EMPNO
ENAME
JOB
MGR
SAL
COM
DEPTNO
Position
-------1:14
6:15
17:25
27:30
32:39
41:48
50:51
Len
--4
10
9
4
8
8
2
Term
----
Encl
----
Datatype
-------CHARACTER
CHARACTER
CHARACTER
CHARACTER
CHARACTER
CHARACTER
CHARACTER
Table EMP:
7 Rows successfully loaded.
0 Rows not loaded due to data errors.
0 Rows not loaded because all WHEN clauses were failed.
0 Rows not loaded because all fields were null.
Space allocated for bind array
4352 bytes (64 rows)
Space
Total
Total
Total
Total
37051 bytes
Note:
1. Comentariile pot apare oriunde in liniile de comanda ale
fisierului, dar nu trebuie sa apara in date.
Sunt precedate
de liniuta dubla care poate apare oriunde in linie.
2. INFILE* specifica ca datele sunt la sfirsitul fisierului de
control.
3. Se specifica ca datele se incarca chiar daca tabela contine
rinduri, asta insemnind ca tabela nu este necesar sa fie
goala.
Position
Len
----------FIRST
*
NEXT
*
NEXT
*
NEXT
*
NEXT
20
NEXT
*
NEXT
*
NEXT
*
NEXT
*
SEQUNCE (MAX,1)
Term
---,
,
,
,
,
,
,
,
,
Encl
---O(")
O(")
O(")
O(")
O(")
O(")
O(")
O(")
O(")
Datatype
-------CHARACTER
CHARACTER
CHARACTER
CHARACTER
CHARACTER
CHARACTER
CHARACTER
CHARACTER
CHARACTER
Table EMP:
7 Rows seccessfully loaded.
0 Rows not loaded due to data errors.
0 Rows not loaded because all WHEN clauses were failed.
0 Rows not loaded because all fields were null.
Space allocated for bind array:
63810 bytes (30 rows)
Space allocated for memory besides bind array: 94391 bytes
Total logical records skipped:
0
7
0
0
Cazul 4:
Combina mai multe inregistrari fizice formind o inregistrare
logica cu CONTINUEIF.
Insereaza numere negative.
Indica cu REPLACE ca tabela trebuie golita inaintea
inserarii datelor noi.
Specifica un fisier de refuz (discard) folosind DISCARDFILE.
Specifica numarul maxim de rinduri refuzate folosind
DISCARDMAX.
Refuza rindurile care introduc valori duble intr-un index
unic sau sunt cu valori invalide.
Fisierul de control
LOAD DATA
INFILE 'ulcase4.dat'
1) DISCARDFILE 'ulcase4.dsc'
2) DISCARDMAX 999
3) REPLACE
4) CONTINUEIF THIS (1) = ' * '
INTO TABLE emp
(empno
POSITION(1:4)
INTEGER
ename
POSITION(6:15)
CHAR,
job
POSITION(17:25)
CHAR,
mgr
POSITION(27:30)
INTEGER
sal
POSITION(32:39)
DECIMAL
comm
POSITION(41:48)
DECIMAL
deptno
POSITION(50:51)
INTEGER
hiredate POSITION(52:60)
INTEGER
EXTERNAL,
EXTERNAL,
EXTERNAL,
EXTERNAL,
EXTERNAL,
EXTERNAL)
Note:
1. DISCARDFILE specifica un fisier de refuz numit ULCASE 4.DSC.
2. DISCARDMAX specifica maxim 999 rinduri refuzate permise
inainte de a se termina executia.
3. REPLACE specifica ca daca sunt date in tabelele care se
incarca , SQL*Loader trebuie sa sterga datele inainte de a
incarca datele noi.
4. CONTINUEIF THIS specifica ca daca un asterix este gasit in
coloana 1 a inregistrarii curente, atunci urmatoarea
inregistrare fizica dupa aceasta inregistrare este adaugata la
aceasta.De notat ca coloana 1 din fiecare inregistrare fizica
trebuie sa contina sau un asterix sau nici o valoare.
Fisierul de date
De notat: asterixul in prima pozitie si indicatorul de linie
noua este in pozitia 20.
De notat: comisionul lui CLARK este -10 si SQL*Loader incarca
valoarea, convertind la un numar negativ.
*7782 CLARK
MANAGER
7839
*7839 KING
PRESIDENT
*7934 MILLER
CLERK
7782
*7566 JONES
MANAGER
7839
*7499 ALLEN
SALESMAN 7698
*MARTIN
SALESMAN 7698
*7658 CHAN
ANALYST
7566
* CHEN
ANALYST
7566
* CHIN
ANALYST
7566
2572.50
-10
2512-NOV-85
5500.00
2505-APR-83
920.00
2508-MAY-80
3123.75
2517-JUL-85
1600.00
300.00
1312.50
1400.00
25-JUN-84
2521-DEC-85
3450.00
2516-FEB-84
3450.00
2516-FEB-84
3450.00
2516-FEB-84
Inregistrarile refuzate
Ultimele doua inregistrari se presupune ca au fost refuzate.
Daca este un index unic creat in coloana EMPNO, atunci
inregistrarea pentru CHIN este refuzata deoarece EMPNO este
identic cu a lui CHAN. Daca EMPNO este definita ca NOT NULL,
inregistrarea CHEN este refuzata deoarece nu are valoare in
EMPNO.
Lansarea SQL*Loader
sqlldr userid=scott/tiger control=ucase4.ctl log ucase4.log
Fisierul log
Control File:
Data File:
Bad File:
Discard File:
(Allow 999 discards)
Number to load:
Number to skip:
Errors allowed:
Bind array:
Continuation:
ULCASE4.CTL
ULCASE4.DAT
ULCASE4.BAD
ULCASE4.DSC
ALL
0
50
64 rows, maximum of 65336 bytes
1:1 = 0x2a (character ' * ' ),
in current physical record
Path used:
Conventional
Table EMP, loaded from every logical record.
Insert option in effect for this table: REPLACE
Column Name
-----------EMPNO
ENAME
JOB
MGR
SAL
COMM
Position
-------1:4
6:15
17:25
27:30
32:39
41:48
Len
--4
10
9
4
8
8
Term
----
Encl
----
Datatype
-------------CHARACTER
CHARACTER
CHARACTER
CHARACTER
CHARACTER
CHARACTER
DEPTNO
HIREDATE
50:51
52:60
2
9
CHARACTER
CHARACTER
CHEN
7566
CHIN
7566
ANALYST
3450.00
ANALYST
3450.00
2516-FEB-84
2516-FEB-84
Fisierul de control
----Loads EMP records from first 23 characters
----Creates and loads PROJ records for each PROJNO listed
----for each employee
LOAD DATA
INFILE 'ulcase5.dat'
BADFILE 'ulcase5.bad'
DISCARDFILE 'lcase5.dsc'
1) REPLACE
2) INTO TABLE emp
(empno
POSITION (1:4)
INTEGER EXTERNAL
ename
POSITION (6:15)
CHAR,
deptno
POSITION (17:18
CHAR,
mgr
POSITION (20:23
INTEGER EXTERNAL)
2) INTO TABLE proj
---PROJ has two columns, both not null: EMPNO and PROJNO
3) WHEN projno !='
'
(empno
POSITION(1:4)
3) projno
POSITION(25:27)
3) INTO TABLE proj
4) WHEN projno != '
'
(empno
POSITION(1:4)
4) projno
POSITION(29:31)
2) INTO TABLE proj
5) WHEN projno !='
'
(empno POSITION(1:4)
5) projno POSITION(33:35)
INTEGER EXTERNAL,
INTEGER EXTERNAL)---lst proj
INTEGER EXTERNAL,
INTEGER EXTERNAL)
---2nd proj
INTEGER EXTERNAL,
INTEGRAL EXTERNAL) ---3rd proj
Note:
1. REPLACE specifica ca daca exista date in tabelele care se
incarca (EMP si PROJ), SQL*Loader trebuie sa la stearga
inainte de a incarca datele noi.
2. Mai multe clauze INTO incarca doua tabele, EMP si PROJ.
Acelasi set de inregistrari este procesat de trei ori,
folosind diferite combinatii de coloane de fiecare data pentru
a incarca tabela PROJ.
3. WHEN incarca rindurile care au valori numele in numarul
proiectului. Cind PROJNO este definit in coloanele 25....27,
rindurile sunt inserate in PROJ numai daca acestea au valori
in aceste coloane.
4. Cind PROJNO este definit in coloanele 29...31, rindurile
sunt incarcate numai daca sunt valori in aceste coloane.
5. Cind PROJNO este definit in coloanele 33...35, rindurile
sunt inserate in PROJ numai daca sunt valori in aceste
coloane.
Fisierul de date
1234 BAKER
10 9999 101 102 103
1234 JOKER
10 9999 777 888 999
2664 YOUNG
20 2893 425 abc 102
5321 OTOOLE
10 9999 321
55
40
2134 FARMER
20 4555 236 456
2414 LITTLE
20 5634 236 456
40
6542 LEE
10 4532 102 321
14
2849 EDDS
xx 4555
294
40
4532 PERKINS
10 9999
40
1244 HUNT
11 3452 665 133 456
123
DOOLITTLE
12 9940
132
1453 MACDONALD
12 5532
200
Lansarea SQL*Loader
sqlldr userid=scott/tiger control=ulcase5.ctl log=ulcase5.log
Fisierul log
Control File:
Data File:
Bad File:
Discard File:
(Allow all discards)
Number to load:
Number to skip:
ULCASE5.CTL
ULCASE5.DAT
ULCASE5.BAD
ULCASE5.DSC
ALL
0
Errors allowed:
50
Bind array:
64 rows, maximum of 65336 bytes
Continuation:
none spcified
Path used:
Conventional
Table EMP, loaded from every logical record.
Insert option in effect for this table: REPLACE
Column Name
-----------EMPNO
ENAME
DEPTNO
MGR
Position Len
-------- --1:4
4
6:15
10
17:18
2
20:23
4
Term
----
Encl
----
Datatype
--------CHARACTER
CHARACTER
CHARACTER
CHARACTER
Position Len
-------- --1:4
25:27
Term
---4
3
Encl
----
Datatype
--------CHARACTER
CHARACTER
Position Len
-------- --1:4
29:31
Term
---4
3
Encl
----
' )
' )
Datatype
--------CHARACTER
CHARACTER
1)
1)
1)
1)
1)
1)
1)
2)
2)
2)
2)
3)
3)
3)
3)
4)
4)
4)
4)
5)
5)
5)
Position Len
-------- --1:4
33:35
Term
---4
3
Encl
----
Datatype
--------CHARACTER
CHARACTER
5)
0 Rows not loaded because all fields were null.
Space allocated for bind array:
5120 bytes (64 rows)
Space allocated for memory besides bind array:46763 bytes
Total logical records skipped:
0
Total logical records read:
12
Total logical records rejected:
3
Total logical records discarded:
0
Note:
1. Erorile nu sunt intilnite in aceeasi ordine in care sunt
inregistrarile fizice. Fisierele bad si discard contin
inregistrari in aceeasi ordine in care apar in fisierul log.
2. Din 12 inregistrari logice de intrare, au fost refuzate trei
(JOKER, YOUNG si EDDS). Pentru aceste inregistrari nu s-a
incarcat nici o data.
3. Doua inregistrari (JOKER si YOUNG) au fost refuzate din
cauza datelor eronate, noua inregistrari satisfac conditia din
clauza WHEN.
4. Zece inregistrari satisfac criteriul din clauza WHEN si trei
(JOKER, YOUNG si EDDS) au fost refuzare.
5. Noua inregistrari satisfac criteriul din clauza WHEN si trei
(JOKER, YOUNG si EDDS) sunt refuzate din cauza datelor
eronate.
Tabelele incarcate:
SQL>SELECT empno, ename, mgr, deptno FROM emp;
EMPNO
-----------1234
5321
2134
2414
6542
4532
1244
123
1453
ENAME
----BAKER
0TOOLE
FARMER
LITTLE
LEE
PERKINS
HUNT
DOOLITTLE
ALBERT
MGR
---9999
9999
4555
5634
4532
9999
3452
9940
5532
DEPTNO
-------------10
10
20
20
10
10
11
12
25
PROJNO
------132
101
103
102
665
456
133
200
236
456
2414
2414
2414
4532
5321
5321
5321
6542
6542
6542
236
456
40
40
321
40
55
102
14
321
Control File:
ULCASE6.CTL
Data File:
ULCASE6.DAT
Bad File:
ULCASE6.BAD
Discard File:
none specified
(Alow all discards)
Number to load: ALL
Number to skip: 0
Errors allowed:
50
Continuation:
none specified
Path used:
Direct
Table EMP, loaded from every logical record.
Insert option in effect for this table:REPLACE
Column Name
Position
Len
Term
Encl
Datatype
------------------------------------------------------EMPNO
1:4
4
CHARACTER
ENAME
6:15
10
CHARACTER
JOB
17:25
9
CHARACTER
MGR
27:30
4
CHARACTER
SAL
32:39
8
CHARACTER
COMM
41:48
8
CHARACTER
DEPTNO
50:51
2
CHARACTER
Column EMPNO is NULL if EMPNO = BLANKS
Column MGR is NULL if MGR = BLANKS
Column SAL is NULL if SAL = BLANKS
Column COMM is NULL if COMM = BLANKS
Column DEPTNO is NULL if DEPTNO = BLANKS
The following index(es) on table EMP were processed:
Index EMPIX was loaded.
Table EMP:
7 Rows successfully loaded.
0 Rows not loaded due to data errors.
0 Rows not loaded because all WHEN clauses were failed.
0 Rows not loaded because all fields were null.
Bind array size not used direct path.
Space allocated for memory besides bind array:
bytes
Total logical records skipped:
0
Total logical records read:
7
Total logical records rejected:
0
Total logical records discarded:
0
Cazul 7: Extragerea datelor dintr-un raport formatat
164342
Se foloseste SYSDATE.
Se foloseste clauza TRAILING NULLCOLS.
Atentionari pentru lungimi de cimpuri ambigue.
Fisierul de date
Today's Newly Hired Employees
Dept Job
Manager MgrNo Emp Name
----- ---------------- --------- -----------20 Salesman
Blake
7698
Shepard
Falstaff
Major
30 Clerk
Scott
7788
Conrad
Ford
De Silva
Manager
King
7839
Provo
EmpNo
---------8061
8066
8064
8062
7369
8063
8065
Salary
------$1,600.00
$1,250.00
$1,250.00
$1,100.00
(Comm)
--------(3%)
(5%)
(14%)
$800.00
$2,975.00
Trigger-ul INSERT
In acest caz un tigger BEFORE INSERT este necesar pentru a introduce numarul
departamentului, numarul job-ului si numarul managerului cind aceste cimpuri nu sunt
prezente in linia de date. Cind valorile nu sunt prezente, este folosita variabila globala.
Trigger-ul INSERT si pachetul care defineste variabila globala:
CREATE OR REPLACE PACKAGE uldemo7 AS ------Global Package Variables
last_deptno
NUMBER(2);
last_job
VARCHAR2(9);
last_mgr
NUMBER(4);
END uldemo7;
CREATE OR REPLACE TRIGGER uldemo7_emp_insert
BEFORE INSERT ON emp
FOR EACH ROW
BEGIN
IF: new. deptno IS NOT NULL THEN
uldemo7.last_deptno : = : new.deptno; -- save value for later
ELSE
: new.deptno : = uldemo7.last_deptno; -- use last valid value
END IF;
IF : new.job IS NOT NULL THEN
uldemo7.last_job : = :new.job;
ELSE
: new.job : = uldemo7.last_job;
END IF;
IF : new.mgr IS NOT NULL THEN
uldemo7.last_mgr : = : new.mgr;
ELSE
: news.mgr : = uldemo7.last_mgr;
END IF;
END;
/
Nota: Este importanta faza FOR EACH ROW. Daca aceasta nu este specificata, trigger-ul
INSERT se va declansa o data numai pentru vectorul de inserare, deoarece SQL*Loader
foloseste un vector de interfata.
Fisierul de control ULCASE7.ctl
LOAD DATA
INFILE ' ULCASE7.DAT'
APPEND
INTO TABLE emp
1) WHEN (57)= ' . '
2) TRAILING NULLCOLS
3) (hiredate SYSDATE,
4)
deptno POSITION (1:2) INTEGER EXTERNAL(3)
5)
NULLIF deptno=BLANKS,
job
POSITION(7:14) CHAR TERMINATED BY WHITESPACE
6)
NULLIF job=BLANKS "UPPER( : job)",
7)
mgr POSITION(28:31) INTEGER EXTERNAL
TERMINATED BY WHITESPACE, NULLIF mgr=BLANKS,
ename POSITION(34:41) CHAR
TERMINATED BY WHITESPACE "UPPER(:ename)",
empno POSITION(45) INTEGER EXTERNAL
TERMINATED BY WHITESPACE,
sal
POSITION(51) CHAR TERMINATED BYWHITESPACE
8)
"TO_NUMBER(:sal, '$99,999.99')",
9) comm INTEGER EXTERNAL ENCLOSED BY ' (' AND'%'
"comm * 100"
Note:
1. Punctul zecimal din coloana 57(cimpul salary) identifica o linie cu date. Toate celelalte
linii din raport sunt refuzate.
2. Clauza TRAILING NULLCOLS determina SQL*Loader sa trateze oricare cimp care
lipseste la sfirsitul inregistrarii ca null. Deoarece cimpul comision nu este prezent in fiecare
inregistrare, clauza lasa sa se incarce cimpul comision ca null, in loc sa refuze inregistrarea
cind sunt gasite numai sase cimpuri pe cind sunt asteptati sapte.
3. Data platii pentru salariat este incarcata folosind data curenta a sistemului.
4. Specificarea genereaza un mesaj de atentionare, deoarece lungimea specificata nu
corespunde cu lungimea determinata de pozitia cimpului. Este folosita lungimea 3 cca
specificata.
5. Deoarece raportul arata numai numarul departamentului job-ului si managerului cind se
schimba valorile, aceste cimpuri pot fi blank. Fisierul de control determina ca acestea sa fie
incarcate ca null si nu tigger de inserare RDBMS incarca ultima valoare valida.
6. Sirul SQL schimba numele job-ului in litere mari.
7. Este necesar aici sa se specifice pozitia de inceput. Daca cimpul job si cimpul manager
sunt ambele blank, atunci clauza cimpului job TERMINATED BY BLANKS va determina
SQL*Loader sa scaneze inapoi cimpul numele angajatului. Fara clauza POSITION, cimpul
numele angajatului va fi interpretat gresit ca si cimp manager.
8. Sirul SQL translateaza un cimp dintr-un sir de caractere formatat intr-un numar. Valorile
numerice ocupa mai putin spatiu si pot fi afisate cu o varietate de optiuni de formatare.
9. Delimitatorii initiali si finali scot valoarea numerica din cimpul formatat. Sirul SQL
converteste valoarea la forma memorata.
Lansara SQL*Loader
sql ldr scott/tiger control=ulcase7.ctl log= ulcase7.log
Fisierul log
1) SQL* Loader - 307: Warning: conflicting lengths 2 and 3 specified
for column EMP.DEPTNO.
Control File:
ulcase7.ctl
Data File:
ulcase7.dat
Bad File:
ulcase7.bad
Discard File: none specified
( Alow all discards)
Number to load: ALL
Number to skip: 0
Errors allowed: 50
Bind array:
64 rows, maximum of 65536 bytes
Continuation:
none specified
Path used:
Conventional
Table EMP, loaded when 57:57 = 0x2e (character ' . ')
Insert option in effect for this table: APPEND
TRAILING NULLCOLS option in effect
Column name
Position
Len
Term
Encl Datatype
------------------------------------------- ------------DEPTNO
1:2
3
CHARACTER
JOB
7:14
8
WHT
CHARACTER
MGR
28:31
4
WHT
CHARACTER
ENAME
34:41
8
WHT
CHARACTER
EMPNO
NEXT
*
WHT
CHARACTER
SAL
51
*
WHT
CHARACTER
COMM
NEXT
*
(
CHARACTER
%
HIREDATE
SYSDATE
Column DEPTNO is NULL DEPTNO = BLANKS
Column JOB is NULL if JOB = BLANKS
Column JOB had SQL string
"UPPER (:job)"
applied to it.
Column MGR is NULL if MGR = BLANKS
Column ENAME had SQL string
"UPPER (:ename)"
applied to it.
Column SAL had SQL string
"TO_NUMBER (sal, '$99,999.99')"
applied to it.
Column COMM had SQL string
":comm * 100"
applied to it.
2) Record 1 : Discarded - failed all WHEN clauses.
Record 2 : Discarded - failed all WHEN clauses.
Record 3 : Discarded - failed all WHEN clauses.
Note:
1. Specificarea ca fiecare inregistrare din fisierul de date are o lungime fixa.
2. SORTED INDEXES permite SQL*Loader sa optimizeze crearea indecsilor prin
eliminarea fazei de sortare a datelor cind se foloseste metoda directa.
3. Se foloseste cuvintul cheie PARTITION pentru a specifica incarcarea unei partitii
specificate. In exemplu, numai rindurile care indeplinesc criteriul--- sunt incarcate, toate
celelalte sunt refuzate.
4. Identifica numele coloanei si locatia in fisierul de date.
Crearea tabelei
In ordinea partitiilor datele tabelei sunt create folosind pentru partitii in corespondenta cu----create table lineitem
(1_orderkey
number,
1_partkey
number,
1_suppkey
number,
1_linenumber
number,
1_quantity
number,
1_extendedprice number,
1_discount
number,
1_tax
number,
1_returnflag
char,
1_linestatus
char,
1_shipdate
date,
1_commitdate
date,
1_receiptdate
date,
1_shipinstruct
char(17),
1_shipmode
char(7),
1_comment
char(43) )
partition by range (1_shipdate)
(
partition ship_ql values less than (TO_DATE( '01-APR-1996', 'DD-MON-YYYY') )
tablespace p01,
partition ship_q2 values less than (TO_DATE( '01-JUL-1996', 'DD-MON-YYYY') )
tablespace p02,
partitionship_q3 values less than (TO_DATE( '01-OCT-1996', 'DD-MON-YYYY') )
tablespace p04
)
Fisierul de date de intrare
Fisierul de intrare ULCASE8.dat este aratat mai jos. Fiecare inregistrare are 129 caractere
lungime. Cinci blank-uri preced fiecare inregistrare din fisier.
1 151978511724386.60 7.04 0NO09-SEP-6412-FEB-9622-MAR-96DELIVER IN
PERSONTRUCK iPBw4mMm7w7kQ zNPL i261OPP
1 2731 73223658958.28.09.06NO12-FEB-9628-FEB-9620-APR-96TAKE BACK
RETURN MAIL 5wM04SNy10AnghCP2nx 1Ai
1 3370 3713 810210.96 .1.02NO29-MAR-9605-MAR-9631-JAN-96TAKE BACK
RETURN
REG AIRSQC2C 5PNCy4mM
1 5214 46542831197.99.09.06NO21-APR-9630-MAR-9616-MAY
96NONE AIR Om0L65CSAwSj5k6k
1 6564 6763246897.92.07.02NO30-MAY-9607-FEB-9603-FEB-96DELIVER IN
Position Len
---------- ----1:6
6
1:6
6
7:11
5
12:15
4
16:16
1
17:18
2
19:26
8
27:29
3
30:32
3
33:33
1
34:34
1
35:43
9
44:52
9
53:61
9
62:78
17
79:85
7
86:128
43
Term
-------
Encl
------
Datatype
------------CHARACTER
CHARACTER
CHARACTER
CHARACTER
CHARACTER
CHARACTER
CHARACTER
CHARACTER
CHARACTER
CHARACTER
CHARACTER
CHARACTER
CHARACTER
CHARACTER
CHARACTER
CHARACTER
CHARACTER
you
must
Denumirea fisierului
Pentru a specifica fisierul care contine date de incarcat, se
foloseste cuvintul cheie INFILE sau INDDN din fisierul de
control. Daca nu s-a specificat un nume de fisier, numele
implicit este numele fisierului de control cu extensia DAT.
Daca fisierul de control contine date de incarcat se specifica
numele fisierului *. Aceasta specificare lucreaza impreuna
cu cuvintul cheie BEGINDATA.
INFILE sau INDDN (se foloseste INDDN cind este ceruta
compatibilitate DB2). Acest cuvint cheie specifica ca urmeaza
o specificatie de nume fisier.
Filname - numele fisierului care contine date. Orice spatii
sau semne de punctuatii din numele fisierului trebuie inchise
intre apostroafe. Daca datele sunt in fisierul de control si
in fisierul de date, trebuie specificat primul asteriscul in
ordinea pentru care se incarca datele.
Processing_options sir de optiuni de rocesare. Aceasta
specifica formatul fisierului de date si optimizeaza citirea
datelor.
Specificarea mai multor fisiere de date
Pentru a incarca date din mai multe fisiere la o executie a
SQL*Loader, se foloseste fraza INFILE pentru fiecare fisier de
date. Fisierul de date nu trebuie sa aiba acelasi format de
fisier. De exemplu, doua fisiere cu siruri de optiuni de
procesare diferite si al treilea poate consta in date in
fisierul de control.
Pentru fiecare fisier de date se poate specifica un fisier de
refuz si un fisier bad. Aceste nume de fisiere trebuie
declarat dupa fiecare nume de fisier. Urmatoarea portiune a
unui fiser de control specifica patru fisiere.
INFILE mydat1.dat BADFILE mydat1.bad DISCARDFILE mydat1.dis
INFILE mydat2.dat
INFILE mydat3.dat DISCARDFILE mydat3.dis
INFILE mydat4.dat DISCARDMAX 10 0
Pentru primul fisier (f1.dat) sunt denumite explicit fisierul
de refuz si fisierul bad. Daca este necesar se creeaza ambele.
Pentru fisierul al doilea (f2.dat) nu s-a specificat fisier de
refuz si nici bad. Daca este necesar se creeaza numai fisierul
bad. Daca se creeaza fisierul bad are numele si extensia
implicita. Fisierul de refuz nu se creeaza chiar daca sunt
rinduri refuzate.
Pentru fisierul al treilea (f3.dat) se creeaza un fisier bad
implicit, daca este necesar. La fel, daca este necesar, se
creeaza un fisier de refuz cu numele dat.
Pentru fisierul al patrulea (f4.dat) se creeaza, daca este
necesar, un fisier bad implicit. Deoarece este folosita
optiunea DISCARDMAX SQL*Loader presupune ca este cautat si
creat un fisier de refuz cu numele implicit (f4.dsc), daca
este necesar.
Nota: Inregistrarile fizice din fisiere separate nu pot fi
legate intr-o inregistrare logica.
Exemplu de specificare a fisierelor de date
Unde:
BADFILE (BADDN) (Se foloseste BADDN cind este ceruta
compatibilitatea DB2). Acest cuvint cheie specifica un nume de
fisier pentru fisierul BAD.
bad_filename Specificarea unui nume valid pentru platforma.
Orice spatii sau semne de punctuatie in numele fisierului,
trebuie cuprinse intre apostroafe.
Exemplu de specificare a fisierului BAD
In exemplu se specifica un fisier BAD cu numele UGH si
extensia implicita BAD:
BADFILE UGH
Se specifica un fisier BAD cu numele BAD01 si extensia REJ
BADFILE BAD01.REJ
BADFILE /REFECT_DIR/BAD01.REJ
Inregistrarile refuzate (reject)
O inregistrare este refuzata in una din urmatoarele conditii:
La inserare inregistrarea genereaza o eroare Oracle (cum ar
fi date invalide pentru tipul respectiv de data).
SQL*Loader nu poate determina daca data este acceptabila,
adica nu poate determina daca inregistrarea indeplineste
criteriul din clauza WHEN, ca si in cazul unui cimp caruia
ii lipseste delimitatorul final.
Daca data poate fi evaluata in concordanta cu criteriul din
clauza WHEN, atunci este sau inserata sau refuzata.
Daca o inregistrare este refuzata la inserare, nici alte parti
al inregistrarii nu sunt inserate in alte tabele. De exemplu,
daca o inregistrare este inserata in mai multe tabele si mai
multe inserari s-au efectuat cu succes dar una esueaza, atunci
toate
inserarile
aferente
inregistrarii
sunt
anulate.
Inregistrarea este scrisa in fisierul BAD care poate fi
corectat si reincarcat. Inserarile anterioare fara erori nu
sunt afectate. Fisierul log indica eroarea Oracle pentru
fiecare inregistrare refuzata.
Restrictia de integriatate
Toate
restrictiile
de
integritate
sunt
respectate
de
incarcarea
conventionala.
La
incarcarea
directa
unele
restrictii nu sunt fortate.
Fisierul de refuz ulterior (discard)
La executia SQL*Loader, poate crea un fisier de inregistrari
refuzate pentru inregistrarile care nu indeplinesc unul din
criteriile de incarcare. Inregistrarile din acest fisier se
numesc
inregistrari
refuzate
(discard).
Inregistrarile
refuzate (discard) nu satisfac nici una din clauzele WHEN
specificate in fisierul de control. Inregistrarile refuzate nu
este necesar sa aiba date eronate.
Daca
conditia
este
adevarata
in
urmatoarea
inregistrare, inregistrarea fizica curenta este adaugata la
inregistrarea cutenta, continuind pina cind conditia devine
falsa.
pos_spec
Specifica
inceputul
si
sfirsitul
numerelor
coloanelor in inregistrarea fizica.
Numarul coloanei incepe cu 1. Sunt acceptate sau liniuta sau
doua puncte (start-end sau start:end).
Daca se omite end, lungimea cimplului de continuare este
lungimea sirului de byte sau sirului de caractere. Daca se
foloseste end, lungimea cimpului de continuare rezultat nu
este aceeasi cu a sirului de byte sau a sirului de caractere,
sirul scurt este completat. Sirurile de caractere sunt
completate cu blank-uri, sirurile hexazecimale cu zerouri.
LAST Acest test este similar cu THIS dar testul este facut
intotdeauna pe ultimul caracter non-blank. Daca ultimul
caracter non-blank din inregistrarea curenta indeplineste
criteriul, atunci urmatoarea inregistrare fizica este citita
asterisc
in
prima
coloana,
atunci
este
adaugata
si
inregistrarea 3 la primele doua. Daca inregistrarea 2 nu are
asterisc in coloana 1, aceasta este adaugata la prima, dar
inregistrarea 3 devine o inregistrare logica noua.
CONTINUEIF THIS (1) = *
In exemplul urmator se specifica, ca daca inregistrarea fizica
curenta (inregistrarea1) are o virgula in ultima pozitie care
nu este blank a coloanei de date, atunci inregistrarea fizica
urmatoare (inregistrarea2) va fi adaugata la inregistrarea 1.
Daca inregistrarea nu are o virgula in ultima coloana, aceasta
este ultima inregistrare fizica a inregistrarii logice
curente.
CONTINUEIF LAST = ,
In exemplul urmator se specifica ca daca inregistrarea fizica
urmatoare (inregistrarea2) are 10 in coloana 7 si 8, atunci
trebuie
adaugata
la
inregistrarea
fizica
precedenta
(inregistrarea1). Daca inregistrarea nu are 10 in coloanele
7 si 8, atunci aceasta devine o noua inregistrare logica.
CONTINUEIF NEXT (7:8) = 10
Incarcarea inregistrarilor logice in tabele
Care tabele se incarca
Care inregistrari se incarca in tabele
Caracteristicile
implicite
ale
coloanelor
in
aceste
inregistrari
Specificarea numelui tabelelor
Cuvintul cheie INTO TABLE al frazei LOAD DATA permite
identificarea tabelelor, cimpurilor si tipurilor de data.
Aceasta defineste relatiile intre inregistrarile din fisierele
de date si tabelele din baza de date.
INTO TABLE
Printre mai multe functii, cuvintul cheie INTO TABLE permite
specificarea tabelei in care se incarca datele. Pentru
incarcarea in mai multe tabele se include o clauza INTO TABLE
pentru fiecare tabela care se incarca. Pentru a incepe o
clauza INTO TABLE se foloseste cuvintul cheie INTO TABLE urmat
de numele tabelei Oracle care receptioneaza datele.
Tabela trebuie sa existe. Numele tabelei trebuie inclus intre
ghilimele daca este acelasi cu un cuvint rezervat SQL*Loader,
daca contine caractere speciale sau daca este case-sensitive.
INTO TABLE SCOTT.COMMENT
INTO TABLE SCOTT.Comment
INTO TABLE SCOTT.-COMMENT
Utilizatorul
care
executa
SQL*Loader
trebuie
sa
aiba
privilegiul INSERT in tabela. Altfel, numele tabelei trebuie
prefixat de utilizator cu numele proprietarului:
INTO TABLE SOPHIA.EMP
Metode specifice de incarcare a tabelei
Clauza INTO TABLE poate include o metoda de incarcare
specifica tabelei (INSERT, APPEND, REPLACE sau TRUNCATE) care
se aplica numai la aceasta tabela. Specificarea unuia din
aceste metode prin clauza INTO TABLE suprascrie metoda globala
de incarcare a tabelei. Implicit, metoda globala de incarcare
De exemplu,
SITEID POSITION (*) SMALLINT
SITELOC POSITION (*) INTEGER
Daca sunt specificate doua coloane si SITEID va incepe in
coloana 1 si SITELOC va incepe in coloana imediat urmatoare.
ENAME POSITION (1:20) CHAR
EMPNO POSITION (22-26) INTEGER EXTERNAL
ALLOW POSITION (*+2)
INTEGER EXTERNAL TERMINATED BY /
Coloana ENAME este caracter in pozitia 1 la 20, urmata de
coloana EMPNO care se presupune ca este data numerica in
coloana 22 la 26. Coloana ALLOW are offset la sfirsitul lui
EMPNO de +2 si starteaza in coloana 28 si continua pina este
intilnit un slash.
Folosirea frazei INTO TABLE multiple
Frazele multiple INTO TABLE permit:
incarcarea datelor in tabele diferite
extragerea mai multor inregistrari logice dintr-o singura
inregistrare de intrare
distinctie intre diferite formate a inregistrarilor de
intrare
In primul caz este obisnuit pentru fraza INTO TABLE sa refere
aceeasi tabela.
Extragerea mai multor inregistrari logice
Unele medii de memorare si transfer are o lungime fixa a
inregistrarii. Cind inregistrarea este scurta, este mai
eficient sa fie memorata intr-o singura inregistrare fizica,
pentru a folosi spatiul de memorare mai eficient.
In exemplu, SQL*Lader trateaza o inregistrare fizica in
fisierul de intrare ca doua inregistrari logice si foloseste
doua clauze INTO TABLE pentru a incarca date in tabela EMP.
Daca datele sunt:
1119 Smith
1120 Yvonne
1121 Albert
1130 Thomas
Urmatorul fisier de control extrage inregistrarile logice:
INTO TABLE emp
(empno POSITION (1:4) INTEGER EXTERNAL,
ename POSITION (6:15) CHAR)
INTO TABLE emp
(empno POSITION (17:20) INTEGER EXTERNAL,
ename POSITION (21:30) CHAR)
Pozitionarea relativa
Aceeasi inregistrare poate fi incarcata cu o specificare
diferita. Urmatorul fisier de control foloseste pozitionarea
relativa in loc de pozitionarea fixa. Aceasta specifica ca
fiecare cimp este delimitat de un singur blank ( )sau cu un
numar nedeterminat de blak-uri si tab-uri (WHITESPACE):
INTO TABLE emp
(empno INTEGER EXTERNAL TERMINATED BY ,
ename CHAR
TERMINATED BY WHITESPACE)
INTO TABLE emp
(empno INTEGER EXTERNAL TERMINATED BY ,
ename CHAR
TERMINATED BY WHITESPACE)
Punctul importatnt in exemplu este ca al doilea cimp EMPNO
este gasit imediat dupa primul ENAME, cu toate ca este intr-o
clauza INTO TABLE separata.
Scanarea cimpurilor nu incepe de la inceputul inregistrarii
pentru o noua clauza INTO TABLE, scanarea continua pina cind.
Pentru a forta scanarea inregistrarii sa inceapa intr-o
locatie specifica, se foloseste cuvintul cheie POSITION.
Distinctia intre diferite formate ale inregistrarii de intrare
Un singur fisier de date poate contine inregistrari intr-o
varietate de formate. Se considera urmatoarele date in care
inregistrarile EMP si DEPT sunt intercalate :
1 50
Manufacturing
-DEPT record
2 1119 Smith
50
-EMP record
2 1120 Snyder
50
1 60
Shipping
2 1121 Stevens 60
Un cimp de identificare a inregistrarii (ID) distinge intre
doua formate. Inregistrarea pentru departament are 1 in
prima coloana, pe cind inregistrarea de angajat are 2.
Fisierul de control foloseste pozitionarea exacta pentru a
incarca aceste date:
INTO TABLE dept
WHEN recid = 1
(recid POSITION(1:1) INTEGER EXTERNAL,
deptno POSITION(3:4) INTEGER EXTERNAL,
ename POSITION(8:21) CHAR)
INTO TABLE emp
WHEN recid <> 1
(recid POSITION(1:1)
INTEGER EXTERNAL,
empno POSITION(3:6)
INTEGER EXTERNAL,
ename POSITION(8:17) CHAR,
deptno POSITION(19:20) INTEGER EXTERNAL)
Pozitionarea relativa
Inregistrarile din exemplul anterior pot fi incarcate si ca
date delimitate. In acest caz totusi este necesar sa se
foloseasca cuvintul cheie POSITION.
Se foloseste urmatorul fisier de control:
INTO TABLE dept
WHEN recid = 1
(recid INTEGER EXTERNAL TERMINATED BY WHITESPACE,
deptno INTEGER EXTERNAL TERMINATED BY WHITESPACE,
dname CHAR TERMINATED BY WHITESPACE)
INTO TABLE emp
WHEN recid <> 1
(recid POSITION(1) INTEGER EXTERNAL TERMINATED BY ,
empno INTEGER EXTERNAL TERMINATED BY
ename CHAR TERMINATED BY WHITESPACE,
deptno INTEGER EXTERNAL TERMINATED BY )
Cuvintul cheie POSITION in a doua clauza INTO TABLE este
necesar pentru a incarca datele corect. Cuvintul cheie
determnina scanarea cimpurilor sa inceapa la coloana 1 cind se
unde:
GRAPHIC Datele sunt caractere pe doi biti.
EXTERNAL Sunt ignorate primul si ultimul caracter.
graphic_char_length Lungimea in DBCS.
De exemplu, [] reprezinta caractere shift-in si shift-out si #
reprezinta orice caracter pe doi biti.
Pentru a descrie #### se foloseste:
POSITION(1:4) GRAPHIC sau
POSITION(1) GRAPHIC(2)
Pentru a descrie [####] se foloseste:
POSITION(1:6) GRAPHIC EXTERNAL sau
POSITION(1) GRAPHIC EXTERNAL(2)
VARGRAPHIC
Datele sunt de lungime variabila, sir de caractere pe doi
byte. Aceasta consta in subcimpul lungime urmata de sirul de
caractere pe doi byte(DBCS).
Informatii suplimentare: Dimensiunea subcimpului lungime este
dimensiunea tipului SMALLINT din sistem (tipul SHORT INT
pentru C). Lungimea cimpului curent este data de primii doi
byte. Lungimea este numarul caracterelor grafice pe doi byte.
Acesta este multiplicat cu doi pentru a determina numarul de
byte de citit.
Sintaxa este:
Lungimea maxima specificata dupa cuvintul cheie VARGRAPHIC nu
include dimensiunea subcimpului lungime. Lungimea maxima
specifica numarul de caractere grafice. Acesta este inmultit
cu doi pentru a determina lungimea cimpului in byte.
Lungimea maxima implicita a cimpului este de 64 KB caractere
grafice sau 8 KB(2*4KB). Este o idee buna sa se specifice
lungimea maxima pentru astfel de cimpuri oricind este posibil
pentru a minimiza cerintele de memorie.
Daca este folosita clauza POSITION da locatia subcimpului
lungime, nu a primului caracter grafic. Daca se specifica
POSITION(start:end) locatia end determina o lungime maxima
pentru cimp. Ambele start si end identifica pozitia caracter
pe un singur byte. Start este extras din(end+1)pentru a da
lungimea cimpului in byte. Daca este specificata o lungime
maxima, aceasta suprascrie orice lungime maxima calculata din
POSITION.
Daca
un
cimp
VARGRAPHIC
este
terminat
la
sfirsitul
inregistrarii logice inainte ca acesta sa fie citit in
intregime se lanseaza o atentionare.
Datele VARGRAPHIC nu pot fi delimitate.
VARCHAR
Un cimp VARCHAR este un sir de caractere de lungime variabila.
Este considerat un tip de data nativ, mai degraba decit un tip
de data caracter deoarece include date binare. Consta intr-un
subcimp lungime urmat de un sir de caractere de lungime data.
Informatii suplimentare: Dimensiunea subcimp lungime este
dimensiunea tipului SQL*Loader SMALLINT in sistem(tipul SHORT
INT in C).
Sintaxa:
Lungimea maxima specificata in caracterul de control nu
include dimensiunea subcimpului lungime. Daca se specifica
optional dimensiunea maxima dupa cuvintul cheie VARCHAR,
atunci pentru aceste cimpuri se aloca un buffer de aceasta
dimensiune.
Valoarea implicita a buffer-ului este 4KB. Specificind o
valoare maxima mai mica, care este necesara pentru incarcarea
datelor se minimizeaza cerintele de memorie SQL*Loader, in
special cind sunt mai multe cimpuri VARCHAR.
Clauza POSITION, daca este folosita de locatia subcimpului
lungime, nu a primului caracter. Daca se specifica POSITION
(start:end), locatia end determina lungimea maxima a cimpului.
Start este extras din (end +1) pentru a da lungimea cimpului
in byte. Daca se specifica o lungime maxima, suprascrie orice
lungime calculata din POSITION.
Daca cimpul VARCHAR este trunchiat la sfirsitul inregistrarii
logice inainte de a se citi intreaga lungime, se lanseaza un
mesaj de atentionare.
Datele VARCHAR nu pot fi delimitate.
Conflicte intre specificarea dimensiunilor cimpurilor cu tip
de data nativ
Sunt citeva moduri de a specifica lungimea unui cimp. Daca se
specifica mai multe lungimi si sunt in conflict, una din
aceste specificari are intiietate. Daca este un conflict, se
lanseaza un mesaj de atentionare. Urmatoarele reguli determina
care lungime este folosita:
1. Dimensiunea datelor INTEGER, SMALLINT, FLOAT si DOUBLLE este
fixa. Nu este posibil sa se specifice o lungime pentru
aceste tipuri in fisierul de control. Daca sunt specificate
pozitiile de inceput si pozitiile de sfirsit, este folosita
numai pozitia de start, pozitia de sfirsit este ignorata.
2. Daca se specifica lungimea (sau pozitia) pentru cimpuri
DECIMAL, ZONED, GRAPHIC, GRAPHIC EXTERNAL sau RAW in
conflict cu dimensiunea calculata din specificarea POSITION
(start:end), atunci este folosita lungimea (sau precizia).
3. Daca dimensiunea maxima specificata pentru cimpurile VARCHAR
sau VARGRAPHIC este in conflict cu dimensiunea calculata din
specificarea POSITION (start:end), atunci este folosita
specificarea maxima.
Daca de exemplu, este un tip nativ INTEGER de 4 bytes lungime
si se specifica pozitia cimpului:
column POSITION(1:6) INTEGER
atunci este lansat un mesaj de atentionare si este folosita
lungimea corespunzatoare (4). In acest caz fisierul log arata
lungimea actuala folosita sun antetul Len in tabela
column Name
Position
Len Term Encl Datatype
------------ --------- ---- ---- ---- --------COLUMN1
1:6
4
INTEGER
Tipurile de data caracter
Datele
pot
fi
inchise
intre
caracterele
specificate.
Daca
SQL*Loader
gaseste
prima
aparitie
a
caracterului, citeste valoarea datei pina la aparitia celui
de-al doilea. Daca datele nu sunt incluse, data este citita ca
un cimp terminat. Daca se specifica o inchidere optionala,
trebuie specificata clauza TERMINATED BY (sau local in
definitia cimpului sau global in clauza FIELDS).
ENCLOSED Data este intre doi delimitatori.
char delimitatorul este un caracter singur CHAR.
Xhex_byte Delimitatorul este un caracter care are valoarea
specificata prin hex_byte in schema de codificare cum ar fi
X1F(echivalent cu 31 zecimale).X trebuie sa fie cu
majuscule.
AND Acest cuvint cheie specifica un delimitator de inchidere
care poate fi diferit de delimitatorul de inchidere initial.
Daca clauza AND nu este prezenta, delimitatorul initial si
final se presupune ca sunt aceeasi.
Exemple:
TERMINATED BY , a data string,
ENCLOSED BY a data string
TERMINATED BY , ENCLOSED BY a data string,
ENCLOSED BY ( AND )(a data string)
Semne de punctuatie in data
Uneori acelasi semn de punctuatie care este delimitator
trebuie sa fie inclus in date. Pentru a face posibil aceasta,
doua caractere de delimitare adiacente sunt interpretate ca o
singura aparitie a caracterului si acest caracter este inclus
in date. De exemplu:
(The
delimiters
are
left
parentheses,
(,
and
right
parentheses, )).)
cu specificarea cimpului:
ENCLOSED BY ( AND )
Scrie urmatorul rind in baza de date:
Nota:
O
tehnica
similara
poate
determina
dimensiunea
vectorului de legatura fara a face nici o calculatie. Se
ruleaza fisierul de control fara date si ROWS=1 pentru a
determina cerintele de memorie pentru un singur rind de date.
Se multiplica cu numarul de rinduri dorit in vectorul de
legatura si se obtine dimensiunea vectorului de legatura.
Calcularea dimensiunii buffer-ului de cimpuri
Tabela urmatoare sintetizeaza cerintele de memorie pentru
fiecare tip de date. L este lungimea specificata in fisierul
de
control,
P
este
precizia,
S
este
dimensiunea
indicatorului de lungime.
Cimpuri invariate
Tipul
Dimensiunea
INTEGER
Depinde de sistemul de operare
SMALLINT
FLOAT
DOUBLE
Cimpuri non grafice
Tip
Zecimal
(impachetat)
ZONED
RAW
CHAR (nedelimitat)
DATA (nedelimitat)
Numeric EXTERNAL
(nedelimitat)
MLSLABEL
Dimensiunea
implicita
Nu
Nu
Nu
1
Nu
Nu
Dimensiunea
specificata
(P+1)/2 rotunjit in
sus
P
L
L+S
L+S
L+S
Nu
L+S
Cimpuri grafice
Tip
Dimensiunea
implicita
GRAPHIC
GRAPHIC
EXTERNAL
VARGRAPHIC
Nu
Nu
Lungimea
Lungimea
specificata cu specificata cu
DATATYPE
POSITION
L
2*L
L-2
2*(L-2)
4KB*2
L+S
(2*L)+S
Specificarea
lungimii maxime (L)
L+S
L+S
NULLIF conditie
Clauza NULLIF poate referi coloana pe care o contine de
exemplu:
COLUMN1 POSITION(11:17) CHAR NULLIF (COLUMN1 = unknown)
Aceasta specificare poate fi folosita daca se doreste ca
anumite date sa fie inlocuite cu null. Valoarea coloanei este
determinata prima data din fisierul de date. Aceasta este
setata la null inainte ce inserarea sa aiba loc.
Nota: Acelasi efect se obtine din sir SQL si functia NVL.
Coloana null la sfirsitul inregistrarii
Cind fisierul de control specifica mai multe cimpuri pentru o
inregistrare decit sunt prezente in inregistrare, SQL*Loader
trebuie sa determine daca coloanele (specificate) ramase pot
fi considerate null sau daca se genereaza eroare.
Incarcarea cimpurilor in intregime blank
Cimpurile in intregime blank pentru cimpuri numerice sau
cimpuri data determina refuzarea (reject) a inregistrarii.
Penru a incarca unele din aceste cimpuri ca null, se foloseste
clauza NULLIF cu cuvintul cheie BLANKS. Daca toate cimpurile
CHAR
care
sunt
in
intregime
blank
dar
marginile
de
delimitatori, atunci sunt incarcate toate blank-urile. Altfel
cimpul este incarcat ca null.
Eliminarea blank-urilor si tab-urilor
Blank-urile si tab-urile constituie WHITESPACE. Depinzind de
cum este specificat cimpul WHITESPACE de la inceputul cimpului
(leading whitespace) sunt incluse sau nu cind cimpul este
inserat in baza de date.
Tipuri de date
tipul CHAR
tipul DATE
tipul numeric EXTERNAL
- INTEGER EXTERNAL
- FLOAT EXTERNAL
- DECIMAL EXTERNAL (impachetat)
- ZONED (zecimal) EXTERNAL
Cimpurile VARCHAR
Cu toate ca cimpurile VARCHAR contin date caracter, aceste
cimpuri nu sunt niciodata trunchiate. Un cimp VARCHAR include
toate WHITESPACE care sunt parte a cimpului in fisierul de
date.
Specificatii ale lungimii cimpurilor
Sunt doua cai de a specifica lungimea cimpului. Daca un cimp
are o lungime constanta care este definita in fisierul de
control, aceasta este o dimensiune predeterminata. Daca
lungimea unui cimp nu este cunoscuta dinainte, dar depinde de
indicatori in inregistrare, cimpul este delimitat.
Dimensiunea cimpurilor predeterminate
Cimpurile care au o dimensiune predeterminata sunt specificate
cu pozitia de start si pozitia de sfirsit, sau cu o lungime,
de exemplu:
loc POSITION(19:31)
loc CHAR(14)
Cimp 1
Cimp 2
TERMINATED BY ,
TERMINATED BY ,
OPTIONALLY ENCLOSED BY OPTIONALLY ENCLOSED BY
|-----------------|
|-----|
|_||_|_|_|_|_|a|a|a|_||,|_|_|_|_|_|_|b|b|b|,|_|
Spre deosebire de cazul in care cimpul anterior este
TERMINATED
BY
WHITESPACE,
aceasta
specificare
elimina
WHITESPACE de la inceput chiar daca este specificata o pozitie
de start pentru cimpul curent.
Nota:
Daca
sunt
prezenti
delimitatorii
de
inchidere,
WHITESPACE de la inceput dupa delimitatorul initial de
inchidere
sunt
retinuti,
dar
WHITESPACE
dinaintea
delimitatorului se elimina.
WHITESPACE de la sfirsitul cimpului
WHITESPACE de la sfirsitul cimpului sunt suprimati numai
dintr-un cimp caracter care are dimensiunea predeterminata.
Sunt suprimati intotdeauna pentru aceste cimpuri.
Cimpuri inchise
Daca un cimp este inchis sau terminat si inchis, atunci orice
WHITESPACE din afara delimitatorilor de inchidere nu este
parte a cimpului. Orice WHITESPACE intre delimitatorii de
inchidere apartin cimpului, indiferent daca sunt la inceput
sau la sfirsit.
Specificarea
Data
Rezultat
Dimensiune
predeterminata
Terminat
Inchis
Terminat si inchis
_aa_
_aa_,
_aa_
_aa_
,
Inchidere
_aa_
,
optionala(prezenta)
Inchidere
optionala _aa_,
(absenta)
Cimpul anterior
_aa_
terminat cu
WHITESPACE
_aa
WHITESPACE
de inceput
prezent
Da
WHITESPACE
de sfirsit
Prezent
Nu
_aa_
_aa_
_aa_
Da
Da
Da
Da(2)
Da
Da
_aa_
Da
Da
aa_
Nu
Da
aa(3)
Nu
(3)
Pastrarea WHITESPACE
Pentru a impiedica eliminarea WHITESPACE din toate cimpurile
CHAR, DATE, NUMERIC EXTERNAL, se specifica in fisierul de
control PRESERVE BLANKS.
Cuvintul cheie PRESERVE BLANKS
PRESERVE BLANKS retine WHITESPACE de la inceputul cimpului
cind delimitatorul de inchidere optional nu este prezent. Lasa
deasemenea WHITESPACE de la sfirsit intacte cind cimpul este
specificat cu dimensiune predeterminata. Acest cuvint cheie
pastreaza tab-urile si blank-urile; de exemplu, daca cimpul
_aa_,
(unde- reprezinta blank) este incarcat cu urmatoarea clauza in
fisierul de control:
TERMINATED BY , OPTIONALLY ENCLOSED BY
Atunci sunt retinute WHITESPACE de la inceput si de la sfirsit
daca este specificat PRESERVE BLANKS, altfel WHITESPACE de la
inceput sunt eliminate.
Nota: Cuvintul BLANKS nu este optional, trebuie specificate
ambele cuvinte.
Terminated by WHITESPACE
Cind cimpul anterior este terminat cu WHITESPACE, PRESERVE
BLANKS nu pastreaza spatiile de la inceputul cimpului urmator
decit daca cimpul este specificat cu clauza POSITION care
include aceste WHITESPASCE. Altfel, SQL*Loader scaneaza mai
departe la sfirsitul cimpului anterior pina gaseste un
caracter non blank sau non tab.
Aplicarea operatorilor SQL la cimp
O mare varietate de operatori SQL pot fi aplicati la cimpuri
de date cu siruri SQL. Acest sir poate contine orice
combinatie de expresii SQL care sunt recunoscute de Oracle ca
valoare pentru clauza VALUE sau comanda INSERT. In general
orice functie SQL care returneaza o singura valoare poate fi
folosita. Numele coloanei si numele coloanei in sirul SQL
trebuie sa corespunde exact, ca in exemplul urmator:
LOAD DATA
INFILE *
APPEND INTO TABLE XXX
(LAST position(1:7) char UPPER(:\LAST\),
FIRST position(8:15) char UPPER(:FIRST)
)
BEGINDATA
Phil Locke
Jason Durbin
Sirul SQL trebuie sa fie cuprins intre ghilimele. In exemplu,
LAST trebuie cuprins intre ghilimele pentru ca este un cuvint
cheie SQL*Loader. FIRST nu este cuvint cheie SQL*Loader si de
aceea nu necesita ghilimele.
Sirul SQL apare dupa orice alte specificari ale coloanei date.
Este evaluat dupa clauza NULLIF sau DEFAULTIF dar inainte de
masca DATE. Nu poate fi folosit in cimpuri RECNUM, SEQUENCE,
CONSTANT sau SYSDATE. Daca RDBMS nu recunoaste sirul,
incarcarea se termina cu eroare. Daca sirul este recunoscut
fisier
de
control
dupa
ce
s-au
facut
corectii
sau
actualizarile corespunzatoare. Un nume de fisier de respingere
specificat in linia de comanda devine fisierul de respingere
asociat cu prima comanda INFILE din fisierul de control. Daca
fisierul de respingere este specificat si in fisierul de
control, valoarea din linia de comanda il suprascrie.
DISCARDMAX(respingeri pina la abandonare)
DISCARDMAX specifica numarul de inregistrari respinse pina
cind se termina incarcarea. Valoarea implicita este ca toate
respingerile sunt permise. Pentru a opri incarcarea la prima
inregistrare respinsa se specifica unu.
ERRORS(erori permise)
ERRORS specifica numarul maxim de erori de inserare admise.
Daca numarul de erori depaseste valoarea parametrului ERRORS,
SQL*Loader termina incarcarea. Implicit este 50. Pentru a nu
se permite erori se specifica ERRORS=0. Pentru a permite toate
erorile se specifica un numar mare.
Intr-o singura tabela incarcata SQL*Loader termina incarcarea
cind erorile depasesc limita. Toate datele inserate pina la
acest punct sunt realizate.
SQL*Loader mentine consistenta inregistrarilor intre toate
tabelele. Prin urmare, incarcarea in mai multe tabele nu se
termina imediat daca erorile depasesc limita. Cind SQL*Loader
intilneste numarul maxim de erori intr-o incarcare in mai
multe tabele, continua sa incarce rinduri pentru a asigura ca
toate rindurile valide incarcate anterior in tabele sunt
incarcate in toate tabelele si/sau rindurile refuzate sunt
eliminate din toate tabelele. In toate cazurile, SQL*Loader
scrie rindurile eronate in fisierul bad.
FILE(fisierul in care se incarca)
FILE specifica fisierul bazei de date in care se aloca extent.
Este folosit numai pentru incarcare in mod paralel. Prin
modificarea valorii parametrului FILE pentru diferite procese
SQL*Loader, datele pot fi incarcate intr-un sistem cu o minima
folosire a discului.
LOAD(inregistrari de incarcat)
LOAD specifica numarul maxim de inregistrari logice care se
incarca(dupa sarirea unui numar specificat de inregistrari).
Implicit sunt incarcate toate inregistrarile. Nu sunt erori
daca sunt mai putine inregistrari decit numarul maxim
specificat.
LOG(fisierul log)
LOG specifica fisierul log pe cae SQL*Loader il creeaza ca sa
memoreze informatiile despre procesul de incarcare. Daca nu sa specificat numele fisierului, este folosit implicit numele
fisierului de control cu extensia LOG.
PARFILE(fisier de parametri)
PARFILE specifica un fisier care contine cei mai folositi
parametri in linia de comanda. De exemplu linia de comanda
poate fi:
SQLLDR PARFILE=example.par
Si fisierul de parametrii poate avea urmatorul continut:
userid=scott/tiger
control=example.ctl
errors=9999
log=example.log
PARALLEL(incarcare paralel)
PARALLEL specifica daca incarcarea directa poate opera in
sesiuni multiple concurente pentru a incarca date in aceeasi
tabela.
ROWS(rinduri per realizare)
Numai pentru incarcare conventionala: ROWS specifica numarul
de rinduri in vectorul de legatura. Implicit este 64.
Numai pentru incarcarea directa: ROWS identifica numarul de
rinduri care se citesc din fisierul de date inainte de a salva
datele. Implicit datele sunt salvate o data la sfirsitul
incarcarii.
Deoarece incarcarea directa este optimizata din punct de
vedere al performantei, aceasta foloseste buffere care au
aceeasi dimensiune si format ca si blocurile I/O ale
sistemului. Numai buffer-ele pline sunt scrise in baza de date
astfel ca ROWS este aproximativ.
SILENT
Cind incepe SQL*Loader, apare pe ecran si este inregistrat in
fisierul log un mesaj de antet:
SQL*Loader:
Production on Wed Feb 24 15:07:23...
Copyright (c) Oracle Corporation...
Pe masura ce se executa SQL*Loader apar mesaje de raspuns pe
ecran, ca de exemplu:
Commit point reached - logical record count 20
SQL*Loader poate afisa mesaje de eroare cum ar fi:
Record 4: Rejected - Error on table EMP
ORA-00001: unique constraint <name> violated
Pentru a suprima aceste mesaje se specifica SILENT cu un
argument.
De exemplu, se poate suprima aparitia mesajului antet si de
raspuns care in mod normal apar pe ecran cu urmatorul argument
in linia de comanda:
DILENT=(HEADER, FEEDBACK)
Cuvintele cheie corespunzatoare:
HEADER - Suprima aparitia mesajelor de tip header care in mod
normal apar pe ecran. Mesajul header apare in fisierul log.
FEEDBACK - Suprima mesajul "commit point reached..." care in
mod normal apare pe ecran.
ERRORS - Suprima mesajele de eroare care apar in fisierul log
se intilnesc cind o inregistrare genereaza o eroare Oracle
care determina sa fie scrisa in fisierul bad. Apare numai
numarul erorilor respinse.
DISCARDS - Suprima masajul din fisierul log pentru fiecare
inregistrare scrisa in fisierul de respinse.
PARTITIONS - Aceasta optiune a lui Oracle8 pentru incarcarea
directa
a
unei
tabele
partitionate
suprima
scrierea
statisticilor per partitie in fisierul log.
ALL - Implementeaza toate cuvintele cheie.
SKIP(inregistrari de sarit)
Len
-----4
10
9
4
8
8
2
logical
logical
logical
logical
records
records
records
records
skipped:
read:
rejected:
discarded:
0
7
0
0
Statisticile
pentru
tabelele
nemodificate fata de Oracle7.
nepartitionate
sunt
Analiza
comparativa
conventionala
incarcare
directa
si
incarcare
de
date
in
incarcarea
directa
si
SQL*Loader
Scrierile bazei de
date
SQL*Loader
Procese utilizator
Genereaza comenzi
SQL
Genereaza comenzi
SQL
Serverul Oracle
Procesarea comenzilor SQL
Gestiunea spatiului
Citeste extenturi noi
Ajusteaza high
watermark
Buffer cache
Baza de date
Oricare
rind
care
incarca
restrictia
este
refuzat.
Constringerea Unique este verificata cind este refacut indexul
dupa incarcarea completa. Daca s-a gasit o incalcae a
restrictiei indexul este adus in starea INDEX UNUSABLE.
Constringerile dezactivate
constringerile de verificare
constringere de referinta (chei straine)
Reactivarea restrictiilor
Cind este completa incarcarea, consringerile de integritate
vor fi reactivate automat daca este specificata clauza
REENABLE.
Sintaxa este urmatoarea:
Cuvintul cheie optional DISABLED_CONSTRAINTS este furnizat
pentru o citire mai facila.
Daca este inclusa clauza EXCEPTIONS, tabela trebuie sa existe
si trebuie sa se poata insera in ea. Aceasta tabela contine
ROWID a tuturor rindurilor care incalca constringerea de
integritate.
Contine
deasemenea
numele
constringerii
de
integritate.
Daca nu se foloseste clauza REENABLE constringerea poate fi
reactivata manual. Toate rindurile din tabela sunt verificate.
Daca Oracle gaseste erori in datele noi genereaza mesaj de
eroare. Numele constringerii incalcate si ROWID-ul datei
eronate sunt scrise in tabela exceptie, daca este specificata
vreuna.
Fisierul log SQL*Loader descrie constringerea care a fost
incalcata, unele care au fost reactivate si ce erori,
impiedicarea reactivarii oricarei constringeri contine si
numele tabelei exceptie care a fost specificata pentru fiecare
tabela incarcata.
Atentie: Atit timp cit in tabela ramin date eronate,
constringerea de integritate nu poate fi reactivata.
Sugestie:
Deoarece
restrictiile
de
integritate
trebuie
reverificate pentru tabela intreaga, performanta poate fi
crescuta daca se foloseste incarcarea conventionala, cind se
incarca un numar mic de rinduri intr-o tabela mare.
Triggere de inserare
Trigger-ele de inserare sunt dezactivate cind incepe o
incarcare directa. Dupa ce s-au incarcat rindurile si recreat
indecsii, toate trigger-ele care au fost dezactivate sunt
automat reactivate. Fisierul log inregistreaza toate triggerele care au fost dezactivate pentru incarcare. Aceasta permite
urmarirea erorilor la reactivare.
Spre deosebire de constringerile de integritate, trigger-ele
de inserare nu se reaplica la tabela intreaga cind sunt
reactivate. Ca rezultat, trigger-ele de inserare nu actioneaza
pentru orice rind incarcat in incarcarea directa. Cind se
aplica incarcarea directa, aplicatia trebuie sa se asigure ca
orice comportament asociat cu trigger-ele de inserare este
anulat pentru rindurile noi.
Inlocuirea triggere-lor de inserare cu constringere de
integritate
Cind
se
foloseste
incarcarea
directa
paralela,
sunt
disponibile
optiuni
pentru
specificarea
atributelor
segmentelor temporare care sa fie alocate loader-uli.
Specificarea segmentelor temporare
Este recomandat ca fiecare sesiune de incarcare directa
concurenta sa foloseasca fisiere localizate pe discuri
diferite pentru a permite maximum I/O...
Folosind cuvintul cheie FILE a clauzei OPTIONS se poate
specifica numele fisierului oricarui fisier valid de date in
tablespace a obiectului (tabela sau partitie) care se incarca.
Exemplul urmator arata o portiune a unui fisier de control
folosit de sesiunea SQL*Loader:
LOAD DATA
INFILE load1.dat
INSERT INTO TABLE emp
OPTIONS(FILE=/dat/data1.dat)
(empno POSITION(01:04) INTEGER EXTERNAL NULLIF empno=BLANKS
...
Se poate specifica fisierul bazei de date in care este alocat
segmentul temporar cu cuvintul cheie FILE in clauza OPTIONS
pentru fiecare obiect (tabela sau partitie) in fisierul de
control. Se poate specifica deasemenea parametrul FILE in
linia de comanda a oricarei sesiuni concurente SQL*Loader, dar
acesta va fi aplicat global la toate obiectele care se incarca
cu aceasta sesiune.
Folosirea cuvintului cheie FILE
Cuvintul cheie FILE in Oracle8 are urmatoarele restrictii cu
incarcarea directa:
1.Pentru tabele nepartitionate, se incarca o singura partitie:
fisierul specificat trebuie sa fie in tablespace al tabelei
care se incarca.
2. Pentru tabele partitionate, se incarca o singura partitie:
fisierul specificat trebuie sa fie in tablespace a partitiei
care se incarca.
3. Pentru tabele partitionate, incarcarea completa a tabelei:
fisierul specificat trebuie sa fie in tablespace a
partitiilor care se incarca, asta insemnind ca toate
partitiile trebuie sa fie in acelasi tablespace.
Folosirea cuvintului cheie STORAGE
Cuvintul cheie STORAGE poate fi folosit pentru a specifica
atributele de memorare ale segmentelor temporare alocate
pentru o incarcare paralela. Daca nu se foloseste cuvintul
cheie STORAGE, sunt folosite atributele de memorare ale
segmentului care contine obiectul care se incarca.
OPTIONS(STORAGE=(MINEXTENTS n1 MAXEXTENTS n2 INITIAL n3[KIM]
NEXT n4[KIM] PCTINCREASE n5)
OPTIONS (STORAGE=(INITIAL 100M PCTINCREASE 0))
Cuvintul cheie STORAGE poate fi folosit numai in fisierul de
control si nu in linia de comanda. Utilizarea cuvintului cheie
STORAGE pentru a specifica altceva decit PCTINCREASE 0,
INITIAL sau NEXT nu este recomandata.
Activarea constringerilor dupa o incarcare directa paralela
Actiune:
Se
specifica
incarcarea
directa
cu
comanda
DIRECT=TRUE in linia de comanda, se sterge comanda din
fisierul de control sau se comenteaza.
SQL*Loader-00258 Maximum number of SORTED INDEXES (number)
exceeded
on table string
Cauza:Sint prea multi indecsi in clauza SORTED INDEX. Mesajul
afiseaza numarul maxim permis.
Actiune: Se reduce numarul de indecsi in clauza SORTED INDEX
sau sau se foloseste incarcarea conventionala in locul
incarcarii directe.
SQL*Loader-00259 Could not escalate DDL share lock to
exclusive on table string
Cauza: Eroarea se intilneste cin un alt utilizator face o
blocare a tabelei, de exemplu un utilizator face un select pe
tabela. Faza de blocare trebuie elininata momentan.
Actiune: Se da o sansa fazei de blocare sa se termine si se
reia sau se foloseste incarcarea conventionala.
SQL*Loader-00262 PIECED keyword (on column string) allowed
only when path
is direct
Cauza: Cuvintul cheie PIECED nu poate fi folosit intr-o
incarcare conventionala.
Actiune: Se elimina PIECED sau se foloseste calea directa.
SQL*Loader-00263 PIECED column string must be last specified
column in table
string
Cauza: O coloana care nu este ultima coloana din tabela a fost
specificata ca PIECED.
Actiune: Se elimina cuvintul cheie PIECED sau se plasesza
coloana ultima.
SQL*Loader-00264 File mode token string parsed but ignored
Cauza: In fisierul de control s-a folosit un mod invechit. La
procesarea fiserului de control este folosit un sir de optiuni
mai degraba decit cuvinte cheie cum ar fi STREAM, RECORD,
FIXED si VARIABLE.
Actiune: Nu cere actiune. Este un mesaj de informare. Se
elimina cuvintele cheie invechite pentru a elimina mesajele
fara a schimba modul in care sint procesate datele din
fisierul de date.
SQL*Loader-00265 Unable to get default character set name.
Cauza: SQLL*Loader nu poate localiza setul implicit de
caractere pentru mediul de lucru.
Actiune: Se furnizeaza numele setului de caractere cu cuvintul
cheie CHARACTERSET.
SQL*Loader-00266 Unable to locate character set handle for
string.
Cauza: SQLL*Loader nu poate gasi setul de caractere pentru
setul numit.
Actiune: Se corecteaza numele setului de caractere.
SQL*Loader-00267 Control file must be first data file.
Cauza: Fisereul de control este specificat ca si continind
date folosind clauza INFILE "*" dar alt fisier de data a fost
denumit primul.
TRAILING NULLCOLS)
Cauza: Inregistrarea logica se termina inainte de a se gasi
toate cimpurile specificate.
Actiune: Daca cimpurile lipsa pot fi incarcate ca null, se
foloseste clauza TRAILING NULLCOLS. Altfel, se corecteaza
datele.
SQL*Loader-00623 second enclosure string not present
Cauza: S-a gasit sfirsitul unei inregistrari logice fara sa
fie gasit al doilea element de inchidere.
Actiune: Se introduce delimitatorul lipsa.
SQL*Loader-00624 no terminator found after TERMINATED and
ENCLOSED
field
Cauza: Nu s-a gasit delimitatorul de inchidere dupa ce s-a
terminat cimpul delimitat.
Actiune: Se introduce delimitatorul lipsa.
SQL*Loader-00625 Multibyte character error in control file.
Cauza: In fiserul de control s-a gasit un sir de caractere
incomplet.
Actiune: Se verifica fisierul de control si se corecteaza
daca e cazul.
SQL*Loader-00626 Character set conversion buffer overflow.
Cauza: Conversia de la setul de caractere af fisierului de
date la setul de caractere al clientului necesita mai mult
spatiu decit este in bufferul de conversie. Dimensiunea
bufferului de conversie este limitata de de dimensiunea
coloanelor VARCHAR2.
Actiune: Inregistrarile sint respinse. Datele nu incap in
coloana.
SQL*Loader-00627 Character set conversion graph not available.
Cauza: Converaia de la setul de caractere al fisierului de
date la setul de caractere client esueaza pentru ca nu e
disponibil graficul de conversie.
Actiune: Se contacteaza Oracle. Se verifica instalarea
NLSRTL.
SQL*Loader-00628 Character set conversion error.
Cauza: Eroare la conversia setului de caractere.
Actiune: Se contacteaza Oracle. Se verifica instalarea
NLSRTL.
SQL*Loader-00640 Variable length field was truncated.
Cauza: S-a intilnit sfirsitul unei inregistrari logice
inaintea terminarii unui cimp de lungime variabila. Lungimea
fiecarui cimp de lungime variabila este inclusa in cimp astfel
incit SQL*Loader stie cite date trebuie sa fie prezente.
Actiune:
Se
verifica
datele
pentru
o
trunchiere
necorespunzatoare si se verifica fisierul de control si
fisierul log cimpul poate incepe intr-un loc gresit.
SQL*Loader-00641 Invalid packed decimal nibble.
Cauza:
Fiecare
byte
(caracter)
dintr-un
cimp
zecimal
impachetat contine doua jumatati de octet. Fiecare jumatate de
octet trebuie sa aiba o valoare valida.
Actiune: Se verifica specificarile din fisierul de control si
fisierul log pentru a se asigura ca locatia s-a specificat
corect. Se verifica si contunutul cimpului.