2

次の VendorAccount テーブルを作成しました

VendorAccount

(Ven_AccountId, 
  Ven_RegNo,   
  Ven_Invoice_RefNo,    
  TotalAmount,
  Paid_ToVen ,    
  Balance
)

上記の表では、TotalAmount の値は別の Table( Vendor_InvoiceDetails) から取得されます。TOTALBALANCE 値は、POPUP LOV によって選択されます。

金額は()Pad_TOVENから差し引かれます。選択すると、下の図に示すように古いものが表示されます。 TOTALAMOUNTTotalAMount-Pad_TOVENTOTALAMOUNTTOTAL VALUEここに画像の説明を入力

値を更新したい.TotalAmountを選択するたびに、新しいエントリの列のVen_Invoice_RefNo2300に基づいて新しい更新された値が得られるはずです。TotalAmount以下はトリガーですが、以下のエラーがあります

エラー: PLS-00103: Encountered the symbol "DECLARE" when expecting one of the following: begin function pragma procedure subtype type <an identifier> <a double-quoted delimited-identifier> current curs

引き金:

create or replace trigger "VENDORACCOUNT_T2"
BEFORE
insert or update or delete on "VENDORACCOUNT"
for each row
begin
DECLARE new_balance INT; 
DECLARE new_total INT;
DECLARE new_paid INT;

   SELECT balance INTO old_balance,
   total INTO old_total,
       PAID_TOVEN INTO new_paid
   FROM vendoraccount
   WHERE ven_regno = new.ven_regno
   AND VEN_INVOICE_REFNO = new.VEN_INVOICE_REFNO;

   UPDATE vendoraccount SET TOTALAMOUNT = old_total + old_balance - new_paid,
   balance = TOTALAMOUNT - new_paid
   WHERE VEN_REGNO= new.VEN_REGNO
   AND VEN_INVOICE_REFNO = new.VEN_INVOICE_REFNO;

end;
4

2 に答える 2

1

私が見る限り、やるべきことは5つあります。

  1. begin を "declare" 行の下に移動します。
  2. 「declare」キーワードを 1 つだけ使用します。
  3. old_balance を宣言します。
  4. old_total を宣言します。
  5. 「中に」はただ一つ。

    create or replace trigger "VENDORACCOUNT_T2"
    BEFORE
    insert or update or delete on "VENDORACCOUNT"
    for each row
    DECLARE new_balance INT; 
            new_total INT;
            new_paid INT;
            old_balance INT;
            old_total INT;
    begin
    
    SELECT balance, total, PAID_TOVEN 
    INTO old_balance, old_total, new_paid
    FROM vendoraccount
    WHERE ven_regno = new.ven_regno
    AND VEN_INVOICE_REFNO = new.VEN_INVOICE_REFNO;
    
    UPDATE vendoraccount SET TOTALAMOUNT = old_total + old_balance - new_paid,
    balance = TOTALAMOUNT - new_paid
    WHERE VEN_REGNO= new.VEN_REGNO
    AND VEN_INVOICE_REFNO = new.VEN_INVOICE_REFNO;
    end;
    
于 2013-02-12T19:50:40.333 に答える
0

「begin」の前に宣言セクションを移動する必要があります

于 2012-12-05T10:30:02.197 に答える