2013-05-16 109 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