日期:2014-05-16  浏览次数:20397 次

JOB执行存储过程时报:ORA-01031: insufficient privileges问题的解决
编写了一个存储过程,手动执行的时候没有问题,但创建job调用存储过程的时候报错:ORA-01031: insufficient privileges。
  在网上查了查,说是没有权限创建表,要显示授权,在创建存储过程的时候加上:Authid Current_User,修改后的存储过程结构如下:
CREATE OR REPLACE PROCEDURE P_RES_F_UD_FLOW(TIME_DAY IN NUMBER) Authid Current_User AS

  ERR_DESC    VARCHAR2(32767);
  V_SQL_ERROR VARCHAR2(32767);

BEGIN

  EXECUTE IMMEDIATE 'CREATE TABLE T_RES_F_UD_FLOW_TMP_1
(
  COVER_NAME  VARCHAR2(200) not null,
  TIME_TYPE   INTEGER,
  TIME_DAY    NUMBER(8),
  TIME_HOUR   NUMBER(2),
  GPRS_FLOW   FLOAT,
  TD_FLOW     FLOAT,
  WLAN_FLOW   FLOAT
)';

END P_RES_F_UD_FLOW;
问题解决。
总结:
存储过程默认是用定义者definer 的身份调用的,如果加上AUTHID CURRENT_USER,则用当前登陆的用户权限调用,如果该过程的调用者(而非定义者)被授与系统权限execute any procedure或是被该过程的定义者grant execute on授权的话,不用这个AUTHID CURRENT_USER子句,调用者照样可以使用这个过程。