2014-01-30 5 views
10

Я пытаюсь создать и установить переменную:Объявить переменную синтаксиса недопустимой в MySQL Workbench?

DECLARE myId INT; 
SET myId = 5; 

Однако я получаю неверный синтаксис жалобу в MySQL Workbench:

SQL синтаксис ошибка рядом с 'DECLARE MyId INT;'

Я попытался следующие варианты:

DECLARE myId INT(4); 
SET myId = 5; 

DECLARE @myId INT; 
SET @myId = 5; 

DECLARE @myId INT(4); 
SET @myId = 5; 

Что не так?

+6

'DECLARE' действует только в сохраненных программах, а _« DECLARE разрешено только внутри инструкции BEGIN ... END »_. – Wrikken

ответ

4

Как говорится в комментарии, Declare действует только в хранимых программах, таких как процедуры, функции. здесь у вас есть пример процедуры магазина и его вызова.

DELIMITER $$ 

CREATE PROCEDURE sp1 (x VARCHAR(5)) 
BEGIN 
    DECLARE xname VARCHAR(5) DEFAULT 'bob'; 
    DECLARE myId INT; 


    SET myId = 5; 
    SELECT CONCAT(xname,' -- ',myId); 
END; 
$$ 

DELIMITER ; 

call sp1('MY NAME'); 
+0

Убедитесь, что вы также удалили процедуру в конце, иначе mysql workbench будет жаловаться, что она уже существует. 'DROP PROCEDURE sp1;' – Whitecat

1

У меня возникла такая же проблема. Переменные должны быть объявлены в начале скрипта.

DELIMITER && 

DROP PROCEDURE IF EXISTS PS_HANDLERS; 

CREATE PROCEDURE PS_HANDLERS(IN ID_USER INT, OUT isError INT) 
    BEGIN 
     DECLARE USER_EMAIL VARCHAR(50); 
     DECLARE CONTINUE HANDLER FOR SQLEXCEPTION 
      BEGIN 
       SET IsError = 1; 
      END; 

     SET USER_EMAIL = CONCAT(RAND(),'@',RAND(),'.com'); 
     SET isError = 0; 



     INSERT INTO tbl_user VALUES(ID_USER, 'ipsum','lorem','[email protected]','password','ROLE_USER'); 

     SELECT 
      u.* 
     FROM 
      tbl_user u; 
    END && 

DELIMITER ; 

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

  • Нет связанных вопросов^_^