2013-05-16 80 views
2

在迁移postgresql 9函数的过程中,遇到以下问题:Oracle中的 只能在复杂的select语句中使用WITH。同时,在postgres(也是MS SQL 2008)中,可以使用WITH和INSERT(更新,删除)。oracle plsql 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 XE 11写入错误:ORA-00928:缺少SELECT关键字“。也许我只是想念什么?我是Oracle的乐趣,如果知道它不能与WITH语句和INSERT命令结合起来,我会很遗憾。

最好的问候,安东尼

回答

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; 
+0

谢谢配合!它真的有效,它是一个直接的解决方案,虽然查询不同于ms/postgresql。 – xacinay

0

尝试:

INSERT INTO dev_sub(ObjectID, LoginID, Param) 
    SELECT ObjectID, LoginID, Param 
    FROM devices D 
    WHERE D.DevNum = '0003' 
     AND ObjectID IS NULL 

它不使用一台带选择(也称为子查询分解条款)条款 - 但另一方面,这里真的不需要。 Oracle,SQL Server和PostgreSQL在他们的SQL实现中都有自己的特质,并且没有透明迁移的东西。

分享和享受。

+0

嗯,这正是我应用的解决方法 - 通常的SQL。 @Igor Romanchenko解决方案更加正确和优雅。无论如何感谢您的尝试! – xacinay