Wenn-Klausel in SQL-Loader
Ist es möglich mit der WENN-KLAUSEL in sql-loader? Ich hatte geschrieben, ein code, aber es gibt mir Fehler.
INTO TABLE TF_RTB9_DTL
WHEN ((01) = 'D') OR (if
(POA_COU_VAL = 0)
then MAST_POA_ID = null
end if)
FIELDS TERMINATED BY "~" OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
TRANS_TYP POSITION(3),
BO_ID ,
NAME ,
MID_NAM ,
LAS_NAM ,
PAN ,
NAM_FIR_JOINT ,
MIDD_NAM_FIR_JOINT,
LAS_NAM_FIR_JOINT ,
PAN_FIR_JOINT ,
NAM_SEC_JOINT ,
MIDD_NAM_SEC_JOINT,
LAS_NAM_SEC_JOINT ,
PAN_SEC_JOINT ,
ADD_LIN_1 ,
ADD_LIN_2 ,
ADD_LIN_3,
CITY ,
STATE ,
COUNTRY ,
PIN_COD ,
PERM_ADD_LIN_1 ,
PERM_ADD_LIN_2 ,
PERM_ADD_LIN_3 ,
PERM_CITY ,
PERM_STATE ,
PERM_COUNTRY ,
PERM_PIN_COD ,
POA_COU_VAL ,
MAST_POA_ID ,
TRANS_ID
)
Wenn POA_COU_VAL ist 0 als POA_COU_VAL muss null sein und der nächste Wert sein sollte, geben Sie in der TRANS_ID. Wie kann ich das erreichen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
SQL*Loader ist ein Programm zum laden große Mengen von Daten. Es hat nur begrenzte Einrichtungen für die Manipulation der Daten während des Ladeprozesses.
Wenn Sie möchten, um die Daten transformieren, Sie sollten mit externen Tabellen statt. Diese sind sehr ähnlich zu SQL*Loader (die definition verwendet nahezu die gleiche syntax, sondern lediglich die Daten-Datei der Datenbank als Tabelle. Das bedeutet, Sie können mithilfe von SQL auf. Anstatt also über das aufrufen von SQL*Loader von der Befehlszeile, die Sie würde ausführen einer insert-Anweisung wie folgt aus:
Nur in Ihrer situation, die Sie brauchen, um zu explodieren, das Projekt der SELECT-Klausel, so können Sie einen FALL () - Anweisung zu implementieren, die Ihre zusätzliche Logik.
Erfahren Sie mehr über externe Tabellen hier.
SQL*Loader
WHEN
- Klausel hat nur begrenzte booleschen Operatoren, insbesondereOR
fehlt ( siehe http://docs.oracle.com/cd/B19306_01/server.102/b14215/ldr_control_file.htm#i1005657).Wenn Sie haben Verwendung von SQL*Loader (und nicht schalten können, um externe Tabellen als APC empfohlen), müssen Sie multiplizieren Sie den
INTO
Abschnitte für jeden Teil IhresOR
- Klausel.Beispiel:
Oder verwenden Sie den
NULLIF
Funktion ( http://docs.oracle.com/cd/B19306_01/server.102/b14215/ldr_field_list.htm#i1009345 )SQL*Loader ist ein heikles Instrument, Sie würde wahrscheinlich schneller Ergebnisse mit externen Tabellen, wenn Sie in der Lage sind, Sie zu benutzen (Datei muss auf dem Oracle-Server-Maschine in der Erwägung, dass der SQL*Loader ist in der Lage, eine Verbindung zu einem Oracle-Instanz).