我是SQL的新手,我很难设置此触发器。这是针对Bank Console JDBC之类的。
我有一个包含三个实体(USER,ACCOUNT和TRANSACTION)的架构。我想通过向我的交易实体插入新行来跟踪用户对其帐户之一所做的所有更改,该交易实体的列为
id,我正在使用序列
user_id(引用存储在帐户实体中的外键),
这是我的扳机现在的样子。
CREATE OR REPLACE TRIGGER ADD_TX
ON ACCOUNT
AFTER INSERT, UPDATE
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
DECLARE old_balance number, new_balance number, transaction_type varchar2(100);
BEGIN
transaction_type := CASE WHEN :NEW.balance < :OLD.balance THEN 'WITHDRAWAL' ELSE 'DEPOSIT' END;
INSERT INTO TRANSACTIONS VALUES(TRANSACTION_ID_SEQ.NEXTVAL, :NEW.USER_ID, :NEW.id, CURRENT_TIMESTAMP, :NEW.account_type, transaction_type);
end if;
END;
/
任何指导将不胜感激
答案 0 :(得分:0)
类似的事情可能会起作用:
CREATE OR REPLACE TRIGGER add_tx AFTER
INSERT OR UPDATE ON account
FOR EACH ROW
BEGIN
INSERT INTO transactions VALUES (
transaction_id_seq.NEXTVAL,
:new.user_id,
:new.id,
current_timestamp,
:new.account_type,
CASE
WHEN :new.balance <:old.balance THEN 'WITHDRAWAL'
ELSE 'DEPOSIT'
END
);
END;
/
但是,我建议您命名要插入的所有列;用您编写它的方式,尚不清楚哪个值进入哪一列,这样的代码有一天可能(并且很可能会)中断。