--disable_abort_on_error ##### Set the following variable to 1, if you want to get the crashes ##### # This crashes the server # SP internal variable VARCHAR, SELECT internal_var INTO internal_var; # Note: DECLARE internal_var CHAR(15); produces also a crash --disable_warnings DROP PROCEDURE IF EXISTS testNoParam; --enable_warnings DELIMITER |; CREATE PROCEDURE testNoParam() BEGIN DECLARE internal_var VARCHAR(15); SET internal_var = 'cccc'; SELECT internal_var INTO internal_var; END | DELIMITER ;| if (0) { CALL testNoParam(); } # This also crashes the server # SP internal variable VARCHAR, SET internal_var = internal_var; DROP PROCEDURE IF EXISTS testNoParam; DELIMITER |; CREATE PROCEDURE testNoParam() BEGIN DECLARE internal_var VARCHAR(15); SET internal_var = 'cccc'; SET internal_var = internal_var; END | DELIMITER ;| if (0) { CALL testNoParam(); } # No crash # Data type INTEGER instead of VARCHAR(15) for the SP internal variable --> no crash # SP internal variable INTEGER, SELECT internal_var INTO internal_var; DROP PROCEDURE IF EXISTS testNoParam; DELIMITER |; CREATE PROCEDURE testNoParam() BEGIN DECLARE internal_var INTEGER; SET internal_var = 1; SELECT internal_var INTO internal_var; END | DELIMITER ;| CALL testNoParam(); # No crash # SP internal variable VARCHAR, SELECT CONCAT(internal_var,'abc') INTO internal_var; DROP PROCEDURE IF EXISTS testNoParam; DELIMITER |; CREATE PROCEDURE testNoParam() BEGIN DECLARE internal_var VARCHAR(15); SET internal_var = 'cccc'; SELECT CONCAT(internal_var,'abc') INTO internal_var; END | DELIMITER ;| CALL testNoParam(); # The result above looks nice, but we do not know if the content of internal_var is correct. # Maybe it is rotten. # # No crash # SP internal variable VARCHAR, SELECT CONCAT(internal_var,'abc') INTO internal_var; # Is the content of internal_var rotten ? # The variable used for the check (@my_var) does not exist when the SP is created. DROP PROCEDURE IF EXISTS testNoParam; DELIMITER |; CREATE PROCEDURE testNoParam() BEGIN DECLARE internal_var VARCHAR(15); SET internal_var = 'cccc'; SELECT CONCAT(internal_var,'abc') INTO internal_var; SET @my_var = internal_var; END | DELIMITER ;| SET @my_var = 'dddd'; CALL testNoParam(); # I expect 'ccccabc', but get an empty string ! SELECT @my_var; # # # No crash # SP internal variable VARCHAR, SELECT CONCAT(internal_var,'abc') INTO internal_var; # Is the content of internal_var rotten ? # The variable used for the check (@my_var) does exist when the SP is created. # (This variation does not lead to different effects.) SET @my_var = 'dddd'; DROP PROCEDURE IF EXISTS testNoParam; DELIMITER |; CREATE PROCEDURE testNoParam() BEGIN DECLARE internal_var VARCHAR(15); SET internal_var = 'cccc'; SELECT CONCAT(internal_var,'abc') INTO internal_var; SET @my_var = internal_var; END | DELIMITER ;| CALL testNoParam(); # I expect 'ccccabc', but get an empty string ! SELECT @my_var; # Is the content of SP internal variable of data type INTEGER also rotten ? SET @my_var = 1; DROP PROCEDURE IF EXISTS testNoParam; DELIMITER |; CREATE PROCEDURE testNoParam() BEGIN DECLARE internal_var INTEGER; SET internal_var = 1; SELECT internal_var + internal_var INTO internal_var; SET @my_var = internal_var; END | DELIMITER ;| CALL testNoParam(); # I expect and get 2 . SELECT @my_var; # Cleanup DROP PROCEDURE IF EXISTS testNoParam;