打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
(3)存储过程中调用EXECUTE IMMEDIATE的“权限不足”问题
    EXECUTEIMMEDIATE是Oracle中使用动态SQL的一种方法,可以直接执行,也可以在存储过程中调用。然而在存储过程中调用可能会遇到权限不足的问题,如在存储过程中执行建表语句:

CREATE OR REPLACE proceduretableProc(tn varchar2) IS
sqlstr varchar2(100);
BEGIN
  sqlstr := 'CREATE TABLE ' || tn || '(id Integer)';
  EXECUTE IMMEDIATE sqlstr;

END tableProc;
在命令行中执行返回如下结果:

SQL> EXECUTEtableProc('abc')

begin tableProc('abc'); end;

ORA-01031: 权限不足
ORA-06512: 在"SCOTT.TABLEPROC", line 5
ORA-06512: 在line 1

然而,如果我们直接在PL/SQL的语句执行,如下:
SQL> BEGIN
    EXECUTEIMMEDIATE 'CREATE TABLE abc (ID INTEGER)';
  END;

Table created
则提示执行成功。
   这问题如何解决呢?
  既然提示说权限不足,所以问题的解决方法就是要赋予用户scott Create AnyTable的权限,以SYS登录,然后执行:

GRANT CREATE ANY TABLE TO SCOTT

   再次执行以上的存储过程,成功了吧!

SQL> EXECUTEtableProc('abc');
PL/SQL procedure successfully completed

   所以,如果在存储过程中调用EXECUTEIMMEDIATE出现“权限不足”问题,就需要赋予用户更多的权限,比如说在存储过程中创建或修改触发器遇到“权限不足”,就应该执行:

GRANT CREATE ANY TRIGGER TO SCOTT

 其他情况也是一样的。


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ORA-24324: service handle not initialized - 华...
如何在存储过程中拥有role的权限
Oracle学习笔记(6) 动态SQL - telense的日志 - 网易博客
使用 Authid Current_User 为调用者授权
Oracle存储过程ORA
Oracle 动态SQL返回单条结果和结果集
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服