DBMS_SCHEDULER.CREATE JOB 不适用于 DBMS_OUTPUT.PUT_LINE?
DBMS_SCHEDULER.CREATE JOB does not working with DBMS_OUTPUT.PUT_LINE?
在问这个问题之前,我一直在网上搜索,但没有找到答案。简短的问题 - Oracle 的工作是否与 DBMS_OUTPUT 一起工作?我想在给定的时间间隔内在控制台上写一些文本,但它对我不起作用。例如,我想每 3 秒在控制台上写入一次时间戳。
工作 - 不工作。
工作+程序,也不行。
作业+程序+调度程序,不起作用...
任何人都可以给我一些提示如何获得它吗? :)
我的示例代码:
begin
dbms_scheduler.create_job (
job_name => 'some_job',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN DBMS_OUTPUT.PUT_LINE(SYSTIMESTAMP); END;',
start_date => SYSTIMESTAMP,
repeat_interval => 'FREQ=SECONDLY; INTERVAL=3',
end_date => NULL,
enabled => TRUE,
comments => 'Example job.');
end;
每项工作 运行 在其自己的会话中,与您的会话分开;您的控制台只会监听您的会话的输出,因此您的工作只是对空说话,其输出缓冲区在写入任何地方之前被清除。
因为 DBMS_OUTPUT 只是一个非常基本的调试输出生成器,所以这不是问题。如果您想实时查看工作进度,可以考虑以下两种选择:
将日志条目插入自定义 table(可能使用自治事务提交)——或者更好的是,使用现有的日志框架,如 Logger.
使用 DBMS_APPLICATION_INFO 更新会话(例如使用 set_action
或 set_session_longops
)- 这将允许您仅查看作业的当前状态,但是.
在 Oracle 12c 中,您可以使用一个新功能来准确捕获 DMBS_Output:
所有输出如
dbms_output.put_line('Done');
可见
select OUTPUT from DBA_SCHEDULER_JOB_RUN_DETAILS -- or USER_SCHEDULER_JOB_RUN_DETAILS
在问这个问题之前,我一直在网上搜索,但没有找到答案。简短的问题 - Oracle 的工作是否与 DBMS_OUTPUT 一起工作?我想在给定的时间间隔内在控制台上写一些文本,但它对我不起作用。例如,我想每 3 秒在控制台上写入一次时间戳。
工作 - 不工作。
工作+程序,也不行。
作业+程序+调度程序,不起作用...
任何人都可以给我一些提示如何获得它吗? :)
我的示例代码:
begin
dbms_scheduler.create_job (
job_name => 'some_job',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN DBMS_OUTPUT.PUT_LINE(SYSTIMESTAMP); END;',
start_date => SYSTIMESTAMP,
repeat_interval => 'FREQ=SECONDLY; INTERVAL=3',
end_date => NULL,
enabled => TRUE,
comments => 'Example job.');
end;
每项工作 运行 在其自己的会话中,与您的会话分开;您的控制台只会监听您的会话的输出,因此您的工作只是对空说话,其输出缓冲区在写入任何地方之前被清除。
因为 DBMS_OUTPUT 只是一个非常基本的调试输出生成器,所以这不是问题。如果您想实时查看工作进度,可以考虑以下两种选择:
将日志条目插入自定义 table(可能使用自治事务提交)——或者更好的是,使用现有的日志框架,如 Logger.
使用 DBMS_APPLICATION_INFO 更新会话(例如使用
set_action
或set_session_longops
)- 这将允许您仅查看作业的当前状态,但是.
在 Oracle 12c 中,您可以使用一个新功能来准确捕获 DMBS_Output: 所有输出如
dbms_output.put_line('Done');
可见
select OUTPUT from DBA_SCHEDULER_JOB_RUN_DETAILS -- or USER_SCHEDULER_JOB_RUN_DETAILS