我放松了我的想法。我有一个名为foo()的过程,它不带任何参数。我想每3分钟执行一次,比如说。我写的代码如下所示:DBMS调度程序oracle - 如何执行程序
BEGIN
dbms_scheduler.create_job(job_name => FooJob,
job_type => 'PLSQL_BLOCK',
job_action => '
BEGIN
foo();
END;',
start_date => SYSTIMESTAMP,
repeat_interval => 'FREQ=MINUTELY;INTERVAL=3;BYHOUR=17;BYMINUTE=35;',
enabled => TRUE
comments => 'A comment.');
END;
/
这给了我一个错误:应该定义标识符'applyjobpenalities'。
我在此基础上例如:How to execute a procedure with DBMS_SCHEDULER.CREATE_JOB procedure
另外:
1)如何FOO的执行之后执行dbms_output.put_line()
();?是否可以直接放这条线?
2)如何检查程序foo()
是否(正在)代表调度程序执行?
UPDATE: 好了,所以我所做的就是:
1)我在SQL类型Plus的设置SERVEROUTPUT上“
2)我做了一个程序:
create or replace procedure proc1
IS
BEGIN
dbms_output.put_line('sth');
end;
/
3)我将调度程序代码更改为:
BEGIN
dbms_scheduler.create_job( job_name => 'JustATest',
job_type => 'PLSQL_BLOCK',
job_action =>
'BEGIN
proc1();
END;',
start_date => systimestamp + interval '10' second,
repeat_interval => 'FREQ=SECONDLY',
enabled => TRUE);
END;
/
但我在SQL Plus中看不到任何结果。我错过了什么?这两个过程都成功地编译和当我输入我可以看到这个工作:
SELECT * FROM DBA_SCHEDULER_JOBS;
阅读文档 - https://docs.oracle.com/cd/B28359_01/server.111/b28310/schedadmin002.htm#ADMIN12039请显示完整的错误堆栈跟踪。您无法从后台作业中“查看”dbms_output。 – OldProgrammer
proc1正在后台运行。您看不到dbms_output的输出。不知道如何让这个更清楚。如果需要,写入日志表。 – OldProgrammer
我现在明白了,谢谢。但是,如果我使用其他更新数据的过程,我没有看到它实际运行。那怎么了? – monterinio