Oracle SQL-Abfrage, verketten Felder mit CASE Abschnitt
Frage
Ich bin derzeit zu erzeugen SQL Insert-Anweisungen von mehr als einer Tabellen und in der generierten Daten Ich brauche eine CASE-Anweisung zu verwenden, wie folgt aus:
select 'INSERT INTO TABLE1 (f1, f2, f3, f4 ...) values ('
||t.f1||','
||CASE
WHEN t.f2 > 0 THEN '1'
ELSE '0'
END CASE
from table2 t , table3 t3
Aber an diesem Punkt, wenn ich möchte, dass meine Aussage weiterhin mit ... END CASE||','|| ....
kann ich die Abfrage nicht mehr laufen, wie TOAD beschwert mich über nicht das Schlüsselwort FROM finden.
Eine schnelle Lösung war die ouput in Felder zu trennen, ist es dann, um Text zu speichern und zu bearbeiten, aber es muss ein besserer Weg geben.
Lösung
Mit END statt END CASE
select 'INSERT INTO TABLE1 (f1, f2, f3, f4 ...) values ('
||t.f1||','
||CASE
WHEN t.f2 > 0 THEN '1'
ELSE '0'
END||','||t.f2
from table2 t , table3 t3
Andere Tipps
Für einige ähnliche Situationen arbeitet der „decode“ -Funktion ganz gut.
Möglicherweise können Sie den Ausdruck (t.f2> 0) in eine dekodieren füttern, und dann übersetzen 'T' in '1' und 'F' in '0'.
Ich habe nicht versucht.