Oracle-эквивалент PostgreSQL INSERT… RETURNING *;

Я преобразовал кучу запросов DML (INSERT / UPDATE / DELETE) из Oracle в PostgreSQL, и теперь мне нужно проверить, производят ли они одинаковый набор строк, т. Е. Удаление удаляет те же строки, предполагая, что оракул и базы данных postgresql изначально содержат одни и те же данные, update обновляет одни и те же строки и т. д. На стороне PostgreSQL я могу использовать предложение return с операторами DML, т.е.

INSERT INTO test(id, name) VALUES(42, 'foo') RETURNING *;

Что хорошо в приведенном выше утверждении, так это то, что я могу добавить 'return *' к любой оператор DML, не зная структуры или даже имени таблицы, для которой он выполняется, и просто получить все строки как е это оператор выбора.

Однако со стороны Oracle все не так хорошо.Согласно документации, Oracle 8i (тот, с которым я работаю) поддерживает предложение RETURNING, но он должен сохранять результат в переменных, и, похоже, нет очевидного способа получить все столбцы результатов вместо того, чтобы вручную указывать имя столбца.

Следовательно, вопрос в том, существует ли оператор oracle (или последовательность операторов), имитирующий PostgreSQL, «возвращающий *» без жесткого кодирования имен таблиц или столбцов. Другими словами, существует ли способ написать такую ​​функцию Oracle:

fn('INSERT INTO test(id, name) VALUES(42, ''foo'')') 

Она должна возвращать набор строк, вставленных (или измененных в общем случае) оператором SQL.

Обновление: Я действительно нашел очень похожий вопрос (для преобразования из SQL-сервера, а не PostgreSQL, в Oracle). Тем не менее, я бы хотел услышать более простой ответ на этот вопрос, если возможно.

8
задан Community 23 May 2017 в 12:32
поделиться