create or replace procedure sql_ddl is
sqlstr1 varchar2(150);
sqlstr2 varchar2(150);
sqlinstr1 varchar2(150);
begin
sqlstr1 := 'drop table mytest';
execute immediate sqlstr1;
exception
when others then
null;
commit;
sqlstr2 := 'create table mytest(code number(6) not null ,name varchar2(50) )';
execute immediate sqlstr2;
commit;
sqlinstr1 := 'insert into mytest(code,name) values(:code,:name)';
execute immediate sqlinstr1
using 2, 'test';
commit;
end sql_ddl;
上边代码运行时,如果有异常,则异常处理代码及后边的动态语句都能正常执行,而如果没有异常产生,为什么异常前边的代码执行完直接会跳到end 结束程序?
sqlstr1 varchar2(150);
sqlstr2 varchar2(150);
sqlinstr1 varchar2(150);
begin
sqlstr1 := 'drop table mytest';
execute immediate sqlstr1;
exception
when others then
null;
commit;
sqlstr2 := 'create table mytest(code number(6) not null ,name varchar2(50) )';
execute immediate sqlstr2;
commit;
sqlinstr1 := 'insert into mytest(code,name) values(:code,:name)';
execute immediate sqlinstr1
using 2, 'test';
commit;
end sql_ddl;
上边代码运行时,如果有异常,则异常处理代码及后边的动态语句都能正常执行,而如果没有异常产生,为什么异常前边的代码执行完直接会跳到end 结束程序?
解决方案 »
- oracle中含clob字段的数据表同步问题
- SRTP项目选题
- ORACLE的远程数据访问---急急急, 请各位大哥帮忙
- 请问,在pc上用oci必须装oracle吗?不装的话, 怎么能够解决TNS 服务器名的问题?
- 请问有什么较好的oracle入门书介绍啊?
- redhat linux 9.2 安装oracle9i 的字符集问题,请指教!
- 数据库导入问题,求教
- 两个表t1,t2,如果t1中的f2为空,则用t2中的f3来代替,
- 如何求下一天的日期
- 自动追踪转账规律(oracle语句)
- oracle 9i for linux:怎么完全删除创建的一个数据库.
- 初学oracle,调用过程出错,思考很久没有答案,望大大指教,谢谢!
begin end;包一下
sqlstr1 varchar2(150);
sqlstr2 varchar2(150);
sqlinstr1 varchar2(150);
begin
begin
sqlstr1 := 'drop table mytest';
execute immediate sqlstr1;
exception
when others then
null;
commit;
end; sqlstr2 := 'create table mytest(code number(6) not null ,name varchar2(50) )';
execute immediate sqlstr2;
commit;
sqlinstr1 := 'insert into mytest(code,name) values(:code,:name)';
execute immediate sqlinstr1
using 2, 'test';
commit;
end sql_ddl;
grantstr1:='grant create any table to kqgl';
execute immediate grantstr1;
kqgl 改成你的用户就可以了create or replace procedure sql_ddl is
sqlstr1 varchar2(150);
sqlstr2 varchar2(150);
sqlinstr1 varchar2(150);
grantstr1 varchar2(150);
begin
sqlstr1 := 'drop table mytest';
execute immediate sqlstr1;
exception
when others then
null; grantstr1:='grant create any table to kqgl';
execute immediate grantstr1;
sqlstr2 := 'create table mytest(code number(6) not null ,name varchar2(50) )';
execute immediate sqlstr2; sqlinstr1 := 'insert into mytest(code,name) values(:code,:name)';
execute immediate sqlinstr1
using 2, 'test';
commit;
end sql_ddl;
commit;
sqlstr2 := 'create table mytest(code number(6) not null ,name varchar2(50) )';
execute immediate sqlstr2;
commit;
sqlinstr1 := 'insert into mytest(code,name) values(:code,:name)';
execute immediate sqlinstr1
using 2, 'test';
commit;
这部分都是异常处理的东西,所以异常时执行,没有异常时不会执行