我又一个存储过程,在存储过程的开头增加了主表索引失效的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;我想在存储过程里面实现自动关闭触发器自动开启触发器的功能操作,如何实现呢?
解决方案 »
- OCI编程,请问如何来使用事物?谁能给一个sample
- 求助...in里的内容如何动态...
- 求一个录入了中国城市之间距离的数据库
- 高手帮一下忙:ORA-12516: TNS: 监听程序找不到符合协议堆栈要求的可用处理程
- 比较简单的表关联问题
- 200分求【全国2005年1月高等教育自学考试】【数据结构】答案--分不够另外开帖,请高手帮忙!谢谢了
- 一个字段是rowid数据类型,执行插入时如何给它指定值
- 关于sqlplus的小问题
- oracle数据库问题?
- 如何实现数据表的数据横排打印出来
- 紧急求助:使用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")一样。