请大家帮小弟个忙困扰了好几天:我想弄个作业来执行存储过程,然后在存储过程中创建表,可是每次都无法创建,如果单独执行存储过程却可以~以下是代码:--jobs 定时任务代码DECLARE 
  X NUMBER; 
  
BEGIN   SYS.DBMS_JOB.SUBMIT 
    ( job       => X  
     ,what      => 'user_online_log_bak;' 
     ,next_date =>  TRUNC(LAST_DAY(SYSDATE ) + 1)
     ,interval  => 'TRUNC(LAST_DAY(SYSDATE ) + 1)' 
     ,no_parse  => TRUE
    ); 
END; 

commit;  --存储过程
create or replace procedure user_online_log_bak Authid Current_User is
 begin
  Execute Immediate 'create table digmusic.gaoyong23332 (sss VARCHAR2(2))';
end user_online_log_bak;

解决方案 »

  1.   

    先测试你的存储过程,如果正常
    再在Execute Immediate 'create table digmusic.gaoyong23332 (sss VARCHAR2(2))'
    这句话前执行前加个drop table命令
      

  2.   

    先drop
    后create
    然后启动job.
    看看有没有问题.
    如果还有问题.把错误贴出来.
      

  3.   

    begin
    dbms_job.run(301);
    end;如果手动的去运行jobs定时任务是可以创建表的自动运行时的时候却不可以~
      

  4.   


    我来告诉你原因。
    sqlplus中调用存储过程,可以应用role中的系统权限。
    但是job(确切点是procedure,job是procedure的一种)就无法使用role中的系统权限,
    必须有明确的create any table被grant才行。你只要用sys用户执行一下:grant create any table to 执行job的用户;就可以正常运行job了。