EXECUTE IMMEDIATE 儲存過程中 許可權不足及EXECUTE IMMEDIATE的除錯避坑

myis55555發表於2019-09-26

例子:

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部落格 ” ,連結:http://blog.itpub.net/69903557/viewspace-2658366/,如需轉載,請註明出處,否則將追究法律責任。

相關文章