在触发器中使用sql%roucount遇到的坑
触发器代码如下:
CREATE OR REPLACE TRIGGER XXX
DECLARE
id varchar(20),
c1 char(1),
c2 char(2)
BEGIN
...
...
UPDATE my_table
SET
c1=c1,
c2=c2
where
id=id;
IF SQL%ROUCOUNT=0 THEN
INSERT INTO my_table(id,c1,c2) VALUSE(id,c1,c2);
END IF;
END;
/
出现一个很奇妙的问题,当my_table不为空时,根本不insert任何数据!
推测肯定是update时除了问题,于是:
DBMS_OUTPUT.put_line(sql%rowcount);
发现每次触发器启动时,打印出的rowcount恰好为my_table的记录数?!
百思不得其解,还以为在触发器中使用SQL%ROWCOUNT会有什么限制或者问题,于是翻了oracle触发器官方实例,发现也有类似的用法。
苦恼了一阵之后,猜测是不是由于变量名和列名一致所导致的问题,于是把变量名全部修改之后,发现触发器正确运行了!
真是大坑啊,浪费了近一个小时的时间。