我有一个存贮过程P,里面调用了创建了同义词的一个存储过程C,将过程P作为JOB执行时,说权限不够,但该过程在PL/SQL语句中执行是可以的。
简单示例如下:
CREATE OR REPLACE Procedure C(P_DbLink varchar2)  authid current_user AS
begin
  execute immediate 'create or replace synonym TD_DEVICE for TD_DEVICE@||p_dblink;
end;CREATE OR REPLACE Procedure P(P_DbLink varchar2)  authid current_user AS
begin
  C(p_dbLink);
end;--Job调度脚本,执行后,JOB已经创建JOb1已经返回,但执行JOB出现权限不够的错误:
declare 
  job1 number;
begin
  dbms_job.submit(job1,'P(''LS'');',sysdate,'sysdate+120/1440');
  dbms_Output.put_line(job1);
  dbms_job.run(Job1); 
end;

解决方案 »

  1.   

    --使用dba角色授权:conn /as sysdba;
    grant connect,resource,select any table to Current_user;
      

  2.   

    这个问题是比较怪异的,我也遇到过你同样的情况.
    要对调度job的用户进行一次grant即可.grant create any synonym to user_name;
      

  3.   

    grant create synonym to username;
      

  4.   

    grant create any view,create any synonym,drop any view to Current_user;
      

  5.   

    亦即是要显式进行授权,understand??