0
最近,我部署了一個Oracle WareHouse Builder(OWB)映射。在我現在正在工作的場景中,此映射(ETL過程)需要在事實表上使用Update語句(使用WriteBack值)後由觸發器啓動。PL/SQL綁定變量問題
由於映射作爲包部署到目標模式,觸發器必須調用OWB爲包創建的主要過程。起初我並沒有知道如何去完成這個任務,但SQL開發人員給了我一個提示:
於是,我把這個代碼,並把它放在我的觸發器內。就像這樣:
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;
/
當我試圖編譯這個扳機,我得到這個屏幕:
在這個畫面中我試着點擊「Aplicar」(適用於西班牙語),有和沒有NULL複選框,總是得到這樣的輸出:
TRIGGER RESPALDO_HISTORIAL compilado
Errors: check compiler log
然後我跑了SHOW errors命令,我得到這個:
33/3 PLS-00049: bad bind variable 'P_STATUS'
現在我不太瞭解這些綁定變量。如果這是由SQL Developer生成的用於運行包的代碼,那麼爲什麼我會得到這個錯誤?
請幫忙!在這件事上我需要一些指導! 問候!
但是,如果我這樣做,我怎麼能確定ETL將正確執行?我的意思是,記得我沒有寫這個代碼。它由SQL Developer生成。這是否與執行ETL時運行的完全相同的代碼? – 2014-12-02 17:44:26
我不知道你的軟件包究竟做了什麼,或者你爲什麼要在觸發器中進行呼叫。我回答了你問的具體問題。如果您需要了解更多信息,請修改您的問題或發佈新問題。但是,具體一點。 「我怎麼能確定這將正確執行?」太寬泛,無法獲得有用的答案。 – Allan 2014-12-02 18:14:57