请大家帮小弟个忙困扰了好几天:我想弄个作业来执行存储过程,然后在存储过程中创建表,可是每次都无法创建,如果单独执行存储过程却可以~以下是代码:--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;
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;
再在Execute Immediate 'create table digmusic.gaoyong23332 (sss VARCHAR2(2))'
这句话前执行前加个drop table命令
后create
然后启动job.
看看有没有问题.
如果还有问题.把错误贴出来.
dbms_job.run(301);
end;如果手动的去运行jobs定时任务是可以创建表的自动运行时的时候却不可以~
我来告诉你原因。
sqlplus中调用存储过程,可以应用role中的系统权限。
但是job(确切点是procedure,job是procedure的一种)就无法使用role中的系统权限,
必须有明确的create any table被grant才行。你只要用sys用户执行一下:grant create any table to 执行job的用户;就可以正常运行job了。