2013-10-25 3 views
0

Я хочу, чтобы иметь возможность передавать аргументы хранимой процедуры, поэтому я искал сеть и столкнулся что-то вроде этого:MySQL ошибка хранимая процедура @ Синтаксис

DELIMITER $$ 
CREATE PROCEDURE addTmpUser 
@id varchar(10) 
AS 
BEGIN 
    //some sql code 
END$$ 

DELIMITER ; 

Проблема заключается в том, что я получаю ошибку синтаксиса для символ @.

Примечание: Я использую MySQL db.

+0

@id varchar (10); – tommasop

+0

добавил ';' и все ту же ошибку – vlio20

ответ

2

Вы смесительных типов переменных.
@variable - это переменная пользователя с областью действия для всего соединения.
Переменные в хранимых процедурах выглядят по-другому, у них нет @ перед ними.

Кроме того, вам необходимо объявить их. Вот пример

DELIMITER $$ 
CREATE PROCEDURE addTmpUser(p_id varchar(10)) 
-- the variable is named p_id as a nameing convention. 
-- It is easy for variables to be mixed up with column names otherwise. 
BEGIN 
    DECLARE innerVariable int; 
    insert into user (id) values (p_id); 
    -- return all users 
    select * from user; 
END$$ 

DELIMITER ; 

-- and now call it 
call addTmpUser(10); 
+0

и как это можно назвать? (выполните процедуру) – vlio20

+0

Вы можете сделать 'call addTmpUser (10);' –

+0

что это: 'DECLARE innerVariable int' line do? – vlio20

2

Чтобы указать параметр, вам необходимо использовать IN, OUT, INOUT. Таким образом, вы можете попробовать это

DELIMITER $$ 
CREATE PROCEDURE addTmpUser (IN id VARCHAR(10)) 
BEGIN 
    //some sql code 
END$$ 

DELIMITER ; 

Посмотрите на documentation

+0

теперь я получаю сообщение об ошибке в слово 'AS'. (неожиданный 'AS') – vlio20

+1

извините, удалите это – Sachin

+0

и как его называть? (выполните процедуру) – vlio20

Смежные вопросы