尝试编译时遇到以下错误
错误(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;
我是学生,非常新的,所以任何帮助都会受到赞赏。
答案 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