尝试调用程序时PLS-00103

时间:2012-02-12 23:00:01

标签: oracle plsql triggers pls-00103

尝试编译时遇到以下错误

  

错误(16,8):PLS-00103:遇到符号“SPROLLUPEXPENSEITEM”   期待以下之一:=。 (@%;符号“:=”   取代“SPROLLUPEXPENSEITEM”继续。

  

错误(17,15):PLS-00103:遇到符号时遇到符号“=”   以下的: 。 (* @%& = - +< /> at in是mod的余数   不是rem然后<>或!=或〜=> =< =<>和/或喜欢   like2 like4 likec之间的|| multiset成员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;

我是学生,非常新的,所以任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:3)

我相信你的问题出现在最后的if语句中。您错过了Then并且您使用的是:=作为分配运算符,您应该使用=代替。

If BlnResult = TRUE Then

或只是

If BlnResult Then