有一个表 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 日值表
现在我想写一个触发器实现一下功能:
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 ;但是我测试后发现实现不了以上功能..
请教大侠们该如何实现...
解决方案 »
- progress编程的几个问题,请指教
- oracle的表中为何不能两列以上数据类型都是long ?
- 在线高分求救:索引AEWS.PK_TS_ITEMVALUE无法通过5394(在表空间AEWS中)扩展
- 如何停止oracle的web服务器 servlet
- 大家帮忙看看这个查询效率的问题
- 挑战您的智慧:路由选择算法??走过路过的都进来看看吧
- 包中定义的变量与包体中过程定义的参数名相同,如何把参数的值赋值给包中的变量???
- 改变字符集
- 这样的SQL语句怎么写?在线等
- oracle安装及EM使用教程
- 急!!!row_number()over(partition by 用在存储过程中无效,恳请高手相助!!
- ORACLE MERGER 的应有和问题
二、最好先DECLARE一个VARCHAR2变量internet_ip,然后在触发器里写
select sys_context('userenv','ip_address') into internet_ip from dual;
insert into table_log values (internet_ip);
二、最好先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.第二个方法我用过,一样不行.用不用定义一个变量其实都是一样的结果.
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'
我知道的只有以上两种,不知道还有什么别的方法?