2

コンパイルしようとすると、次のエラーが発生します

エラー(16,8):PLS-00103:次のいずれかを予期しているときにシンボル「SPROLLUPEXPENSEITEM」が発生しました::=。(@%;続行するには、「SPROLLUPEXPENSEITEM」の代わりに記号「:=」を使用しました。

エラー(17,15):PLS-00103:次のいずれかが予想されるときに記号"="が検出されました。(* @%&=-+ </> at inはmodの余りであり、remではなく<>または!=または〜=> =<=<>およびまたはlike2like4likec 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;

私は学生で、これは非常に新しいので、助けていただければ幸いです。

4

2 に答える 2

5

callPL / 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;
于 2012-02-13T00:29:03.220 に答える
3

あなたの問題は最後のifステートメントにあると思います。足りず、代入演算子であるをThen使用しているので、代わりに使用する必要があります。:==

If BlnResult = TRUE Then

あるいは単に

If BlnResult Then
于 2012-02-12T23:17:25.767 に答える