【发布时间】:2021-09-29 18:12:01
【问题描述】:
我疯了。我有一个名为 foo() 的过程,它不接受任何参数。我想每 3 分钟执行一次。我写的代码如下:
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() 是否代表调度程序执行?
更新: 好的,我所做的是:
1) 我输入了 SQL Plus 'set serveroutput on'
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;
【问题讨论】:
-
阅读文档 - docs.oracle.com/cd/B28359_01/server.111/b28310/… 请显示完整的错误堆栈跟踪。您无法从后台作业“看到” dbms_output。
-
proc1 正在后台运行。您看不到 dbms_output 的输出。不知道如何使它更清楚。如果需要,写入日志表。
-
我明白了,谢谢。但是,如果我使用其他更新数据的程序,我看不到它实际运行。那怎么了?