Program Tip

MySQL의 저장 프로 시저에서 디버깅 정보 인쇄

programtip 2020. 11. 11. 20:33
반응형

MySQL의 저장 프로 시저에서 디버깅 정보 인쇄


MySQL에서 디버깅 메시지를 stdout, temptable 또는 logfile로 인쇄하는 방법이 있습니까? 다음과 같은 것 :

  • print SQLServer에서
  • DBMS_OUTPUT.PUT_LINE Oracle에서

옵션 1 : 실행될 때 stdout에 'comment'를 인쇄하려면 프로 시저에 이것을 넣으십시오.

SELECT 'Comment';

옵션 2 :이를 프로 시저에 넣어 변수를 stdout에 인쇄합니다.

declare myvar INT default 0;
SET myvar = 5;
SELECT concat('myvar is ', myvar);

myvar is 5프로 시저가 실행될 때 stdout에 인쇄 됩니다.

옵션 3,라는 텍스트 열이 하나있는 테이블을 tmptable만들고 메시지를 푸시합니다.

declare myvar INT default 0;
SET myvar = 5;
insert into tmptable select concat('myvar is ', myvar);

위의 내용을 저장 프로 시저에 넣을 수 있으므로 작성하면됩니다.

CALL log(concat('the value is', myvar));

몇 가지 키 입력을 저장합니다.

옵션 4, 파일에 메시지 기록

select "penguin" as log into outfile '/tmp/result.txt';

이 명령에는 매우 엄격한 제한이 있습니다. 'others'그룹에 생성 및 쓰기 권한을 부여하는 디스크의 영역에만 outfile을 쓸 수 있습니다. / tmp 디렉토리에 저장하면 작동합니다.

또한 일단 outfile을 작성하면 덮어 쓸 수 없습니다. 이는 크래커가 웹 사이트에 SQL을 주입하고 MySQL에서 임의의 명령을 실행할 수 있기 때문에 크래커가 상자를 루팅하는 것을 방지하기위한 것입니다.


한 가지 해결 방법은 다른 절없이 select를 사용하는 것입니다.

http://lists.mysql.com/mysql/197901


일반적으로 저장 프로 시저가있는 로그 테이블을 만들어 로그에 기록합니다. 개발중인 프로 시저에서 필요할 때마다 로깅 프로 시저를 호출합니다.

이 같은 질문에 대한 다른 게시물보면 몇 가지 대안이 있지만 일반적인 관행처럼 보입니다.


무언가를 인쇄하는 빠른 방법은 다음과 같습니다.

select '** Place your mesage here' AS '** DEBUG:';

참고 URL : https://stackoverflow.com/questions/3314771/print-debugging-info-from-stored-procedure-in-mysql

반응형