Oracle entspricht PostgreSQL INSERT ... RETURNING *;

8

Ich habe ein paar DML (INSERT / UPDATE / DELETE) Abfragen von Oracle in PostgreSQL konvertiert und nun muss ich prüfen, ob sie die gleichen Zeilen erzeugen, dh dass delete die gleichen Zeilen entfernt, unter der Annahme des Orakels und PostgreSQL-Datenbanken enthalten zu Beginn dieselben Daten, Update aktualisiert dieselben Zeilen usw. Auf PostgreSQL-Seite kann ich die Rückgabe-Klausel mit DML-Anweisungen verwenden, dh

%Vor%

Was gut an der obigen Aussage ist, ist, dass ich 'return *' jeder DML-Anweisung voranstellen kann, ohne die Struktur oder sogar den Namen der Tabelle zu kennen, gegen die sie ausgeführt wird, und nur alle Zeilen wie eine select-Anweisung erhält.

Allerdings scheint es auf der Oracle-Seite nicht so glänzend zu sein. Laut der Dokumentation unterstützt Oracle 8i (mit dem ich arbeite) die RETURNING-Klausel, muss aber das Ergebnis in Variablen speichern, und es scheint keinen offensichtlichen Weg zu geben, alle Ergebnisspalten zu erhalten, anstatt den Spaltennamen manuell anzugeben.

Daher stellt sich die Frage, ob es eine Oracle-Anweisung (oder eine Abfolge von Anweisungen) gibt, die PostgreSQL 'returning *' emulieren soll, ohne Tabellen- oder Spaltennamen hartcodieren zu müssen. Mit anderen Worten, gibt es eine Möglichkeit, eine Oracle-Funktion wie folgt zu schreiben:

%Vor%

Es sollte die Menge der Zeilen zurückgeben, die durch die SQL-Anweisung eingefügt (oder im generischen Fall geändert) wurden.

Aktualisierung: Ich fand eine sehr ähnliche Frage ( für die Konvertierung von SQL Server, nicht PostgreSQL, in Oracle). Dennoch würde ich gerne eine einfachere Antwort darauf hören, wenn möglich.

    
alexk 11.01.2012, 14:16
quelle

2 Antworten

3

Derzeit ist es nicht möglich, besonders in einer alten Version von Oracle wie 8i. Sehen Sie sich diese Antwort für eine ähnliche Frage an.

    
John Doyle 11.01.2012, 15:03
quelle
4

Ich könnte mir eine Lösung vorstellen, in die EXECUTE IMMEDIATE , RETURNING und REF CURSOR , aber klar ist es alles andere als einfach. Ich habe bereits Lösungen wie diese gefunden XML für Probleme, bei denen Datensätze beliebigen Typs verwendet werden sollen. Sie sind ziemlich verrückt, um es gelinde auszudrücken. Ich schätze, Sie müssen auf zwei separate Abfragen zurückgreifen ... Insbesondere mit Oracle 8i befürchte ich, dass Sie nicht einmal von den meisten dieser Funktionen profitieren können.

Kurz gesagt, ich glaube nicht, dass es ein SQL-Konstrukt gibt, das so mächtig ist wie die Postgres ... RETURNING -Klausel in Oracle.

    
Lukas Eder 11.01.2012 14:59
quelle