아래 InsertHelpQuestion2 절차를 참조하십시오.MySQL - 저장 프로 시저 내의 동적 SQL
DROP PROCEDURE InsertHelpQuestion2;
CREATE PROCEDURE InsertHelpQuestion2(user_id char(50),scenerio_id char(50),component_id char(50))
BEGIN
DECLARE uu_id char(50);
SELECT BinToUUID(NewUUID()) INTO uu_id from helpquestion LIMIT 1;
SET @fields_part = 'INSERT INTO helpquestion(HelpQuestionKey,UserKey';
SET @values_part = CONCAT(' VALUES(UUIDToBin(\"', uu_id, '\"), UUIDToBin(\"', user_id, '\")');
IF (scenerio_id) THEN
SET @fields_part = CONCAT(@fields_part, ', ScenarioKey');
SET @values_part = CONCAT(@values_part, ', UUIDToBin("', scenerio_id, '")');
END IF;
IF (component_id) THEN
SET @fields_part = CONCAT(@fields_part, ', ComponentKey');
SET @values_part = CONCAT(@values_part, ', UUIDToBin("', component_id, '")');
END IF;
SET @query_full = CONCAT(@fields_part , @values_part, ';');
PREPARE STMT FROM @query_full;
EXECUTE STMT;
END
세 개의 매개 변수가 있습니다. user_id, scenerio_id, component_id 모두 외래 키입니다.
NewUUID(), UUIDToBin은 저장된 함수입니다. 필드로
내가 다음 호출
CALL InsertHelpQuestion2('F70724DC-AC0D-102D-9C16-00163EEDFCFC', '0F69476A-ABF2-102D-9C16-00163EEDFCFC', '06FFEE04-1FD9-11DF-9B60-001F16F664A9');
CALL InsertHelpQuestion2('F70724DC-AC0D-102D-9C16-00163EEDFCFC', '0F69476A-ABF2-102D-9C16-00163EEDFCFC', '');
CALL InsertHelpQuestion2('F70724DC-AC0D-102D-9C16-00163EEDFCFC', '', '');
작동하지만 첫 번째 호출 것을
CALL InsertHelpQuestion2('F70724DC-AC0D-102D-9C16-00163EEDFCFC', '0F69476A-ABF2-102D-9C16-00163EEDFCFC', '06FFEE04-1FD9-11DF-9B60-001F16F664A9');
다음과 같은 오류
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'VALUES(UUIDToBin("69490F3A-6FD3-11DF-964F-F4CE462E9D80"), UUIDToBin("F70724DC-AC' at line 1
에게 yeilds 있도록 절차를 내부 동적 SQL을 작성해야 외국 참조가
문자열 연결 오류가 발생 했습니까?
그래, 그거야! 그것은 같아야한다 SET @query_full = CONCAT (@fields_part, @values_part, ');'); –