相关疑难解决方法(0)

Oracle相当于PostgreSQL INSERT ... RETURNING*;

我已经将一堆DML(INSERT/UPDATE/DELETE)查询从Oracle转换为PostgreSQL,现在我需要检查它们是否产生相同的行集,即删除删除相同的行,假设oracle和postgresql数据库包含最初相同的数据,更新更新相同的行等.在PostgreSQL方面,我可以使用带有DML语句的returns子句,即

INSERT INTO test(id, name) VALUES(42, 'foo') RETURNING *;
Run Code Online (Sandbox Code Playgroud)

上面的陈述有什么好处,我可以在任何DML语句之前添加'returns*'而不知道它执行的表的结构甚至名称,只是得到所有行,就像它是一个select语句.

但是,它似乎并没有在Oracle方面那么闪亮.根据文档,Oracle 8i(我正在使用的那个)支持RETURNING子句,但它必须将结果存储到变量中,似乎没有明显的方法来获取所有结果列而不是手动指定列名.

因此,问题是是否有一个oracle语句(或语句序列)来模拟PostgreSQL'return*'而没有硬编码表或列名.换句话说,有没有办法编写这样的Oracle函数:

fn('INSERT INTO test(id, name) VALUES(42, ''foo'')') 
Run Code Online (Sandbox Code Playgroud)

它应该返回SQL语句插入(或在通用情况下修改)的行集.

更新:我实际上发现了一个非常相似的问题(从SQL服务器而不是PostgreSQL到Oracle的转换).尽管如此,如果可能的话,我还是希望听到一个更简单的答案.

sql oracle postgresql compatibility insert

8
推荐指数
1
解决办法
1386
查看次数

标签 统计

compatibility ×1

insert ×1

oracle ×1

postgresql ×1

sql ×1