Können Variablen übergeben werden, die eine SQL*Loader control-Datei über sqlldr Befehl?
Unten ist mein Control-Datei Beispiel :
OPTIONS (skip=1,errors=1000,direct=true,rows=10000)
load data
append
into table TABLE_NAME
fields terminated by ','
OPTIONALLY ENCLOSED BY '"'
trailing nullcols(
DATE_ID DATE_ID_VALUE,
DESC1 char(1000),
DESC2 char(1000),
DISP_URL char(1000),
DEST_URL char(1000),
ACCT_ID ACCOUNTID_VALUE,
Acct_num ACCOUNT_NUM,
created_date SYSDATE
)
Muss ich weiterleiten DATE_ID_VALUE,ACCOUNTID, ACCOUNTNUM Werte von sqlldr Befehl. Leite die remaming Spalten von Daten über csv-Datei, die inturn ist vergangen von sqlldr "DATEN" - parameter. Gibt es einen Weg, vorbei an anderen gewünschten Parameter über sqlldr-Befehl oder eine andere Möglichkeit, es zu tun?
Unten ist mein sqlldr Befehl :
sqlldr userid=abc/abcdef@abcdefgh CONTROL= cont.ctl DATA= $csvFilePath LOG=admaster.log BAD=admaster.bad
Sie können erstellen von benutzerdefinierten Steuerelement-Datei on-the-fly einfach vor dem Aufruf von SQLLoader
ich möchte nicht zum erstellen von neuen control-Datei für jeden upload, so habe ich es eingestellt ...
Sie nicht machen es parametriert obwohl @arul... so dass Sie gehen zu müssen es anders machen. Wenn Sie versuchen, hinzufügen einer Konstante, warum nicht erstellen Sie einfach einen Blick auf die Tabelle, oder wählen Sie die Daten in Ihre Anwendung. Es gibt keine Notwendigkeit, um es in der ctl-Datei.
Thks Jungs für ur Antworten ... Lassen Sie mich Ihnen sagen, der Prozess in meiner Anwendung wird der Benutzer ein Projekt erstellen zuerst aus, die ich account_id(Projekt-Name) und account_num(Letzte eingefügte id), anhand dieser beiden Werte muss ich einfügen der csv-Daten in Tabellen mit sqlldr control-Datei. Jetzt pls empfehlen Sie mir, wie es getan werden kann ... HINWEIS: für jedes Projekt gibt es 4 csv-Dateien hochgeladen werden, die, so denke ich, dass die Schaffung neuer Kontroll-Dateien für jedes Projekt ist keine effiziente Art und Weise...
Sie könnten möglicherweise hängen die festen Werte für jede Zeile der CSV-Datei statt, sondern wird langsamer und benötigen mehr Raum als die Schaffung eines temporären Kontroll-Datei. Was ist das problem mit dem erstellen einer neuen control-Datei, und löschen Sie dann sofort wieder nach dem laden?
ich möchte nicht zum erstellen von neuen control-Datei für jeden upload, so habe ich es eingestellt ...
Sie nicht machen es parametriert obwohl @arul... so dass Sie gehen zu müssen es anders machen. Wenn Sie versuchen, hinzufügen einer Konstante, warum nicht erstellen Sie einfach einen Blick auf die Tabelle, oder wählen Sie die Daten in Ihre Anwendung. Es gibt keine Notwendigkeit, um es in der ctl-Datei.
Thks Jungs für ur Antworten ... Lassen Sie mich Ihnen sagen, der Prozess in meiner Anwendung wird der Benutzer ein Projekt erstellen zuerst aus, die ich account_id(Projekt-Name) und account_num(Letzte eingefügte id), anhand dieser beiden Werte muss ich einfügen der csv-Daten in Tabellen mit sqlldr control-Datei. Jetzt pls empfehlen Sie mir, wie es getan werden kann ... HINWEIS: für jedes Projekt gibt es 4 csv-Dateien hochgeladen werden, die, so denke ich, dass die Schaffung neuer Kontroll-Dateien für jedes Projekt ist keine effiziente Art und Weise...
Sie könnten möglicherweise hängen die festen Werte für jede Zeile der CSV-Datei statt, sondern wird langsamer und benötigen mehr Raum als die Schaffung eines temporären Kontroll-Datei. Was ist das problem mit dem erstellen einer neuen control-Datei, und löschen Sie dann sofort wieder nach dem laden?
InformationsquelleAutor arul.k | 2014-01-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß, das ist alt, aber ich stolperte über es und ich habe vor kurzem eine ähnliche Frage beantwortet. Bitte siehe meine Antwort hier für ein Verfahren zum erstellen einer control-Datei aus einem wrapper-Programm.
legen Sie timestanp von INFILE in eine Spalte von SQLLOADER
InformationsquelleAutor Gary_W
Ist es nicht möglich, zur Parametrierung der Variablen in die .ctl-Datei, aber es ist möglich zu verzichten, mit ein .ctl-Datei zusammen und parametrieren, was Sie wollen.
Fordern, anstatt sqlldr direkt, müssen Sie deklarieren Sie eine externe Tabelle, dann eine SQL
INSERT into TABLE_NAME SELECT * from EXTERNAL_TABLE;
. Die external table Erklärung enthält die sqlldr Parameter, die verwendet werden, hinter den kulissen, und ist definiert in einer SQL-Abfrage die ausgeführt werden können, direkt von der Unix-shell, mit der alle erforderlichen Parameter angegeben als Unix-system-Variablen oder Befehle.E. g. nachdem die Werte von $DATE_ID_VALUE und die anderen 2 Variablen im aufrufenden Umgebung, erstellen Sie zuerst eine externe Tabelle:
Den
column transforms
Klausel füllen Sie die externe Tabelle mit den Konstanten Werten gelöst von Ihren Umgebungsvariablen und dem Unix-Befehl "date".Dann tun Sie das einfügen in die Zieltabelle (optional
append
Tipp für direct path load):Ich konnte nicht einen Weg finden, gehören DATEPART, so verwendet das Unix-Befehl "date" gleichwertige statt.
InformationsquelleAutor Durban_legend