【发布时间】:2015-06-15 09:35:52
【问题描述】:
我正在尝试创建一个过程,该过程将对几个表执行某些更新,然后安排另一个过程稍后运行以将它们恢复。我在使用 DBMS_SCHEDULER.CREATE_JOB 时遇到了问题。我的代码如下所示:
create or replace procedure My_Procedure(p_DUNS in varchar2, p_PLUS_FOUR in varchar2) is
*SOME VARIABLES*
Begin
*DO SOME STUFF*
p_JOB_ACTION := 'begin run_other_procedure(' || p_VENDOR_ID || ', ' || p_CCRID || ', ' || nvl(to_char(p_INACTIVE_DATE),'null') || ',' || nvl(to_char(p_END_DATE),'null') || '); END;';
DBMS_SCHEDULER.CREATE_JOB(job_name => 'DEACTIVE_VENDOR_'||to_char(p_CCRID),
job_type => 'PLSQL_BLOCK',
JOB_ACTION => p_JOB_ACTION,
start_date => sysdate+1,
enabled => TRUE,
comments => 'Calls PLSQL once');
END;
我已经验证了程序的开始部分,但是当我添加 CREATE_JOB 时出现以下错误:
Error starting at line : 1 in command -
execute MY_PROCEDURE('140986105', null)
Error report -
ORA-27486: insufficient privileges
ORA-06512: at "SYS.DBMS_ISCHED", line 124
ORA-06512: at "SYS.DBMS_SCHEDULER", line 271
ORA-06512: at "CGEXT.MY_PROCEDURE", line 63
ORA-06512: at line 1
27486. 00000 - "insufficient privileges"
*Cause: An attempt was made to perform a scheduler operation without the
required privileges.
*Action: Ask a sufficiently privileged user to perform the requested
operation, or grant the required privileges to the proper user(s).
当我拉出 CREATE_JOB 并自行运行时,我没有任何问题。
对此有什么想法吗?
【问题讨论】:
-
您的 Oracle 用户很可能通过角色获得使用
dbms_scheduler的权限。通过角色授予的特权在 PL/SQL 中无效。需要直接授予用户权限 -
询问您的数据库管理员 1. 授予权限 2. 配置调度程序(有并发作业计数等设置)
-
运行以下命令授予权限:DBMS_RULE_ADM.GRANT_SYSTEM_PRIVILEGE(DBMS_RULE_ADM.CREATE_RULE_OBJ, 'CGEXT');还有另外两项赠款。还有什么可以授予用户这个角色的吗?
标签: sql oracle stored-procedures dbms-scheduler