2013-07-16 5 views
3

MySQL에서 저장 프로 시저가있어 테이블에서 다음 고유 ID를 가져 와서 다른 두 테이블의 ID로 사용합니다 (최선의 방법은 아닙니다. 확실하지만 여기서는 다른 사람의 코드를 수정하고 있습니다.)MySQL 저장 프로 시저 : OUT 매개 변수가 설정되어 있지 않습니다.

DELIMITER $$ 
CREATE DEFINER=`root`@`%` PROCEDURE `GetNextID`(OUT id bigint) 
BEGIN 
    DECLARE uid VARCHAR(255); 
    SET uid = uuid(); 
    INSERT INTO `ident_column_generator` (u) VALUES (uid); 
    SELECT ID INTO id FROM `ident_column_generator` WHERE u = uid; 
    DELETE FROM `ident_column_generator` WHERE u = uid; 
END$$ 

를 내가 MySQL의 워크 벤치에서 절차를 호출 할 때 :

CALL GetNextID(@id); 
SELECT @id; 

@id가 NULL입니다 절차는 다음과. 나는 잘못된 일을 해결할 수 없습니까? 프로 시저를 호출하기 전에 SET @id = 0;을 실행하더라도 나중에 NULL로 끝납니다. 내가 @id 출력 잘 MySQL의 워크 벤치, 예컨대 :

SET @uid = uuid(); 
INSERT INTO `ident_column_generator` (u) VALUES (@uid); 
SELECT ID INTO @id FROM `ident_column_generator` WHERE u = @uid; 
DELETE FROM `ident_column_generator` WHERE u = @uid; 
SELECT @id; 

에서 수동 프로 시저 내에서 함수를 호출하면이 유효한 숫자 것으로 @id 출력합니다.

id이 (가) 제대로 설정되지 않은 이유는 무엇입니까?

답변

3

일반적으로이 질문에 3 시간을 머물렀다가 질문을 게시 한 후 문제가 발생했습니다. 향후 참조를 위해 : MySQL은 변수가 관련되어있는 경우 대소 문자를 구분하지 않습니다. ID 열 이름과 id 변수가 완전히 혼동을 일으킨 것 같습니다.

프로 시저의 입력 매개 변수 이름을 으로 변경하고 완벽하게 작동했습니다.

+0

같은 문제가 발생했습니다 ........ :) –

0

감사합니다. Nick, 나도 같은 문제가있었습니다. 열 이름과 변수 이름이 같았 기 때문에 문제가 발생했습니다.

관련 문제