求高手帮忙写一个触发器.
用来记录操作类型,操作时间,用户,被操作的表,操作表的所有字段的名称,一次操作后所有字段的新值,一次操作后所有字段的旧值..
我是这样写了一个做的试验
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里了.问大侠们怎么解决?