我使用的数据库是oracle 8.1.7,
若我直接使用匿名块,则可以成功创建表
begin
execute immediate 'create table aa(x number)';
end;
/
--------------------------------------------------------------------------------------------------
但是,若我在存储过程中,传递建表的SQL语句进入后,
再执行immediate却创建不了表,
执行"execute immediate ip_sqlstr"时有异常,
直接跳到exception,但是sqlcode和SqlErrM却没有值.
不知是什么原因,请大侠指教,谢谢!
--------------------------------------------------------------------------------------------------
create or replace procedure sp_create_table2(ip_owner varchar2, --用户
ip_table_name varchar2, --表名
ip_sqlstr varchar2 --SQL语句
) is
lv_flag char(1);
lv_owner varchar2(50);
lv_table_name varchar2(50);
begin
lv_owner := upper(ip_owner);
lv_table_name := upper(ip_table_name);
execute immediate ip_sqlstr;
exception
when others then
dbms_output.put_line('错误号:' || sqlcode);
dbms_output.put_line('错误描述:' || SqlErrM);
end;
/
execute immediate sp_create_table2('scott','aa','create table aa(x number)');PL/SQL procedure successfully completed
若我直接使用匿名块,则可以成功创建表
begin
execute immediate 'create table aa(x number)';
end;
/
--------------------------------------------------------------------------------------------------
但是,若我在存储过程中,传递建表的SQL语句进入后,
再执行immediate却创建不了表,
执行"execute immediate ip_sqlstr"时有异常,
直接跳到exception,但是sqlcode和SqlErrM却没有值.
不知是什么原因,请大侠指教,谢谢!
--------------------------------------------------------------------------------------------------
create or replace procedure sp_create_table2(ip_owner varchar2, --用户
ip_table_name varchar2, --表名
ip_sqlstr varchar2 --SQL语句
) is
lv_flag char(1);
lv_owner varchar2(50);
lv_table_name varchar2(50);
begin
lv_owner := upper(ip_owner);
lv_table_name := upper(ip_table_name);
execute immediate ip_sqlstr;
exception
when others then
dbms_output.put_line('错误号:' || sqlcode);
dbms_output.put_line('错误描述:' || SqlErrM);
end;
/
execute immediate sp_create_table2('scott','aa','create table aa(x number)');PL/SQL procedure successfully completed
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货