我試圖創建一個觸發器,它將在應用程序的某個點處轉儲出數據的csv文件。當您從付款建議中創建付款訂單時,這意味着它已準備好付款並上傳到銀行。 erp中有一個嚮導,用於根據付款建議付款。提案和訂單上還有一個標題和一個明細表。我需要它在支付訂單表中有new.way_id ='ACH'和new.institute_id ='BMO'的新行時生成。在觸發sql語句之後使用新值
問題是嚮導有多個步驟,並沒有插入訂單的詳細行直到最後一步單擊確定時,但在此之前已創建標題並執行觸發器。正因爲如此,創建標題時,我將從提案標題和詳細信息中提取所有數據,因爲它已全部存在。
當觸發器執行時,它會生成一個sql語句,然後將其傳遞給存儲過程,該存儲過程將接受任何sql查詢並將其轉儲到csv文件。出於某種原因,當我創建我的查詢時,它不會讓我使用新的參考。我收到一個錯誤,說「new.selected_proposals無效標識符」。我需要它來做這件事,因爲您可以在創建訂單時選擇多個提案標題ID,而我只希望它爲具有ACH way_id的提案中的那些提供標題ID。
我猜我必須添加.new表,不管它是什麼,加入到連接或什麼,但我不知道如何做到這一點。
這是Oracle數據庫11g。這是代碼。查詢中的註釋部分是我正在嘗試解決的問題,只是爲了瞭解我正在嘗試做什麼。
create or replace TRIGGER CREATE_BMO_ACH_FILE
AFTER INSERT ON PAYMENT_ORDER_TAB
for each row
when (new.way_id = 'ACH' and new.institute_id = 'BMO')
declare sql_ varchar(4000);
BEGIN
sql_ := q'[select pp.company, pp.Proposal_id, pp.CREATION_DATE, pl.identity, pl.payee_identity, pl.ledger_item_id, pl.currency, pl.curr_amount, pl.GROSS_PAYMENT_AMOUNT, pl.PLANED_PAYMENT_DATE, pl.Order_Reference, pl.PAYMENT_REFERENCE
from payment_proposal pp, PROPOSAL_LEDGER_ITEM pl
where pp.company = pl.company
and pp.proposal_id = pl.proposal_id
and pp.way_id = 'ACH'
/*and pp.proposal_id like '%' || new.selected_proposals || '%'*/]';
dump_sql_to_csv(sql_, 'E:\Accounting', 'test.csv');
END;
謝謝,那是問題的一部分。我也需要把它從引號部分中刪除。現在擁有它「和pp.proposal_id =]'||:new.selected_proposals;」,它的工作原理。仍試圖找出類似的。正在嘗試這個「和pp.proposal_id像'%']'||:new.selected_proposals || q'['%']';」,但我得到一個錯誤,說sql命令沒有正確結束。 – bpfrenchak
其實我想我會把它留下來,因爲這樣會不會像我預期的那樣工作。這樣一來,只有他們選擇了1個提案,這纔是正確的方式。一次付款訂單不需要多次提出建議。 – bpfrenchak