2012-04-10 11 views
2

Ich verwende eine INSERT ALL-Anweisung in Oracle, um Daten in zwei verschiedene Tabellen einzufügen. Die Daten stammen eher von einer eher komplexen Unterabfrage als von einer VALUES-Klausel.Auswählen von Spalten in Oracle INSERT ALL Anweisung

Mein Problem ist, dass ich alle die Spalten nicht einfügen möchte, die von der Unterabfrage in beide Tabellen zurückgegeben werden.

Als einfaches Beispiel: Angenommen, ich habe zwei Tabellen tab1 und tab2 jeweils drei Spalten col1, col2 und col3.

Angenommen, meine Unterabfrage gibt eine einzelne Zeile mit den Werten A, B und C zurück.

Also, ich möchte A, B und C in col1 eingefügt, col2 und col3 von tab1 jeweils, aber ich möchte, sagen wir, nur A und C in col1 und col3 von tab2 gehen.

Meine Aussage würde wie folgt aussehen:

INSERT ALL 
INTO tab1 
    (col1, col2, col3) 
INTO tab2 
    (col1, ?, col3) 
FROM 
(... 
complex subquery which returns A, B, C 
    ... 
) 

Gibt es eine Weise, die ich so etwas wie einen ‚Füllstoff‘ verwenden oder ‚Müll Spalte‘ mir zu erlauben, mein Ziel zu erreichen?

Antwort

8

Ja:

INSERT ALL 
INTO tab1 
    (col1, col2, col3) values (a, b, c) 
INTO tab2 
    (col1, col3) values (a, c) 
SELECT a, b, c 
FROM 
(... 
complex subquery which returns A, B, C 
    ... 
) 
2

diese Syntax möglich ist

INSERT ALL 
INTO ap_cust(f1, f2) VALUES (a, d) 
INTO ap_orders(f1, f2, f3) VALUES (a, b, c) 
SELECT a, b, c,d 
FROM table; 

siehe http://psoug.org/reference/insert.html

+0

Gibt es eine Möglichkeit, es ohne die 'values' Klauseln zu tun? –

+0

@Isaac, ohne die 'values'-Klauseln, woher weiß es, welche Spalten aus der Auswahl für jede Spalte in den Zieltabellen zuzuweisen sind? –