PLS-00103 при попытке вызвать процедуру - PullRequest
2 голосов
/ 13 февраля 2012

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

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

и

Ошибка (17,15): PLS-00103: Обнаружен символ "=" при ожидании из следующих: . (* @% & = - + </> при входе в мод не 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 ]

5 голосов
/ 13 февраля 2012

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;
3 голосов
/ 13 февраля 2012

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

If BlnResult = TRUE Then

или просто

If BlnResult Then
...