Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Não consigo descobrir o que de errado cometi ao fazer esta consulta MYSQL

  • Você precisa definir Delimiter para qualquer coisa exceto ;
  • Opcionalmente, verifique se o procedimento armazenado com o mesmo nome já existe.
  • No final, redefina o Delimitador de volta para ;
  • A menos que você use a variável x fora deste procedimento armazenado; você realmente não precisa usar @; ele torna a variável disponível em todos os lugares naquela sessão específica).

Experimente (mais explicações nos comentários):
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 ;