2

在迁移 postgresql 9 函数的过程中遇到了以下问题:在 Oracle 中,您只能在复杂的选择语句中使用 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 关键字”。也许我只是想念一些东西?我是一个 Oracle 爱好者,如果知道它不能将 WITH 语句和 INSERT 命令结合起来,我会很遗憾。

最好的问候,安东尼

4

2 回答 2

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;
于 2013-05-16T10:38:43.550 回答
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 的实现中都有自己的特点,并且没有透明迁移之类的东西。

分享和享受。

于 2013-05-16T10:53:46.860 回答