MySQL에 저장된 프로시저에서 디버깅 정보 인쇄
MySQL에서 디버깅 메시지를 stdout, temptable 또는 logfile로 인쇄할 수 있는 방법이 있습니까?예를 들어 다음과 같습니다.
print
SQL Server에서DBMS_OUTPUT.PUT_LINE
Oracle에서
옵션 1: 실행 시 stdout에 '댓글'을 인쇄하려면 이 절차를 수행합니다.
SELECT 'Comment';
옵션 2: 변수를 stdout에 인쇄하려면 다음 절차를 수행합니다.
declare myvar INT default 0;
SET myvar = 5;
SELECT concat('myvar is ', myvar);
이 인쇄물은myvar is 5
시술을 실행할 때 사용할 수 있습니다.
옵션 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';
이 명령어에는 매우 엄격한 제한이 있습니다.'다른' 그룹에 작성 및 쓰기 권한을 부여하는 디스크의 영역에만 out 파일을 쓸 수 있습니다./tmp 디렉토리에 저장하면 됩니다.
또한 out 파일을 쓴 후에는 덮어쓸 수 없습니다.이는 크래커에 SQL이 삽입되어 MySQL에서 임의의 명령어를 실행할 수 있다는 이유만으로 크래커가 사용자의 웹 사이트를 루팅하는 것을 방지하기 위한 것입니다.
인쇄의 빠른 방법은 다음과 같습니다.
select '** Place your mesage here' AS '** DEBUG:';
디버깅 방법은 다음과 같습니다.
CREATE PROCEDURE procedure_name()
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SHOW ERRORS; --this is the only one which you need
ROLLBACK;
END;
START TRANSACTION;
--query 1
--query 2
--query 3
COMMIT;
END
쿼리 1, 2 또는 3이 오류를 발생시키면 HANDER가 SQLEXCEPTION을 포착하고 SHOW ERRORESS가 오류를 표시합니다.주의: SHOW ERRORS는 핸들러의 첫 번째 문이어야 합니다.
보통 로그 테이블에 기록하기 위해 저장 프로시저를 사용하여 로그 테이블을 만듭니다.개발 중인 절차에서 필요에 따라 로깅 절차를 호출합니다.
이 질문에 대한 다른 게시물을 보면, 몇 가지 대안이 있긴 하지만 일반적인 관행처럼 보입니다.
회피책 중 하나는 다른 구를 사용하지 않고 select를 사용하는 것입니다.
http://lists.mysql.com/mysql/197901
언급URL : https://stackoverflow.com/questions/3314771/print-debugging-info-from-stored-procedure-in-mysql
'source' 카테고리의 다른 글
DDoS 보호를 활성화하는 방법 (0) | 2023.01.19 |
---|---|
PHP 어레이를 저장하는 데 선호되는 방법(json_encode vs serialize) (0) | 2023.01.19 |
여러 문자열을 여러 문자열로 바꿉니다. (0) | 2023.01.19 |
exclipse - 테이블의 JPA 엔티티, 스키마가 나열되지 않음 (0) | 2023.01.19 |
java.util.logging을 사용하면 어떨까요? (0) | 2023.01.19 |