首页 > 解决方案 > 使用 If 语句在触发器中分配变量

问题描述

我正在尝试根据 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

标签: oracleplsqldatabase-trigger

解决方案


语法是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相反吗?


推荐阅读