求高手帮忙写一个触发器.
用来记录操作类型,操作时间,用户,被操作的表,操作表的所有字段的名称,一次操作后所有字段的新值,一次操作后所有字段的旧值..
我是这样写了一个做的试验
create or replace function aa(tbname varchar2)
return varchar2 as
vColName varchar2(30);
vRtn varchar2(1000):='';
begin
for cur in (select CNAME from col where TNAME=upper(tbname)) loop
vRtn := vRtn ||',' ||cur.CNAME;
end loop;
return vRtn;
end aa;create or replace function bb(tbname varchar2)
return varchar2 as
vColName varchar2(30);
vRtn varchar2(1000):='';
begin
for cur in (select CNAME from col where TNAME=upper(tbname)) loop
vRtn := vRtn ||':OLD' ||cur.CNAME;
end loop;
return vRtn;
end bb;
create or replace function cc(tbname varchar2)
return varchar2 as
vColName varchar2(30);
vRtn varchar2(1000):='';
begin
for cur in (select CNAME from col where TNAME=upper(tbname)) loop
vRtn := vRtn ||',' ||cur.CNAME;
end loop;
return vRtn;
end cc;
create or replace trigger aaa
before insert or update or delete
on a
for each row
declare
v_type char(10);
begin
if DELETING THEN
v_type:='delete';
elsif INSERTING THEN
v_type :='insert';
else
v_type :='update';
end if;
insert into b
values((select aa('a') from dual),(select bb('a') from dual),(select cc('a') from dual),v_type,user,sysdate,'a')
end;
触发器解释的时候,表a的所有字段都插入到b表了,可新旧值那个字段插入到b表的时候是:old.xxx||:old.xxx,没有把旧值带出来.
我做过试验的.可以在insert into 的时候把:old.xxx||:old.xxx都插入到一个字段里的,可这里,oracle把:old.xxx||:old.xxx看成是一个字符串直接给插入到表b里了.问大侠们怎么解决?
用来记录操作类型,操作时间,用户,被操作的表,操作表的所有字段的名称,一次操作后所有字段的新值,一次操作后所有字段的旧值..
我是这样写了一个做的试验
create or replace function aa(tbname varchar2)
return varchar2 as
vColName varchar2(30);
vRtn varchar2(1000):='';
begin
for cur in (select CNAME from col where TNAME=upper(tbname)) loop
vRtn := vRtn ||',' ||cur.CNAME;
end loop;
return vRtn;
end aa;create or replace function bb(tbname varchar2)
return varchar2 as
vColName varchar2(30);
vRtn varchar2(1000):='';
begin
for cur in (select CNAME from col where TNAME=upper(tbname)) loop
vRtn := vRtn ||':OLD' ||cur.CNAME;
end loop;
return vRtn;
end bb;
create or replace function cc(tbname varchar2)
return varchar2 as
vColName varchar2(30);
vRtn varchar2(1000):='';
begin
for cur in (select CNAME from col where TNAME=upper(tbname)) loop
vRtn := vRtn ||',' ||cur.CNAME;
end loop;
return vRtn;
end cc;
create or replace trigger aaa
before insert or update or delete
on a
for each row
declare
v_type char(10);
begin
if DELETING THEN
v_type:='delete';
elsif INSERTING THEN
v_type :='insert';
else
v_type :='update';
end if;
insert into b
values((select aa('a') from dual),(select bb('a') from dual),(select cc('a') from dual),v_type,user,sysdate,'a')
end;
触发器解释的时候,表a的所有字段都插入到b表了,可新旧值那个字段插入到b表的时候是:old.xxx||:old.xxx,没有把旧值带出来.
我做过试验的.可以在insert into 的时候把:old.xxx||:old.xxx都插入到一个字段里的,可这里,oracle把:old.xxx||:old.xxx看成是一个字符串直接给插入到表b里了.问大侠们怎么解决?
解决方案 »
- 请问我这道题第c,d问回答得对不对,跟答案好像不一样
- 在solaris中导入dmp文件到oracle数据库中
- oracle10g form 无法编译
- 请wiler(@_@)来接下分,昨天问题已解决,继续补分~
- proc 的程序能不能执行sql command命令?
- 刚到Oracle版本.准备天天送分:顺便学习,第一个问题:SQL函数改用Oracle 的写法?
- ORACLE数据库能否存取word、excel类型的文档?
- 什么是Instance?Instance Manager它怎么管理?我是初学者,好不多东西不懂,以
- ★急问!!!oracle的OracleOraHome81Agent启动不了,提示:错误3221356551.
- oracle导出数据,同一个session却导出的两个文件,编码格式却不一样
- 请问Sequence对象有一个排序选项是什么意思?
- 急,求访问bfile字段的方法
如果行的话,要怎么实现?