oracle-databaseplsqltriggerspls-00103

PLS-00103 when trying to call a procedure


When attempting to compile I am getting the following errors

Error(16,8): PLS-00103: Encountered the symbol "SPROLLUPEXPENSEITEM" when expecting one of the following: := . ( @ % ; The symbol ":=" was substituted for "SPROLLUPEXPENSEITEM" to continue.

and

Error(17,15): PLS-00103: Encountered the symbol "=" when expecting one of the following: . ( * @ % & = - + < / > at in is mod remainder not rem then <> or != or ~= >= <= <> and or like 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;

I'm a student and very new at this, so any help would be appreciated.


Solution

  • call isn't a keyword in PL/SQL and to run a stored procedure you just use its name. Remove call from before 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;