oracle procedure plsql 动态sql之动态传递表

SQL> create or replace procedure proc_sql
  2  as
  3  v_tab varchar2(100);
  4  begin
  5    v_tab:='zxy';
  6  execute immediate 'create table :tab(a int)' using v_tab;
  7  end;
  8  /
 
Procedure created
 
SQL> exec proc_sql;
 
begin proc_sql; end;
 
ORA-00903: invalid table name
ORA-06512: at "TBS_AUTO.PROC_SQL", line 6
ORA-06512: at line 2

小结;不能用绑定变量方式传入表名

SQL> create or replace procedure proc_sql
  2  as
  3  v_tab varchar2(100);
  4  v_sql varchar2(4000);
  5  begin
  6  v_tab:='zxy';
  7  execute immediate 'create table '||v_tab||'(a int)';
  8  end;
  9  /
 
Procedure created
 
SQL> exec proc_sql;
 
begin proc_sql; end;
 
ORA-01031: insufficient privileges
ORA-06512: at "TBS_AUTO.PROC_SQL", line 7
ORA-06512: at line 2

 

小结:使用拼接字符串可以创建动态sql

         但若执行动态sql所属的存储过程,即提上述错误

 

SQL> create or replace procedure proc_sql
  2  AUTHID CURRENT_USER is
  3  v_tab varchar2(100);
  4  v_sql varchar2(4000);
  5  begin
  6  v_tab:='zxy';
  7  execute immediate 'create table '||v_tab||'(a int)';
  8  end;
  9  /
 
Procedure created
 
SQL> exec proc_sql;
 
PL/SQL procedure successfully completed
 
SQL> desc zxy;
Name Type    Nullable Default Comments
---- ------- -------- ------- --------
A    INTEGER Y

小结:添加选项AUTHID CURRENT_USER is
         即要正确运行

 

 

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9240380/viewspace-754699/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9240380/viewspace-754699/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值