web-dev-qa-db-ja.com

MySQL Workbenchで無効な変数構文を宣言しますか?

変数を作成して設定しようとしています:

DECLARE myId INT;
SET myId = 5;

ただし、MySQLWorkbenchで無効な構文に関する苦情が寄せられています。

'DECLARE myIdINT;'付近のSQL構文エラー

私は次の変種を試しました:

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

DECLARE @myId INT;
SET @myId = 5;

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

なにが問題ですか?

14
Roy Hinkley

コメントにあるように、宣言はプロシージャや関数などのストアドプログラムでのみ有効です。ここに、ストアプロシージャとその呼び出しの例があります。

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');
4
Angelo Saleh

私は同じ問題を経験しました。変数は、スクリプトの最初に宣言する必要があります。

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 ;
3
mrDjouk