【发布时间】:2020-12-22 23:49:27
【问题描述】:
SQLPLUS 触发编译错误
我是 oracle sqlplus 的新手,我正在尝试创建一个触发器,当客户从他们的账户存款或取款时触发,显示 account_no、交易类型(存款/取款)、交易金额、旧余额和新平衡:
这是表格的代码(我已经创建了):
CREATE TABLE CUSTOMERS,
(
custname VARCHAR2(20)NOT NULL,
account_no NUMBER(20)NOT NULL,
cur_balance NUMBER(20) NOT NULL,
PRIMARY KEY (account_no)
);
这是我编译的触发代码,但一直报错:
CREATE OR REPLACE TRIGGER account_tx
AFTER INSERT OR UPDATE OF cur_balance ON customers
FOR EACH ROW
DECLARE
new_balance number;
BEGIN CASE WHEN :NEW.cur_balance <:OLD.cur_balance THEN 'WITHDRAWAL';
ELSE 'DEPOSIT';
new_balance := :NEW.cur_balance - :OLD.cur_balance;
dbms_output.put_line('Old balance: ' || :OLD.cur_balance);
dbms_output.put_line('New balance: ' || :NEW.cur_balance);
dbms_output.put_line('Transaction Amount: ' || new_balance);
END CASE;
END;
/
【问题讨论】:
-
你需要一个像
:NEW.cur_balance := 'WITHDRAWAL';这样的赋值,而不是一个类似于布尔表达式的逻辑......顺便说一句,在create语句中表名后面有一个错字(逗号)。
标签: oracle plsql triggers sqlplus