2016-08-15 2 views
0

Я только начал изучать MySQL и создавать хранимые процедуры. Эта процедура отлично работает, когда я использую локальные переменные. Когда я пытаюсь использовать переменную сеанса в своей процедуре, я получаю синтаксическую ошибку. Могу ли я использовать параметры сеанса в процедурах, а если нет, то где я могу их использовать?Использование переменных сеанса в хранимой процедуре

DELIMITER $$ 
CREATE PROCEDURE myfirst() 
BEGIN 
DECLARE @counter INT DEFAULT 1; 
DECLARE @result VARCHAR(30); 
WHILE (counter < (SELECT count(*) FROM animals)) 
DO 
SET result= (SELECT name FROM animals WHERE id = counter); 
SELECT result; 
SET counter = counter + 1; 
END while; 

END$$ 
DELIMITER ; 

ответ

0

Вы можете использовать пользовательские переменные (сессии, как вы их называете), но вы не можете передать их с @ знаком как параметр хранимой Proc определения.

Кроме того, один никогда не DECLARE s Пользовательские переменные с DECLARE.

Так что просто используйте их. Есть в вашей сессии. То есть, если нужно.

Было бы предпочтительнее и удобнее и удобнее всего создавать ваши хранимые процедуры с соответствующими именами параметров (без знака @). Как вы передаете значения, будь то с помощью ссылки на переменную пользователя или нет, зависит от вас.

Вне зависимости от обстоятельств, сохраненные параметры процесса не могут Подпись содержит знак @. Все DECLARES должны произойти сначала после BEGIN (и только с локальными переменными, а не с пользовательскими переменными).

DROP PROCEDURE IF EXISTS myfirst; 
DELIMITER $$ 
CREATE PROCEDURE myfirst() 
BEGIN 
    DECLARE LocalVar_Int INT DEFAULT 1; -- not used, just shown 
    DECLARE LocalVar_Varchar VARCHAR(30); -- not used, just shown 

    -- all the DECLARES must come first after BEGIN 
    -- and only for LOCAL VARS 

    SET @count=1; -- this is a User Variable 
    SET @result=''; -- this is a User Variable 
    WHILE (@counter < (SELECT count(*) FROM animals)) 
    DO 
    SET @result= (SELECT name FROM animals WHERE id = @counter); 
    SELECT @result; 
    SET @counter = @counter + 1; 
    END while; 

END$$ 
DELIMITER ; 
Смежные вопросы