你的字段没有说明清楚或许应该这样吧:
create or replace trigger BBGX_TRIG
  after update on zcbbxx    
  for each row
declare 
        old_version varchar2(20);
        new_version varchar2(20);
begin  
           select bbxxbh into old_version from zcbbxx
           where  sybz = '1'; 
           new_version := :new.bbxxbh
end;

解决方案 »

  1.   

    上的东东写错,我现在改正为:
    表结构如下
    bbxxbh    sybz
    AAA        1         --使用
    BBB        2
    实现功能,假如user_flag发生变化时(update)例如由BBB 2-->1时,希望得到的值是old_version = 'AAA',new_sion = 'BBB'.
    我的触发器是(本表用触发器不用PROCESS)
    create or replace trigger BBGX_TRIG
      before update on zcbbxx    
      for each row
    declare 
            old_version varchar2(20);
            new_version varchar2(20);begin          
               select bbxxbh into old_version from zcbbxx
               where  sybz = '1'; 
               new_version := :old.bbxxbh
    end;
    这个结果是错误的,请各位大侠伸出援助之手,帮助小弟一把。
      

  2.   

    1.select bbxxbh into old_version from zcbbxx
               where  sybz = '1'; 
    在我看来,错误可能出在这里,因为对于ORACLE来说,如果SELECT语句返回多条记录,则会触发错误异常.你是否可以确定表中只有两条记录.
    2.另外注意,写了触发器的表,对于当前连接是活动表,不能对他使用li下列函数:
       count,sum,max ...等
    3.你的写发是否可行,我需要测试一下.
      

  3.   

    我测试了一下,这样不行,因为是活动表,不能执行这种查询.
    建议将最新的 bbxxbh放在另外一张表中,这样就没有问题了:
    create or replace trigger w_sy before update on tab1 for each row
    declare 
    oldver varchar2(10);
    newver varchar2(10);
    begin
     select aa into oldver from tab2; 
     update tab2 set aa = newver;
     newver := :old.aa;
    end;
      

  4.   

    首先解释其触发器得出的结果是这样
    select bbxxbh into old_version from zcbbxx
               where  sybz = '1';   --odl_version=BBBnew_version := :old.bbxxbh   --new_version=BBB 问题一是因为行级别前,select bbxxbh into old_version from zcbbxx where  sybz = '1'这条语句只能查询一条语句符合,即bbxxbh    sybz
                                         AAA        1
    行级别前只能在触发器完成后,数据才能体现到数据库表