在触发器sql语句后使用新值

时间:2016-07-21 22:38:19

标签: sql oracle plsql

我正在尝试创建一个触发器,它将在应用程序的某个位置转储csv数据文件。当您从付款建议中创建付款订单时,这意味着它已准备好付款并上传到银行。 erp中有一个向导,用于从付款建议中生成付款订单。提案和订单上都有标题和详细信息表。当付款订单表中有一个新行,其中包含new.way_id ='ACH'和new.institute_id ='BMO'时,我需要它来实现。

问题是向导有多个步骤,并且在单击“确定”之前不会插入订单的详细信息行,直到最后一步,但在此之前已创建标头并执行触发器。因此,当创建标题时,我将从提案标题和详细信息中提取所有数据,因为它已经存在。

当触发器执行时,它生成一个sql语句,然后将其传递给存储过程,该存储过程将接受任何sql查询并将其转储到csv文件。出于某种原因,在创建查询时,它不会让我使用新引用。我收到一条错误,说“new.selected_proposals invalid identifier”。我还需要它来做这样的事情,因为你可以在创建订单时选择多个提案标题ID,我只希望它为具有way_id为ACH的提案中的那些提供。

我猜我必须将.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;

1 个答案:

答案 0 :(得分:0)

我认为你刚刚在新的前面错过了一个冒号,即使用:new.selected_proposalsold中的newWHEN不需要冒号,但它们位于代码块中。

相关问题