programing

Oracle PL/SQL - 즉시 출력/콘솔 인쇄를 위한 팁

padding 2023. 6. 12. 21:11
반응형

Oracle PL/SQL - 즉시 출력/콘솔 인쇄를 위한 팁

실행하는 데 몇 분이 걸릴 수 있는 몇 가지 pl/sql 프로시저가 있습니다.개발하는 동안 디버그를 돕고 피드백과 진행률 지표를 제공하기 위해 몇 가지 인쇄문을 추가했습니다.처음에는 작은 테스트 세트에서 이러한 테스트를 실행했으며 출력은 거의 즉각적이었습니다.이제 실행하는 데 몇 분이 걸리는 더 큰 테스트 세트로 테스트를 해보니 절차가 끝날 때까지 아무것도 인쇄되지 않기 때문에 콘솔에 인쇄하는 것은 더 이상 적합하지 않습니다.출력을 버퍼링하고 즉시 인쇄하지 않는 환경에서 작업하는 데 익숙하며 간단한 디버깅 및 진단을 위해 간단한 인쇄문을 추가하는 것이 일반적입니다.

pl/sql에서 출력을 즉시 인쇄할 수 있습니까(버퍼되지 않음)?그렇지 않다면, 비슷한 결과를 얻기 위해 사람들이 추천하는 대안은 무엇입니까?

다음과 같은 자동 트랜잭션을 사용하여 테이블에 메시지를 쓰는 절차를 수행할 수 있습니다.

procedure log (p_message)
is
    pragma autonomous_transaction;
begin
    insert into message_log (user, datetime, message)
    values (user, sysdate, p_message);
    commit;
end;

그런 다음 다른 Oracle 세션에서 테이블을 모니터링합니다.

우리는 이것을 위한 작은 속임수가 있습니다.

DBMS_APPLICATION_INFO.set_client_info("여기에 있는 일부 정보")를 사용하여 일부 변수를 만들고 " "" 안에 있는 문자열을 바꿀 수 있습니다.

v$dump에서 client_info를 선택하여 진행률을 모니터링합니다.

이 목적으로 dbms_pipe를 사용하고 있습니다.명명된 파이프로 메시지를 보내고 다른 세션에서 메시지를 읽습니다.쓰기 및 읽기 프로세스가 다른 노드에 연결될 수 있는 경우 RAC 환경에서는 이 방법이 작동하지 않을 수 있습니다.

또는 "pragma autonomous_transaction"을 사용하여 자체 세션에서 실행되는 절차를 사용하여 표에 메시지를 삽입할 수 있습니다.다른 세션에서 이 메시지를 쿼리할 수 있습니다.

편집: 저의 두 번째 옵션이 이미 언급되었음을 알 수 있습니다.

일반적으로 두 가지 옵션이 있습니다.

  • 출력을 Oracle 테이블(또는 임시 테이블)로 전송
  • UTL_FILE을 사용하여 (데이터베이스 호스트) 파일 시스템에 쓰기

데이터베이스 호스트에 대한 OS 액세스 권한이 없는 경우에도 dbhost 파일 시스템에 쓰고 Oracle 외부 정의 테이블을 파일에 바인딩하여 SELECT로 쿼리할 수 있습니다.

클라이언트 도구에 따라 다를 수 있습니다.한동안 SQL*Plus를 사용하지 않았지만 PL/SQL Developer에서 프로시저를 디버깅할 때 명령 창을 열고 다음을 실행합니다.SET SERVEROUTPUT ON지휘권그 다음 절차를 실행할 때 인쇄된 모든 것은DBMS_OUTPUT.PUT_LINE바로 나타납니다.

편집: 당신 말이 맞아요, 저는 단지 더 많은 양의 출력이나 다른 것을 보고 있었을 뿐이라고 생각합니다.어쨌든 나는 온라인에서 검색을 좀 했고 이 log4plsql을 발견했습니다 - 아마도 유용할 것입니다.

또는 로깅 정보를 반환하는 파이프라인 함수를 사용할 수 있습니다.예를 보려면 여기를 참조하십시오. http://berxblog.blogspot.com/2009/01/pipelined-function-vs-dbmsoutput.html 파이프라인 함수를 사용할 때 다른 SQLPLUS/Toad/sql 개발자 등을 사용할 필요가 없습니다.회기의

PL/SQL Developer의 DBMS Pipe 및 Pipe Viewer를 사용하여 파이프에 입력되는 모든 정보를 비동기적으로 캡처할 수 있습니다.

읽을 사람이 있을 때만 파이프에 넣도록 주의하세요.그렇지 않으면 파이프가 가득 찼을 때 통화가 실패합니다.

이벤트를 사용할 가능성도 있습니다. PL/SQL Developer에는 이벤트 모니터도 있습니다.그리고 문서들은 그것을 하는 방법에 대한 예를 제공해야 합니다.

또 다른 옵션은 PL/SQL이 로그 메시지가 포함된 전자 메일을 보내는 절차를 호출하도록 하는 것입니다.이렇게 하려면 데이터베이스에 UTL_SMTP를 사용하여 추가할 수 있는 전자 메일 전송 기능이 있어야 합니다.

언급URL : https://stackoverflow.com/questions/1729739/oracle-pl-sql-tips-for-immediate-output-console-printing

반응형