在迁移postgresql 9期间,功能面临以下问题: 在Oracle中,您可以在复杂的select语句中使用WITH。同时,在postgres(以及MS SQL 2008)中,您可以同时使用WITH和INSERT(更新,删除)。
示例:
WITH prerows AS ( SELECT ObjectID, LoginID, Param FROM devices D
WHERE D.DevNum = '0003' AND ObjectID IS NULL )
INSERT INTO dev_sub( ObjectID, LoginID, Param )
SELECT ObjectID, LoginID, Param FROM prerows;
查询在PostgreSQL 9.2中运行正常,但在oracle 11 XE中写入错误:'ORA-00928:缺少SELECT关键字'。也许我只是想念一些东西?我很有趣,我很遗憾知道它无法结合WITH语句和INSERT命令。
最好的问候,安东尼
答案 0 :(得分:1)
尝试:
INSERT INTO dev_sub( ObjectID, LoginID, Param )
WITH prerows AS ( SELECT ObjectID, LoginID, Param
FROM devices D
WHERE D.DevNum = '0003'
AND ObjectID IS NULL )
SELECT ObjectID, LoginID, Param FROM prerows;
答案 1 :(得分:0)
尝试:
INSERT INTO dev_sub( ObjectID, LoginID, Param )
SELECT ObjectID, LoginID, Param
FROM devices D
WHERE D.DevNum = '0003'
AND ObjectID IS NULL
它没有在SELECT上使用WITH子句(也称为子查询因子子句) - 但另一方面,这里确实不需要。 Oracle,SQL Server和PostgreSQL在它们的SQL实现中都有自己的特性,并且没有透明迁移这样的东西。
分享并享受。