Переменные хранимых процедур MySQL — когда использовать

Я новичок в MySQL. Когда мы используем объявленную переменную? Когда использовать необъявленную переменную (@varTest).

Меня интересует лучшая практика. Спасибо.


person Dave    schedule 15.01.2016    source источник
comment
Я не думаю, что есть большая разница, но вы не можете объявлять тип @ переменных.   -  person Barmar    schedule 16.01.2016


Ответы (1)


Вы всегда должны создавать процедурные переменные с DECLARE, чтобы поддерживать правильную область видимости. Переменные сеанса, объявленные вне функции, могут быть изменены внутри функции и наоборот.

DROP PROCEDURE IF EXISTS foo;
DELIMITER $

CREATE PROCEDURE foo()
    BEGIN
        DECLARE foo INT;
        SET foo = 123;
        SET @foo = 456;
        SELECT foo, @foo;
    END$

DELIMITER ;

SET @foo = "BAR";
CALL foo();
SELECT @foo;
person miken32    schedule 16.01.2016
comment
+1. В MySQL используются пользовательские переменные (@foo). Используйте их там, где они вам нужны, в местах, где переменная процедуры недействительна. В хранимой программе используйте переменные процедуры (DECLARE foo) везде, где у вас есть выбор, где будет работать любой тип переменной. - person spencer7593; 16.01.2016
comment
Спасибо @miken32 и @spencer7593! - person Dave; 19.01.2016