0
  1. 表 1: 顧客

    cust_no | cust_credbal | cred_status

  2. 表 2:customer_credittopup

    cust_no | 取引金額

Table2私は上記の2つのテーブルを持っています.to updateへの挿入後に更新トリガーを書きましたTable1. したがって、 in の金額は、 inの新しい値 + inTable1 cust_credbalを追加cust_credbalした後に更新されます。更新後に if ステートメントを追加して、20 より大きいかどうかを確認するにはどうすればよいですか?Tabl1trans_amountTable2cust_credbalcred_status

このエラーを示すトリガー: 行 8 のエラー: PLS-00049: バインド変数 'NEW.CUST_CREDITBAL' が正しくありません

CREATE OR REPLACE TRIGGER after_insert_credittopup
AFTER INSERT ON customer_credittopup
FOR EACH ROW 
DECLARE 
  credit number(11);
BEGIN
  UPDATE customers
     SET cust_creditbal=cust_creditbal +:new.trans_amount
   WHERE cust_no=:new.cust_no;

  SELECT Cust_creditbal INTO credit 
    FROM customers WHERE cust_no=:new.cust_no;

  IF(:new.cust_creditbal>0) THEN
    UPDATE customers
       SET Cust_credstatus='Valid'
     WHERE cust_no=:new.cust_no;
  end if;
end;
/
4

2 に答える 2

2

ここで必要なのは update ステートメント 1 つだけのようです:

UPDATE customers
SET cust_creditbal=cust_creditbal +:new.trans_amount,
Cust_credstatus = CASE WHEN cust_creditbal +:new.trans_amount > 0 THEN 'Valid'
 ELSE 'Invalid' 
 --or if you don't want to change status in such case just put 
 --ELSE Cust_credstatus 
 END
 WHERE cust_no=:new.cust_no;
 --SELECT Cust_creditbal INTO credit FROM customers WHERE cust_no=:new.cust_no;
 --IF(:new.cust_creditbal>0) THEN
 --UPDATE customers
 --SET Cust_credstatus='Valid'
 --WHERE cust_no=:new.cust_no;
于 2012-12-18T17:36:41.503 に答える
0

NEW.CUST_CREDITBAL一致していませんcust_credbal

于 2012-12-18T17:33:03.500 に答える