SQLLDR - problem mit WENN-Klauseln
Habe ich mehrere when-Klauseln in meinem control-Datei, die Daten, die ich bin laden in die Hälfte von Ihnen erfüllt, wenn die Klauseln und eingefügt wird in die gewünschte Tabelle. Die andere Hälfte nicht (was ich erwarte), aber ich hatte erwartet, dass die Daten, die nicht erfüllen, wenn die Bedingungen werden in einer Datei verwerfen, aber es wird keines erstellt.
Irgendwelche Ideen?
LOAD DATA
INFILE '/u04/app/vpht_app/flat_files/icr_load/marc/sqlldr_load/CSSO_CCRBSCREDENTIALS_COMSUMER23062010160322.txt'
BADFILE '/u04/app/vpht_app/flat_files/icr_load/marc/sqlldr_load/CSSO_CCRBSCREDENTIALS_COMSUMER23062010160322.bad'
DISCARDFILE '/u04/app/vpht_app/flat_files/icr_load/marc/sqlldr_load/CSSO_CCRBSCREDENTIALS_COMSUMER23062010160322.dsc'
INSERT
INTO TABLE "DCVPAPP"."RBS_CC_CUSTOMERINFO"
INSERT
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(CC_USER_NAME POSITION(24:73),
ACCOUNTID POSITION(1:12),
CUSTOMERID POSITION(14:22))
INTO TABLE "DCVPAPP"."RBS_CC_SECURITYDETAILS"
WHEN (481:481) = 'N' AND (477:479) ='0'
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(
CC_USER_NAME POSITION(24:73),
RBSPIN POSITION(75:274),
RBSPASSWORD POSITION(276:475),
fill1 filler,
fill2 filler,
fill3 filler,
fill4 filler,
FAILCODECOUNT POSITION(477:479),
FAILPASSWORDCOUNT POSITION(477:479)
)
INTO TABLE "DCVPAPP"."RBS_CC_SECURITYDETAILS"
WHEN (481:481) = 'N' AND (477:479) ='1'
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(
CC_USER_NAME POSITION(24:73),
RBSPIN POSITION(75:274),
RBSPASSWORD POSITION(276:475),
fill1 filler,
fill2 filler,
fill3 filler,
fill4 filler,
FAILCODECOUNT POSITION(477:479),
FAILPASSWORDCOUNT POSITION(477:479)
)
Meine Tabellenstruktur ist:
Create table RBS_CC_CUSTOMERINFO
(
CC_USER_NAME VARCHAR2(50),
ACCOUNTID VARCHAR2(12) NOT NULL,
CUSTOMERID VARCHAR2(9) NOT NULL,
CUST_MIGRATION_STATUS VARCHAR2(1) DEFAULT 'N' NOT NULL,
CONSTRAINT pk_01 PRIMARY KEY (CC_USER_NAME)
);
Create table RBS_CC_SECURITYDETAILS
(
CC_USER_NAME VARCHAR2(50),
RBSPIN VARCHAR2(200) NOT NULL,
RBSPASSWORD VARCHAR2(200) NOT NULL,
FAILCODECOUNT NUMBER (9) NOT NULL,
FAILPASSWORDCOUNT NUMBER (9) NOT NULL,
CONSTRAINT pk_secur
FOREIGN KEY (CC_USER_NAME)
REFERENCES RBS_CC_CUSTOMERINFO(CC_USER_NAME)
)
und meine sample-Daten ist unten( Diese haben schon Recht, gepolstert, da diese Feste Felder) der Letzte Datensatz verworfen werden sollte, und legte Sie in der Seite, die Datei verwerfen, da es nicht treffen keine der when-Klausel Bedingungen, aber keine discard-Datei erstellt. Ich habe es mit einer wenn-Klausel und die discard-Datei erstellt wurde,scheint die Verwendung von mehr als einer Tabelle der discard-Datei nicht erstellt.
ACC000000001,CUSTID213,MARC_VAF ,1234 -, pet -, 0 ,N,N,VOLL ACC000000002,CUSTID214,TOBY_123 ,1352 ,bailey ,1 ,Y,N,VOLL ACC000000003,CUSTID215,KEVIN_VAF81 ,YY33OF ,Wasser ,2 ,Y,N,VOLL ACC000000015,CUSTID227,SAM_EGD ,CARRY42 ,einige Passwort ,-3 ,Y,N,VOLL
Dank
INSERT
Linien normal?InformationsquelleAutor user123 | 2011-02-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich verwendet SQL*Loader auf deinen sample-Daten, und fand das folgende in der log-Datei, die SQL*Loader-Links hinten:
In den ersten block, werden alle Daten geladen, denn es gab keine
WHEN
Klauseln zu scheitern. Mit den anderen beiden, alle Zeilen die nicht denWHEN
Klauseln. Da der erste block geladen, alle vier Reihen, es gab nichts zu schreiben, zu verwerfen-Datei, also SQL*Loader nicht erstellen.Den
WHEN
Klauseln in der zweiten zwei blocks scheinen die Referenz-Teile von den Daten ein langer Weg zum Ende der Probe von Daten. Sie beide scheinen, um die Verwendung von Daten aus Positionen 477 ab, in der Erwägung, dass die längste Zeile in der Beispiel-Daten ist nur 68 Zeichen lang. Da jeder Bereich hat bei den meisten ein Leerzeichen, werde ich davon ausgehen, dass Ihre Beispieldaten hat irgendwie entstellt und, dass es viele weitere Bereiche als oben.Jedenfalls habe ich auskommentiert Abschnitt des controlfile, dass Einsätze in
RBS_CC_CUSTOMERINFO
, leerten sich die Tische und reran SQL*Loader. Diese Zeit, die ganze vier Zeilen, die geschrieben wurden, um Ausschuss-Datei.Wenn Sie wünschen, dass Daten, die entspricht keiner der beiden
WHEN
Klauseln werden geschrieben, um eine discard-Datei, wie über die Aufteilung der controlfile in zwei separate controlfiles, die lädt die Daten inRBS_CC_CUSTOMERINFO
mit dem ersten block, und lädt die Daten inRBS_CC_SECURITYDETAILS
mit den beiden anderen Blöcken?InformationsquelleAutor Luke Woodward