Postgresql oracle plsql语句与INSERT组合

Postgresql oracle plsql语句与INSERT组合,postgresql,plsql,sql-insert,with-statement,Postgresql,Plsql,Sql Insert,With Statement,在迁移postgresql 9函数的过程中,遇到以下问题: 在Oracle中,您可以仅在复杂的select语句中使用。同时,在postgres(以及MS SQL 2008)中,您可以与一起使用和插入(更新、删除) 例如: WITH prerows AS ( SELECT ObjectID, LoginID, Param FROM devices D WHERE D.DevNum = '0003' AND ObjectID IS NULL

在迁移postgresql 9函数的过程中,遇到以下问题: 在Oracle中,您可以仅在复杂的select语句中使用。同时,在postgres(以及MS SQL 2008)中,您可以与一起使用和插入(更新、删除)

例如:

     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关键字”。也许我错过了什么?我是一个甲骨文爱好者,如果我知道它不能与语句和插入命令相结合,我会感到遗憾

致以最诚挚的问候,安东尼请尝试:

 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;
尝试:

它在SELECT上没有使用WITH子句(也称为子查询分解子句),但另一方面,这里确实不需要WITH子句。Oracle、SQL Server和PostgreSQL在其SQL实现中都有自己的特点,并且没有透明迁移


分享和享受。

谢谢你,伙计!虽然查询与ms/postgresql不同,但它确实有效,而且是一个简单的解决方案@Igor Romanchenko的解决方案更加正确和优雅。无论如何,谢谢你的尝试!
INSERT INTO dev_sub( ObjectID, LoginID, Param )
  SELECT ObjectID, LoginID, Param 
    FROM devices D
    WHERE D.DevNum = '0003' 
      AND ObjectID IS NULL