2014-12-02 48 views
0

最近,我部署了一個Oracle WareHouse Builder(OWB)映射。在我現在正在工作的場景中,此映射(ETL過程)需要在事實表上使用Update語句(使用WriteBack值)後由觸發器啓動。PL/SQL綁定變量問題

由於映射作爲包部署到目標模式,觸發器必須調用OWB爲包創建的主要過程。起初我並沒有知道如何去完成這個任務,但SQL開發人員給了我一個提示:

enter image description here

於是,我把這個代碼,並把它放在我的觸發器內。就像這樣:

CREATE OR REPLACE TRIGGER RESPALDO_HISTORIAL 
AFTER UPDATE ON MONITOR_FT_TAB 
FOR EACH ROW 
DECLARE 

    P_STATUS VARCHAR2(200); 
    P_MAX_NO_OF_ERRORS VARCHAR2(200); 
    P_COMMIT_FREQUENCY VARCHAR2(200); 
    P_OPERATING_MODE VARCHAR2(200); 
    P_BULK_SIZE VARCHAR2(200); 
    P_AUDIT_LEVEL VARCHAR2(200); 
    P_PURGE_GROUP VARCHAR2(200); 
    P_JOB_AUDIT VARCHAR2(200); 

BEGIN 

    P_MAX_NO_OF_ERRORS := NULL; 
    P_COMMIT_FREQUENCY := NULL; 
    P_OPERATING_MODE := NULL; 
    P_BULK_SIZE := NULL; 
    P_AUDIT_LEVEL := NULL; 
    P_PURGE_GROUP := NULL; 
    P_JOB_AUDIT := 'TRUE'; 

    SINIESTROS_MARCADOS_MAP.MAIN(
    P_STATUS => P_STATUS, 
    P_MAX_NO_OF_ERRORS => P_MAX_NO_OF_ERRORS, 
    P_COMMIT_FREQUENCY => P_COMMIT_FREQUENCY, 
    P_OPERATING_MODE => P_OPERATING_MODE, 
    P_BULK_SIZE => P_BULK_SIZE, 
    P_AUDIT_LEVEL => P_AUDIT_LEVEL, 
    P_PURGE_GROUP => P_PURGE_GROUP, 
    P_JOB_AUDIT => P_JOB_AUDIT 
); 

    :P_STATUS := P_STATUS; 

END RESPALDO_HISTORIAL; 
/

當我試圖編譯這個扳機,我得到這個屏幕:

enter image description here

在這個畫面中我試着點擊「Aplicar」(適用於西班牙語),有和沒有NULL複選框,總是得到這樣的輸出:

TRIGGER RESPALDO_HISTORIAL compilado 
Errors: check compiler log 

然後我跑了SHOW errors命令,我得到這個:

33/3   PLS-00049: bad bind variable 'P_STATUS' 

現在我不太瞭解這些綁定變量。如果這是由SQL Developer生成的用於運行包的代碼,那麼爲什麼我會得到這個錯誤?

請幫忙!在這件事上我需要一些指導! 問候!

回答

1

變量前面的冒號表示該變量是綁定變量。這種類型的綁定變量通常用於傳入和傳出匿名塊的值。他們不允許在程序,函數或觸發器中使用。在這種情況下,您需要刪除行:P_STATUS := P_STATUS;

+0

但是,如果我這樣做,我怎麼能確定ETL將正確執行?我的意思是,記得我沒有寫這個代碼。它由SQL Developer生成。這是否與執行ETL時運行的完全相同的代碼? – 2014-12-02 17:44:26

+0

我不知道你的軟件包究竟做了什麼,或者你爲什麼要在觸發器中進行呼叫。我回答了你問的具體問題。如果您需要了解更多信息,請修改您的問題或發佈新問題。但是,具體一點。 「我怎麼能確定這將正確執行?」太寬泛,無法獲得有用的答案。 – Allan 2014-12-02 18:14:57