修改oracle 触发器,触发器实现对表增删改的记录

本帖最后由 lihy114 于 2013-10-28 11:11 编辑

目的是想将对表名为a_user的表进行的增删改操作以及相应数据记录,a_user的表结构为

(

CODE_OLD      VARCHAR2(30),

NAME_OLD      VARCHAR2(30),

CORPID_OLD    VARCHAR2(10),

CODE_NEW      VARCHAR2(16),

NAME_NEW      VARCHAR2(30),

CORPID_NEW    VARCHAR2(16)

);

日志表test的结构如下:

(

CODE_OLD      VARCHAR2(30),

NAME_OLD      VARCHAR2(30),

CORPID_OLD    VARCHAR2(10),

CODE_NEW      VARCHAR2(16),

NAME_NEW      VARCHAR2(30),

CORPID_NEW    VARCHAR2(16),

v_tag  varchar2(20)

);

触发器代码以及相应注释如下:

CREATE OR REPLACE TRIGGER tri_a_user

befor insert or update or delete

on a_user

for each row

declare

rowvar_user a_user%rowtype;    --定义一个记录型变量

var_tag varchar2(10);

begin

if inserting then

select * into rowvar_user from a_user where code_old=: old.code_old;  --取出插入的列对应的字段内容

var_tag:='insert';

elsif updating then

select * into rowvar_user from a_user where code_old=: old.code_old;  --取出更新的列对应的字段内容

var_tag:='update';

elsif deleting then

select * into rowvar_user from a_user where code_old=: old.code_old;  --取出删除的列对应的字段内容

var_tag:='delete';

end if;

insert into test values(rowvar_user.code_old,rowvar_user.name_old,rowvar_user.corpid_old,rowvar_user.code_new,rowvar_user.name_new,rowvar_user.corpid_new,var_tag);   --将插入/更新/删除的列对应的字段内容以及DML操作的类型计入日志表test中

end tri_a_user;

现在是报错的,错误信息如下:

ORA-04091: 表 A_USER 发生了变化, 触发器/函数不能读它

ORA-06512: 在 "tri_a_user", line 9

ORA-04088: 触发器 'tri_a_user' 执行过程中出错

脚本行 8,语句行 1,列 7

我的判断应该是select * into rowvar_user from a_user where code_old=: old.code_old有问题

想请教一下,如何才能得到插入/更新/删除的列对应的字段内容呢?

多谢

  • 0
    点赞
  • 0
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值