我又一个存储过程,在存储过程的开头增加了主表索引失效的sql,结果编译可以通过,但是执行的时候,报如下错误:ORA-00911: invalid character
ORA-06512: at "ADD114.YH_TMQY_MERGER_UPDATE", line 45
ORA-06512: at line 7我的存储过程架构如下:create or replace procedure YH_TMQY_MERGER_Update(
out_flag out number,
out_message out varchar2
)
/*
......
*/
is
.......--定义了很多变量,略过。
begin
v_flag:=0;
execute immediate 'alter table t_customer_tel disable all triggers;';
--我这里关闭触发器的理由是,我对表的操作丝毫不影响别的业务,所以那些触发器对我毫无意义可言,所以为了效率我要关闭。
......
--这里面N多sql,对t_customer_tel进行操作,由于表的触发器太多了,
--我这里要处理的表的记录也多,如果不关闭触发器的话,就会卡死在这里
--所以我先关闭所有的触发器,然后执行完毕之后打开所有的触发器。
......
--异常处理
-- return ;
execute immediate 'alter table t_customer_tel enable all triggers;';
end YH_TMQY_MERGER_Update;我想在存储过程里面实现自动关闭触发器自动开启触发器的功能操作,如何实现呢?
ORA-06512: at "ADD114.YH_TMQY_MERGER_UPDATE", line 45
ORA-06512: at line 7我的存储过程架构如下:create or replace procedure YH_TMQY_MERGER_Update(
out_flag out number,
out_message out varchar2
)
/*
......
*/
is
.......--定义了很多变量,略过。
begin
v_flag:=0;
execute immediate 'alter table t_customer_tel disable all triggers;';
--我这里关闭触发器的理由是,我对表的操作丝毫不影响别的业务,所以那些触发器对我毫无意义可言,所以为了效率我要关闭。
......
--这里面N多sql,对t_customer_tel进行操作,由于表的触发器太多了,
--我这里要处理的表的记录也多,如果不关闭触发器的话,就会卡死在这里
--所以我先关闭所有的触发器,然后执行完毕之后打开所有的触发器。
......
--异常处理
-- return ;
execute immediate 'alter table t_customer_tel enable all triggers;';
end YH_TMQY_MERGER_Update;我想在存储过程里面实现自动关闭触发器自动开启触发器的功能操作,如何实现呢?
解决方案 »
- 如何设置oracle数据库不区分大小写
- 有没有比较适合画库表数据关系的工具
- oracle怎么指定数据库
- \ORACLE\Apache\Apache\logs\error_log这个文件的作用
- 如何确定某一天所在的周是一年的第几周?
- Knowledge Xpert 怎么用
- 关于修改临时表数据结构的问题
- oracle9i的management server怎么启动呀?需要先启动什么东西吗??
- SQLLDR是否支持文件通配符
- 在安装到100%的时候弹出启动服务出错。。怎么办。。急。。。
- 紧急求助:使用C#编写的程序,本地oracle9客户端,访问远程oracle7数据库的问题!
- 关于sql的like查询
execute immediate 'alter table t_customer_tel enable all triggers;';
-----------------------
把这两句里面的;去掉。。试试这样:
execute immediate 'alter table t_customer_tel disable all triggers';
execute immediate 'alter table t_customer_tel enable all triggers';
同意,compile能通过,是因为是动态sql,只有你执行的时候,才能解析这条sql的,所以compile可以通过run的时候,来解析这条sql你这条sql里不应该出现; 所以这里是语法错误。去掉就可以了。
是的哟,动态sql里不同静态sql,compile的时候不会检查这个动态sql的语法,因为是动态的。运行的时候到这里的时候,才会解析这个sql,动态sql不要用;结尾。其实这个和java里的Class.forName("xxx.xxx.xxx")一样。