解决方案 »
- oracle指定job号建立job,job号不对
- oracle 查询结果作为where条件
- 存储过程读写磁盘的系统权限问题
- 哪位大虾帮我看看数据库的参数设置是否合理?
- PRO*C中运行一SQL语句,无任何反应?
- 利用JDBC查询得到ResultSet,如何获取Field信息?
- 关于oracle 8.1.7 字符集
- 急问:请高手给出一个数据库管理的基本过程和内容!
- 在线等:哪里有oracle软件的下载呀?应者有分!
- 高手: 用oracle 批量(几万条)插入数据,因为无法保证数据的可靠性,速度很慢,用commit ,速度一下就快了。有什么解决办法。
- 如何查看oracle 10g 的操作日志?
- 各位大神。。。。求解呀
create trigger tr_insert
after insert or update on table_name
for each row
begin
when inserting or updating then
:new.columns_name=lower(:new.columns_name);
end;
after insert or update on emp
declare
begin
if inserting then update emp set ename=lower(ename);
end if;
end;
after insert or update on table_name
for each row
begin
when inserting or updating then
:new.columns_name:=lower(:new.columns_name);
end;
你的已用时间: 00: 00: 00.00
16:38:13 SCOTT@orcl> ed
已写入 file afiedt.buf 1 create trigger tr_insert
2 after insert or update on scott.emp
3 for each row
4 begin
5 if inserting or updating then
6 :new.ename:=lower(:new.ename);
7 end if;
8* end;
16:38:39 SCOTT@orcl> /
create trigger tr_insert
*
第 1 行出现错误:
ORA-04084: 无法更改此触发器类型的 NEW 值
我的16:38:41 SCOTT@orcl> ed
已写入 file afiedt.buf 1 create or replace trigger tr_emp
2 after insert or update on scott.emp
3 declare
4 begin
5 if inserting then update emp set ename=lower(ename);
6 end if;
7* end;
16:39:33 SCOTT@orcl> /触发器已创建
16:40:15 SCOTT@orcl> select ename from emp;ENAME
----------
G001
GWMK
W002
W001
G002
1002
1002
TEST110
TEST111
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER已选择23行。16:40:19 SCOTT@orcl> insert into emp(empno,sal) values(1214,1212);已创建 1 行。已用时间: 00: 00: 00.01
16:41:21 SCOTT@orcl> commit;提交完成。已用时间: 00: 00: 00.01
16:41:26 SCOTT@orcl> select ename from emp;ENAME
----------
<null>
g001
gwmk
w002
w001
g002
1002
1002
test110
test111
smith
allen
ward
jones
martin
blake
clark
scott
king
turner
adams
james
ford
miller已选择24行。已用时间: 00: 00: 00.03
非得这么较真弟弟
完整的编译通过的代码:create or replace trigger tr_emp
before insert or update on scott.emp
for each row
begin
if inserting or updating then
:new.ename:=lower(:new.ename);
end if;
end;
你的代码,触发器会被调用两次,insert触发一次 调用update
update 再次触发一次
这样存在安全隐患,隐患的程度取决于你updating的处理情况。
不是较真,是因为没见过after触发里还能修改:new值的
我的我知道update处理的话会造成死循环,所以没处理update的如果用before 那就好办了嘛