2017-03-23 18 views
0

Ich versuche, eine sqlldr.ctl-Datei WHEN-Klausel zu begrenzen, um die importierten Datensätze auf diejenigen zu beschränken, die mit einem Teil des aktuellen Namens des Schemas übereinstimmen.sqlldr WHEN-Klausel

Der Code Ich habe (was tut NICHT Arbeit) ist:

LOAD DATA 
TRUNCATE INTO TABLE TMP_PRIM_ACCTS 
when REGION_NUM = substr(user,-3,3) 
Fields terminated by "|" Optionally enclosed by '"' 
Trailing NULLCOLS 
    (PORTFOLIO_ACCT, 
    PRIMARY_ACCT_ID NULLIF (PRIMARY_ASSET_ID="NULL"), 
    REGION_NUM NULLIF (PARTITION_NUM="NULL") 
) 

sqlldr kehrt:

SQL*Loader-350: Syntax error at line 3. 
Expecting quoted string or hex identifier, found "substr". 
when PARTITION_NUM = substr(user,-3,3) 

ich nicht einfache Anführungszeichen setzen können um "user", denn das macht sie zu die literale Zeichenfolge "Benutzer". Kann jemand erklären, wie ich den "aktiven" Benutzer in dieser WANN-Klausel referenzieren kann?

Vielen Dank!

Antwort

0

Können Sie so etwas versuchen? (Jetzt kann ich nicht mit sqlldr machen Test, aber das ist Syntax I zum Ändern Werte verwendet):

when REGION_NUM = "substr(:user,-3,3)" 
0

Es nicht so aussieht Sie können. The documentation nur zeigt fester Wert:

enter image description here

einen Ausdruck in when diese Klausel zu verwenden Versuch (oder in nullif, dachte, ich würde versuchen, um zu sehen, wenn Sie eine Ablehnung basierend auf null PK Wert verursachen könnten) einfach siehe den Literalwert im Protokoll:

Table TMP_PRIM_ACCTS, loaded when REGION_NUM = 0X73756273747228757365722c2d332c3329(character 'substr(user,-3,3)') 

das ist eine Art, was Sie genannt, wenn Sie sagen, Sie nicht user zitieren könnten, aber man müßte ziemlich die ganze Sache sowieso. Mit :user funktioniert auch nicht, der Doppelpunkt wird nur als ein anderes Zeichen gesehen, es wird nicht versucht, stattdessen eine Spalte namens user zu finden.

Der einfachste Ansatz besteht darin, die Datendatei vorzuverarbeiten und alle Zeilen zu entfernen, die nicht mit dem Muster übereinstimmen (z. B. über einen Regex). Das wäre eigentlich etwas einfacher, wenn Sie anstelle von SQL * Loader eine externe Tabelle verwenden würden.

Alternativ können Sie Ihre Steuerdatei generieren und den korrekten Literalwert basierend auf dem Benutzer einbetten, mit dem Sie eine Verbindung herstellen.

Verwandte Themen