有一个表 tablea 有一个字段 sts .
表 table_log 日值表
现在我想写一个触发器实现一下功能:
1 sts 不能 从'Y' 改为 'N'
2 记录下来是那个ip的用户在做这个操作(把'Y' 改为 'N').我的程序如下:
     if :old.sts = 'Y' and :new.sts='N' then
     insert into table_log
        values (SYS_CONTEXT('USERENV','IP_ADDRESS'));
    
    raise_application_error(-20004,'不能把Y改成N');
  
     end if ;但是我测试后发现实现不了以上功能..
请教大侠们该如何实现...

解决方案 »

  1.   

    一、table_log表只有一个字段?如果是同一个IP地址的机器改了STS的值,第一次INSERT可以成功,那第二次INSERT不是主键重复?
    二、最好先DECLARE一个VARCHAR2变量internet_ip,然后在触发器里写
    select sys_context('userenv','ip_address') into internet_ip from dual; 
    insert into table_log values (internet_ip);
     
      

  2.   

    一、table_log表只有一个字段?如果是同一个IP地址的机器改了STS的值,第一次INSERT可以成功,那第二次INSERT不是主键重复? 
    二、最好先DECLARE一个VARCHAR2变量internet_ip,然后在触发器里写 
    select sys_context( 'userenv ', 'ip_address ') into internet_ip from dual;  
    insert into table_log values (internet_ip); 
      -----------------------------
    不是这个问题,
    1.table_log 我没有设主键.
    2.第二个方法我用过,一样不行.用不用定义一个变量其实都是一样的结果.
      

  3.   

    create or replace trigger tri_spjk_table before update on tablea for each row这样行吗??
      

  4.   

    要用instead of 触发器!!
    create or replace trigger tri_spjk_table 
    instead of update on tablea for each row
      

  5.   

    再修改一下:
    create or replace trigger tri_spjk_table  
    instead of update of sts on tablea for each row 
      

  6.   

      to gxlineji  instead of 只能用在视图吧
      

  7.   

    那就创建个图视!!
    要实现  1 sts 不能 从 'Y ' 改为  'N 
    可以
    (1)用instead of 触发器!
    (2)在触发器中再把sts值改为'Y'
    我知道的只有以上两种,不知道还有什么别的方法?