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子句,调用者照样可以使用这个过程。