oracle - 使用 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
解决方案
语法是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
相反吗?
推荐阅读
- python - 即使所有输入字段都已填写,“此字段是必需的”也会继续显示
- c++ - 使用 lambdas 在 C++ 中对指针数组进行排序
- oracle - Oracle ORDS 19.2:具有多个绑定变量的 URI 模板?
- python - 在 Ctypes 中定义参数类型并将参数传递给 C DLL
- c++ - 在终端窗口中没有结果
- arrays - 查找两个 int 数组之间的重叠范围并拆分/插入它们
- api - TypeError:无法读取未定义错误的属性“用户”
- reactjs - 使用过滤器方法的结果更改本机反应中的状态值的问题
- php - 带间隔的 WP 时间表
- python - 如何使用 Selenium Python 单击元素