반응형
RETURN SELECT Stored Procedure 후 MySQL 변수가 손상됨
필드 TEXT를 가진 데이터베이스가 있으며, 이 필드에는 JSON 문자열이 저장됩니다.이 데이터베이스는 UTF-8이며, 일반 선택을 사용하여 JSON 필드를 선택하면 저장된 것과 같은 올바른 JSON을 읽습니다.그러나 스토어드 프로시저에서는 필드를 변수에 읽어들이면 SELECT 후에 변수가 파손됩니다.
DROP PROCEDURE IF EXISTS sp_G;
DELIMITER ;;
CREATE PROCEDURE sp_G(
OUT eCode CHAR(5),
OUT eDescription TEXT,
IN uID INT UNSIGNED
)
BEGIN
DECLARE other_right TEXT;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1
eCode = RETURNED_SQLSTATE, eDescription = MESSAGE_TEXT;
ROLLBACK;
END;
SET eCode='00000';
SET eDescription='';
SET other_right = "";
-- (...code...)
SELECT y
INTO other_right
FROM X
WHERE z=1
-- (...code...)
CALL SP_SaveVariableContent_to_test(other_right)
-- IN THIS PLACE other_right is OK
SELECT other_right;
CALL SP_SaveVariableContent_to_test(other_right)
-- IN THIS PLACE other_right is WRONG
END ;;
DELIMITER ;
필드 내용:
선택 후 콘텐츠 손상:
갱신:이 저장 프로시저는 테스트용이며 변수의 내용을 '인쇄'합니다.
CREATE PROCEDURE SP_SaveVariableContent_to_test(IN description TEXT)
BEGIN
INSERT INTO tmp_prints(description) values(description);
END
해결된
나는 그것을 SELECT에서 OUTPUT 파라미터로 되돌리는 값을 변경하면서 해결한다.다음과 같이 합니다.
DROP PROCEDURE IF EXISTS sp_G;
DELIMITER ;;
CREATE PROCEDURE sp_G(
OUT eCode CHAR(5),
OUT eDescription TEXT,
IN uID INT UNSIGNED,
OUT other_right TEXT
)
BEGIN
-- [DISABLED] DECLARE other_right TEXT; [DISABLED]
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1
eCode = RETURNED_SQLSTATE, eDescription = MESSAGE_TEXT;
ROLLBACK;
END;
SET eCode='00000';
SET eDescription='';
SET other_right = "";
-- (...code...)
SELECT y
INTO other_right
FROM X
WHERE z=1
-- (...code...)
CALL SP_SaveVariableContent_to_test(other_right)
-- IN THIS PLACE other_right is OK
-- [DISABLE] SELECT other_right; [DISABLE]
CALL SP_SaveVariableContent_to_test(other_right)
-- IN THIS PLACE other_right is OK too :D
END ;;
DELIMITER ;
MySQL 버그인 것 같아서 Cent를 사용합니다.MariaDB 10.1을 탑재한 OS
언급URL : https://stackoverflow.com/questions/35457081/mysql-gets-corrupted-variable-after-a-return-select-stored-procedure
반응형
'sourcecode' 카테고리의 다른 글
JUnit 4 테스트 스위트 (0) | 2022.09.04 |
---|---|
Python에서 설정 파일을 사용하는 베스트 프랙티스는 무엇입니까? (0) | 2022.09.04 |
파일을 python 콘솔에 로드하려면 어떻게 해야 하나요? (0) | 2022.09.04 |
2개의 키(키쌍, 값)로 해시맵을 작성하려면 어떻게 해야 합니까? (0) | 2022.09.03 |
static 변수와 const 변수의 차이점은 무엇입니까? (0) | 2022.09.03 |