oracle plsql WITH语句与INSERT结合使用

时间:2013-05-16 10:21:53

标签: postgresql plsql sql-insert with-statement

在迁移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命令。

最好的问候,安东尼

2 个答案:

答案 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实现中都有自己的特性,并且没有透明迁移这样的东西。

分享并享受。