2016-07-21 34 views
0

我試圖創建一個觸發器,它將在應用程序的某個點處轉儲出數據的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; 

回答

0

我認爲你只是在新的前面丟失冒號,即使用:new.selected_proposalsoldnewWHEN中不需要冒號,但位於代碼塊中。

+0

謝謝,那是問題的一部分。我也需要把它從引號部分中刪除。現在擁有它「和pp.proposal_id =]'||:new.selected_proposals;」,它的工作原理。仍試圖找出類似的。正在嘗試這個「和pp.proposal_id像'%']'||:new.selected_proposals || q'['%']';」,但我得到一個錯誤,說sql命令沒有正確結束。 – bpfrenchak

+0

其實我想我會把它留下來,因爲這樣會不會像我預期的那樣工作。這樣一來,只有他們選擇了1個提案,這纔是正確的方式。一次付款訂單不需要多次提出建議。 – bpfrenchak