Я преобразовал кучу запросов 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). Тем не менее, я бы хотел услышать более простой ответ на этот вопрос, если возможно.