0
我遇到一些奇怪的行爲,其中存儲過程似乎是緩存變量值或調用之間存儲過程的輸出。這裏有一個場景:如何防止MySQL在存儲過程調用之間緩存變量值?
表foo
id INT(10);
name VARCHAR2(100);
有一列是id = 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!
不要緊,我改變了存儲過程主體 - 它仍然在var testVar
中緩存值5。獲取值自行糾正的唯一方法是斷開連接然後重新連接。然後當我調用存儲過程的第二個版本時,它會按預期返回一個空值。
優秀,謝謝 – user2453461