使用If语句在触发器内分配变量

时间:2019-08-20 19:37:55

标签: oracle plsql database-trigger

我正在尝试基于if语句为变量分配值,该语句将用作触发器的一部分插入表中

如果要计算的另一个变量大于零,则尝试为该变量赋值。

 CREATE OR REPLACE TRIGGER transactions_checking_trigger
   AFTER INSERT OR UPDATE ON checking
   FOR EACH ROW
 DECLARE
   account_type        char(4);     
   account_num         char(4);           
   trans_date          date;             
   trans_amt           number;            
   trans_type          char(4);            
   trans_comments      varchar(25);    
 BEGIN

   account_type    := 'CHEK';
   trans_date      := sysdate;
   trans_amt       := :new.balance-:old.balance;

   if trans_amt > 0 
      trans_type := 'DEPT'
   ELSE
      trans_type := 'WDRW'
   end if;

   IF UPDATE THEN
      INSERT INTO transactions (account_type, account_num, trans_date, 
      trans_amt, trans_type,trans_comments)
      VALUES (account_type, :new.account_num,trans_date,trans_amt, trans_type, 
      new:trans_comments);
   END IF;
END;
/

我希望触发器在trans_amt> 0时插入DEPT,在trans_amt <0时插入WDRW

1 个答案:

答案 0 :(得分:1)

语法为IF-THEN-ELSE;您错过了THEN。另外,语句必须以分号结束。

if trans_amt > 0 
then                        --> this
   trans_type := 'DEPT';    --> semi-colon
ELSE
   trans_type := 'WDRW';    --> semi-colon
end if;

一个更简单的选择:

trans_type := case when trans_amt > 0 then 'DEPT' 
                   else 'WDRW'
              end;

这是错误的:

IF UPDATE THEN

您是说updating吗?