Я не могу понять, что я сделал не так при выполнении этого запроса MYSQL - PullRequest
0 голосов
/ 19 октября 2018
CREATE TABLE t1 (s1 INT, PRIMARY KEY (s1));
DELIMITER ;
CREATE PROCEDURE handlerdemo ()
BEGIN
DECLARE x INTEGER;
SET @x = 1; 
INSERT INTO t1 VALUES (1); 
SET @x = 2; 
INSERT INTO t1 VALUES (1); 
SET @x = 3; 
END;

Когда я запускаю этот запрос, в строке 4 я получаю сообщение об ошибке 1064. Любой намек на то, как с ним работать, высоко ценится.

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Вам просто нужно удалить;(точка с запятой) после разделителя будет работать нормально

CREATE TABLE t1 (s1 INT, PRIMARY KEY (s1));
DELIMITER -- just remove this ; from your query it will work fine
CREATE PROCEDURE handlerdemo ()
BEGIN
DECLARE x INTEGER;
SET @x = 1; 
INSERT INTO t1 VALUES (1); 
SET @x = 2; 
INSERT INTO t1 VALUES (1); 
SET @x = 3; 
END;
0 голосов
/ 19 октября 2018
  • Вам нужно установить Delimiter на что угодно , кроме ;
  • При желании поставьте галочку, если хранимая процедура с таким же именем уже существует.
  • Вконец, переопределите разделитель обратно на ;
  • Если только вы не собираетесь использовать переменную x вне этой хранимой процедуры;вам действительно не нужно использовать @;она делает переменную доступной везде в этом конкретном сеансе).

Попробуйте (подробности в комментариях):

CREATE TABLE t1 (s1 INT, PRIMARY KEY (s1)); -- create the table

DELIMITER $$ -- redefine the delimiter to $$ (for eg)

DROP PROCEDURE IF EXISTS `handlerdemo` $$ -- drop previous if exists

CREATE PROCEDURE handlerdemo ()
  BEGIN

    DECLARE x INT DEFAULT 0; -- datatype is INT 
    -- also a good practice to set default value

    SET x = 1; -- no need to use in Session context
    INSERT INTO t1 VALUES (x); -- use variable name here instead of literal value

    SET x = 2; 
    INSERT INTO t1 VALUES (x); 

  END $$ -- remember that delimiter is $$ right now

-- redefine the Delimiter back to ;
DELIMITER ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...