我是靠谱客的博主 大力冬日,最近开发中收集的这篇文章主要介绍修改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有问题

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

多谢

最后

以上就是大力冬日为你收集整理的修改oracle 触发器,触发器实现对表增删改的记录的全部内容,希望文章能够帮你解决修改oracle 触发器,触发器实现对表增删改的记录所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部