2013-06-04 2 views
0

스토어드 프로 시저가 변수 값이나 호출간에 저장 프로 시저의 출력을 캐싱하는 것처럼 보이는 이상한 동작이 발생합니다.MySQL이 저장 프로 시저 호출간에 변수 값을 캐싱하지 못하게하려면 어떻게합니까?

표 foo는

id INT(10); 
name VARCHAR2(100); 

는 식 (5)와 이름이 하나 개의 행이 = "a_valid_value는"

DELIMITER $$ 
CREATE PROCEDURE fooProc() 
BEGIN 
     DECLARE testVar INT; 
     SELECT id into @testVar FROM foo WHERE name = 'a_valid_value'; 
     SELECT @testVar as "testVar"; 
END; 
$$ 
delimiter ; 

CALL fooProc(); -- Outputs 5 as expected 

DROP PROCEDURE fooProc; 

DELIMITER $$ 
CREATE PROCEDURE fooProc() 
BEGIN 
     DECLARE testVar INT; 
     SELECT id into @testVar FROM foo WHERE name = 'NONEXISTENT_VALUE'; 
     SELECT @testVar as "testVar"; 
END; 
$$ 
delimiter ; 

CALL fooProc(); -- Outputs 5! 

그것은 중요하지 않습니다 내가 변경된 것을 저장 프로 시저 본문 : 여기에 시나리오입니다 - 여전히 값 0을 캐시에 저장합니다 (testVar). 값 자체를 수정하는 유일한 방법은 연결을 끊었다가 다시 연결하는 것입니다. 그런 다음 저장 프로 시저의 두 번째 버전을 호출하면 예상대로 빈 값을 반환합니다.

답변

4

@사용자 개의 세션 관련 변수입니다. 접두사가 @이 아니어야하는 로컬 변수를 사용하려고합니다. 저장 프로 시저 선언에서 제거하십시오.

+0

우수 감사합니다. – user2453461