ストアド プロシージャが呼び出し間で変数値またはストアド プロシージャの出力をキャッシュしているように見える奇妙な動作が発生しています。シナリオは次のとおりです。
テーブル フー
id INT(10);
name VARCHAR2(100);
id=5 および name="a_valid_value" の 1 つの行があります
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!
ストアド プロシージャ本体を変更しても問題ありません。値 5 が var にキャッシュされますtestVar
。それ自体を修正するための値を取得する唯一の方法は、切断してから再接続することです。次に、ストアド プロシージャの 2 番目のバージョンを呼び出すと、期待どおりに空の値が返されます。