触发器的问题
有一个表 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 ;
但是我测试后发现实现不了以上功能..
请教大侠们该如何实现...
------解决方案--------------------一、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);
------解决方案--------------------上面的语句好像没什么问题,你再看看你的触发器是否正确创建?是哪种触发器(行级,表级?)
如果是表级的话就不行了!!
------解决方案--------------------要用instead of 触发器!!
create or replace trigger tri_spjk_table
instead of update on tablea for each row
------解决方案--------------------再修改一下:
create or replace trigger tri_spjk_table
instead of update of sts on tablea for each row
------解决方案--------------------那就创建个图视!!
要实现 1 sts 不能 从 'Y ' 改为 'N
可以
(1)用instead of 触发器!
(2)在触发器中再把sts值改为'Y'
我知道的只有以上两种,不知道还有什么别的方法?