PLS-00103 при попытке вызвать процедуру

При попытке компиляции я получаю следующие ошибки

Ошибка (16,8): PLS-00103: Обнаружен символ "SPROLLUPEXPENSEITEM" при ожидании одного из следующего::= . ( @ %; Символ ": =" был заменен на "SPROLLUPEXPENSEITEM" для продолжения.

а также

Ошибка (17,15): PLS-00103: Обнаружен символ "=" при ожидании одного из следующего: . ( * @ % & = - + в in это остаток от мода не rem затем <> или!= или ~= >= <= <> и т.п. like2 like4 likec между || мультимножеством члена 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 ответа

Решение

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;

Я считаю, что ваша проблема в последнем утверждении if. Ты пропускаешь Then и вы используете := который является оператором присваивания, вы должны использовать = вместо.

If BlnResult = TRUE Then

или просто

If BlnResult Then
Другие вопросы по тегам