Przekonwertowałem kilka zapytań DML (INSERT/UPDATE/DELETE) z Oracle do PostgreSQL i teraz muszę sprawdzić, czy tworzą ten sam zestaw wierszy, tj. Że usuwanie usuwa te same wiersze, zakładając oracle i postgresql bazy danych zawierają te same dane początkowo, aktualizacja aktualizuje te same wiersze itd. na stronie PostgreSQL, mogę skorzystać z powracającego klauzuli z instrukcji DML, tjOracle odpowiednik PostgreSQL INSERT ... RETURNING *;
INSERT INTO test(id, name) VALUES(42, 'foo') RETURNING *;
Co jest dobre na temat rachunku powyżej jest to, że mogę poprzedzić „powrocie * "do dowolnej instrukcji DML bez znajomości struktury, a nawet nazwy tabeli, z której jest wykonywany i po prostu uzyskać wszystkie wiersze, takie jak to jest instrukcja select.
Jednak wydaje się, że nie jest tak błyszczące po stronie Oracle. Zgodnie z dokumentacją, Oracle 8i (ten, z którym pracuję) obsługuje klauzulę RETURNING, ale musi przechowywać wynik w zmiennych i wydaje się, że nie ma oczywistego sposobu na uzyskanie wszystkich kolumn wynikowych zamiast ręcznego określania nazwy kolumny.
W związku z tym pytanie brzmi, czy istnieje wyrażenie Oracle (lub sekwencja instrukcji) do emulacji PostgreSQL "powracającego" bez sztywnych nazw tabel lub kolumn. Innymi słowy, czy istnieje sposób napisać funkcję Oracle takiego:
fn('INSERT INTO test(id, name) VALUES(42, ''foo'')')
Należy zwrócić zestawu wierszy wstawionych (lub zmodyfikowanych w ogólnym przypadku) przez SQL.
Aktualizacja: Tak naprawdę znalazłem a very similar question (dla konwersji z serwera SQL, nie PostgreSQL, na Oracle). Mimo to, chciałbym usłyszeć prostszą odpowiedź, jeśli to możliwe.
Czy dzwonisz do tego SQL z Java? –
Nie, tak naprawdę wywołuję je ze skryptu Pythona, stąd pisanie instrukcji per-statement zwracających nazwę kolumny, 1 nazwa_kara2 wymaga przeanalizowania oryginalnej instrukcji i wyodrębnienia nazw kolumn i tabel, co nie jest tym, co chciałbym zrobić dla takiego niewielkie zadanie. – alexk
Dlaczego korzystasz z wycofanej i wycofanej wersji Oracle? –