注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

有你做翅膀,孤单都是坚强

生命中总要经历曲折,或许是我们不愿意,突然到最后走不通,想重新来过,记录每件小事

 
 
 

日志

 
 
关于我
K24

曾经的生涩,曾经的懵懂,曾经的自恋,都随风去吧。。。

网易考拉推荐
 
 

ORA-01027:在数据定义操作中不允许对变量赋值  

2016-09-10 12:58:13|  分类: @sql |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
请问大家我仿照用DBMS_SQL包写的例子为什么不对。代码如下:
create or replace procedure com_test(v_je_source in varchar2) is
  v_cursorid     integer;
  v_createstring varchar2(4000);
  v_result       integer;
begin
  v_createstring := 'create or replace view test(je_source) as select
:je_source from dual';
  v_cursorid     := dbms_sql.open_cursor;
  dbms_sql.parse(v_cursorid, v_createstring, dbms_sql.native);
  dbms_sql.bind_variable(v_cursorid, ':je_source', v_je_source);
  v_result := dbms_sql.execute(v_cursorid);
  dbms_sql.close_cursor(v_cursorid);
  DBMS_OUTPUT.PUT_LINE(v_result);
end com_test;
编译成功。
然后执行:
begin
  com_test('DUMMY');
end;
报错信息:
ORA-01027:在数据定义操作中不允许对变量赋值





-------------------------------------------------------------------------------------------------------------------------
已经解决了。谢谢回复。贴上正确的代码:
create or replace procedure com_test(v_je_source in varchar2) AUTHID CURRENT_USER is
  v_cursorid     integer;
  v_createstring varchar2(4000);
  v_result       integer;
begin
  v_createstring := 'create or replace view test2(je_source) as select ' ||
                    v_je_source || ' from dual';
  v_cursorid     := dbms_sql.open_cursor;
  dbms_sql.parse(v_cursorid, v_createstring, dbms_sql.native);
  --dbms_sql.bind_variable(v_cursorid, ':je_source', v_je_source);
  v_result := dbms_sql.execute(v_cursorid);
  dbms_sql.close_cursor(v_cursorid);
  DBMS_OUTPUT.PUT_LINE(v_result);
end com_test;

AUTHID CURRENT_USER 代表存储过程执行的时候使用调用者模式,这样存储过程就对role权限可见。同时,使用DBMS_SQL包执行DDL语句的时候不允许使用 DBMS_SQL.BIND_VARIABLE()函数,只能通过变量的方式来传递。否则编译能过但执行的时候会报错。
  评论这张
 
阅读(10)| 评论(0)
推荐

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017