2014-10-31 13 views
1

合併時,我得到一個ORA-00903合併到Oracle 11gR2中否則可更新視圖時(USER_UPDATABLE_COLUMNS顯示所有列插入,更新,刪除的對基地和視圖)ORA-00903的可更新視圖

標準插入,更新,正常刪除所有工作。

文檔: http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_9016.htm#SQLRF01606 有以下幾點:

使用INTO子句來指定目標表或視圖你 更新或插入。爲了將數據合併到視圖中, 視圖必須是可更新的。有關更多 信息,請參閱「可更新視圖的注意事項」。

可更新的視圖標準似乎在以下示例中得到滿足,但ORA-00903存在於所有合併嘗試中。對代替觸發器的更改似乎對合並性沒有任何影響。

CREATE TABLE MERGE_TEST_B 
(MERGE_TEST_ID NUMBER    NOT NULL PRIMARY KEY, 
MERGE_TEST_DESC VARCHAR2(50) UNIQUE NOT NULL); 

CREATE OR REPLACE VIEW MERGE_TEST_V 
AS 
    SELECT 
    MERGE_TEST_B.MERGE_TEST_ID, 
    MERGE_TEST_B.MERGE_TEST_DESC 
    FROM MERGE_TEST_B; 

CREATE OR REPLACE TRIGGER MERGE_TEST_V_TIX 
INSTEAD OF INSERT OR UPDATE OR DELETE ON MERGE_TEST_V 
    FOR EACH ROW 
    BEGIN 
    DBMS_OUTPUT.PUT_LINE('TESTING VIEW MERGE.'); 
    END; 
/

我想知道是否有可以將此視圖轉換爲可合併狀態的更改,或者是否不合格。

下嘗試失敗:

MERGE INTO MERGE_TEST_V 
USING 
    (SELECT 
    'TESTMERGE' MERGE_TEST_DESC 
    FROM DUAL) TEST_DATA 
ON (MERGE_TEST_V.MERGE_TEST_DESC = TEST_DATA.MERGE_TEST_DESC) 
WHEN NOT MATCHED THEN INSERT 
    (MERGE_TEST_ID, MERGE_TEST_DESC) 
VALUES 
    (-100, TEST_DATA.MERGE_TEST_DESC); 

任何想法,將不勝感激。 謝謝

回答

2

我不確定爲什麼Oracle返回ORA-00903而不是ORA-38106,但問題似乎是您的觸發器。刪除觸發器將允許您的合併工作。

ORA-38106的描述,「當使用合併修改視圖,您只能在視圖中指定一個表,和INSTEAD OF觸發器的視圖不能有。」 [重點煤礦]

幾乎埋在合併聲明的文件,這實際上是mentioned

+0

果然,沒有觸發器運行良好。謝謝 – alexgibbs 2014-10-31 01:02:59