触发器爬坑
1、触发器默认不允许操作当前表
如果有需求,则需要开启自治事务:
PRAGMA AUTONOMOUS_TRANSACTION;
并手动提交开启自治事务之后的修改:
COMMIT;
2、查询当前表的数据
:NEW是获取修改后的行数据,:OLD是获取修改前的行数据。如果用sql查询,则查询出来的结果集是修改之前的数据,也就是update操作之前的数据。
3、FOR循环取值
不管你遍历的结果集只有一个字段还是多个字段,FOR循环都是按行取数据,也就是将一个或多个字段封装成一行数据。
以下面为例,当你只查询一个字段时,在FOR循环里面取值也需要通过fields.aField来获取数据:
FOR fields IN (SELECT aField FROM xxx) LOOP
IF fields.aField = xxx THEN
xxx;
END IF;
END LOOP;
4、变量命名
申明变量名不要和数据库表字段名重复,不然会出现意想不到、很难发现的问题。