2017-10-02 4 views
0

나는이 질문을하기 전에 인터넷을 검색했지만 대답을 찾지 못했습니다. 짧은 질문 - 오라클이 DBMS_OUTPUT을 사용하고 있습니까? 주어진 간격으로 어떤 텍스트를 콘솔에 쓰고 싶지만 저에게는 효과가 없습니다. 예를 들어, 3 초마다 콘솔에 타임 스탬프를 쓰고 싶습니다.DBMS_SCHEDULER.CREATE JOB이 DBMS_OUTPUT.PUT_LINE과 작동하지 않습니다?

작업이 작동하지 않습니다.

작업 + 프로그램도 작동하지 않습니다.

작업 + 프로그램 + 스케줄러는,

는 사람이 어떻게 그것을 얻을하는 나에게 몇 가지 힌트를 줄 수 ... 작동하지 않는 이유는 무엇입니까? :)

내 예제 코드

: 각 작업은 자신의 세션에서 실행

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; 
+4

안녕하세요, 각 작업은 오라클 DB에 세션을 의미하며, 각 세션은 자체에 대한 출력 버퍼 (콘솔)를 가지고, 그래서 당신의 문제는 세션을 잡을 한 다음 Jefferey 맞아 출력 버퍼 – hmmftg

답변

3

는 당신을 분리; 콘솔은 세션의 출력만을 듣기 때문에 무언가를 말하는 것만으로 출력 버퍼는 아무 곳에 나 쓰여지 지 않습니다.

DBMS_OUTPUT은 실제로 아주 기본적인 디버그 출력 생성기로만 의도되었으므로 이것은 문제가되지 않습니다. 당신은 실시간으로 작업의 진행 상황을보고 싶다면, 여기에서 고려해야 할 두 가지 옵션이 있습니다 : 사용자 정의 테이블

  1. 삽입 로그 항목 (아마도 자율 트랜잭션을 사용하여 커밋) - 또는 더 나은,를 사용 Logger과 같은 기존 로깅 프레임 워크. DBMS_APPLICATION_INFO를 사용하여 세션이

  2. 업데이트 (예를 들어, 사용은 set_action 또는 set_session_longops) - 이것은 당신이 단, 작업의 현재 상태를 볼 수있다.

+0

를 얻는 것입니다 - USER_SCHEDULER_JOB_RUN_DETAILS에서 작업 이름을 선택하고 SESSION_ID 열은 각 행마다 다른 값을 갖습니다. 그래도 내 사건은 간단하다. 간단하다. 내 원래의 질문에있는 코드처럼.하지만 인생은 그렇지 않다. 도움에 감사드립니다. –