代码之家  ›  专栏  ›  技术社区  ›  m.misiorny

DBMS_调度程序。创建作业不使用DBMS\u输出。放线?

  •  0
  • m.misiorny  · 技术社区  · 7 年前

    在问这个问题之前,我一直在网上搜索,但并没有找到答案。简短的问题-Oracle的工作是处理DBMS_输出吗?我想在控制台上以给定的间隔编写一些文本,但它对我不起作用。例如,我想每隔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;
    
    2 回复  |  直到 7 年前
        1
  •  3
  •   Jeffrey Kemp    7 年前

    每个作业都在各自的会话中运行,与您的会话不同;您的控制台将只监听会话的输出,因此您的作业只是在空白中说话,其输出缓冲区在写入任何位置之前被清除。

    自从 DBMS_OUTPUT

    1. 将日志条目插入到自定义表中(可能使用自治事务进行提交),或者更好地使用现有的日志框架,如 Logger .

    2. 使用更新会话 DBMS_APPLICATION_INFO set_action set_session_longops )-然而,这只允许您查看作业的当前状态。

        2
  •  0
  •   Paschi    6 年前

    所有输出类似

    dbms_output.put_line('Done'); 
    

    select OUTPUT from DBA_SCHEDULER_JOB_RUN_DETAILS -- or USER_SCHEDULER_JOB_RUN_DETAILS
    

    另请参见 this excellent article here