ITPub博客

首页 > 数据库 > Oracle > EXECUTE IMMEDIATE 存储过程中 权限不足及EXECUTE IMMEDIATE的调试避坑

EXECUTE IMMEDIATE 存储过程中 权限不足及EXECUTE IMMEDIATE的调试避坑

原创 Oracle 作者:myis55555 时间:2019-09-26 16:15:55 0 删除 编辑

例子:

DECLARE
  i_tblname VARCHAR2(100);
  v_sql1 VARCHAR2(4000);
BEGIN
dbms_output.enable(9999999999);
v_sql1 :=
'insert into '||i_tblname||
             ' select * from emploees where field = ''xx'';'
EXECUTE IMMEDIATE v_sql1;
dbms_output.put_line(v_sql1);
END;
/


--  EXECUTE IMMEDIATE的调试

如果执行报错,解决思路可以将 v_sql1打印出来看下,是否符合执行标准。

负责的拼接语句很容易拼接出错,要及时调整。


输出sql查看时如果数据量太大可能会导致报错

ORA-20000: ORU-10027: buffer overflow, limit of 2000 bytes

在begin下加入 dbms_output.enable(9999999999);

设置 dbms_output输出的缓冲,默认是2000bytes!


-- EXECUTE IMMEDIATE 在存储过程中 权限不足的修改方法  afterupdate:当前执行用户

grant    

 CREATE SESSION,

    CREATE ANY TABLE,

    CREATE ANY VIEW ,

    CREATE ANY INDEX,

    CREATE ANY PROCEDURE,

    ALTER ANY TABLE,

    ALTER ANY PROCEDURE,  

 DROP ANY TABLE,

    DROP ANY VIEW,

    DROP ANY INDEX,

    DROP ANY PROCEDURE,

 SELECT ANY TABLE,

    INSERT ANY TABLE,

    UPDATE ANY TABLE,

    DELETE ANY TABLE

to afterupdate;





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

请登录后发表评论 登录
全部评论

注册时间:2018-12-22

  • 博文量
    17
  • 访问量
    21043