2

尝试编译时出现以下错误

错误(16,8):PLS-00103:在预期以下情况之一时遇到符号“SPROLLUPEXPENSEITEM”::=。( @ % ; 符号 ":=" 被替换为 "SPROLLUPEXPENSEITEM" 以继续。

错误(17,15):PLS-00103:在预期以下情况之一时遇到符号“=”:。( * @ % & = - + < / > at in is mod remaining not rem then <> or != or ~= >= <= <> and or like2 like4 likec between || multiset member submultiset

create or replace
TRIGGER tr_ExpenseItem_Rollup
AFTER DELETE OR UPDATE of ExpApprAmt
ON ExpenseItem
FOR EACH ROW
DECLARE
    RollupAmt   Number;
    BlnResult   Boolean;
BEGIN
    IF DELETING THEN
        RollupAmt := -1 * :Old.ExpApprAmt;
    End If;
    IF UPDATING Then
        RollupAmt := :New.ExpApprAmt - :Old.ExpApprAmt;
    End IF;
  Call spRollUpExpenseItem(:New.ERNo,:New.ECNo,RollupAmt,BlnResult);
    If BlnResult := TRUE
        --Additional Logic Here 
    End IF;
END;

我是一名学生,对此非常陌生,因此将不胜感激。

4

2 回答 2

5

call不是 PL/SQL 中的关键字,要运行存储过程,您只需使用它的名称。call从之前删除spRollUpExpenseItem

create or replace
TRIGGER tr_ExpenseItem_Rollup
AFTER DELETE OR UPDATE of ExpApprAmt
ON ExpenseItem
FOR EACH ROW
DECLARE
    RollupAmt   Number;
    BlnResult   Boolean;
BEGIN
    IF DELETING THEN
        RollupAmt := -1 * :Old.ExpApprAmt;
    End If;
    IF UPDATING Then
        RollupAmt := :New.ExpApprAmt - :Old.ExpApprAmt;
    End IF;
    spRollUpExpenseItem(:New.ERNo,:New.ECNo,RollupAmt,BlnResult);
    If BlnResult = TRUE Then
        --Additional Logic Here 
    End IF;
END;
于 2012-02-13T00:29:03.220 回答
3

我相信您的问题出在最后一个 if 语句中。你错过了Then,你正在使用:=which 是赋值运算符,你应该使用它=

If BlnResult = TRUE Then

要不就

If BlnResult Then
于 2012-02-12T23:17:25.767 回答