ORACLE 触发器更新本表的问题

pri是TABLE_T的主键
id是TABLE_T的某个字段,对TABLE_T进行插入或更新时,截取id的前3位
如输入的id=12345,实际存入数据库表的id=123,我现在写的ORACLE触发器如下:
CREATE OR REPLACE TRIGGER TG_INPUT
AFTER INSERT OR UPDATE ON TABLE_T
BEGIN
update TABLE_T set id=substr(id,1,3);
END TG_INPUT;
这是错的,因为如果update会发生死循环,但不知道怎么改,请教

PS:如果单单INSERT的触发器是对的,但我还有实现更新功能:
CREATE OR REPLACE TRIGGER TG_INPUT
AFTER INSERT ON TABLE_T
BEGIN
update TABLE_T set id=substr(id,1,3);
END TG_INPUT;
最新回答
我是太阳啊

2024-09-17 04:39:48

CREATE OR REPLACE TRIGGER TG_INPUT
before INSERT OR UPDATE ON TABLE_T
for each row
BEGIN
:New.Id:=substr(:New.Id,1,3)
END TG_INPUT;

这样就可以了
清风不语

2024-09-17 06:15:47

改用before触发