sql >> データベース >  >> RDS >> Mysql

MySQL構文エラー

    コードブロックは、宣言された変数のスコープを定義していません。プロシージャ内の場合は、BEGINの間にある必要があります およびEND 。それらがない場合、ステートメントDECLARE varLocalityName VARCHAR(50); 実行する無効なステートメントになります。このステートメントは、以下に示すステートメントと同等です。

    mysql> select current_date();
    +----------------+
    | current_date() |
    +----------------+
    | 2012-10-22     |
    +----------------+
    1 row in set (0.00 sec)
    
    mysql> declare varLocalityName varchar(50);
    ERROR 1064 (42000): You have an error in your SQL syntax;
     check the manual that corresponds to your MySQL server version 
     for the right syntax to use near 'declare varLocalityName varchar(50)' at line 1
    mysql>
    

    どちらかを宣言する必要があります キーワードDECLAREのないセッション変数 または、ストアドプロシージャ用に定義された構文に従って、スコープ変数を使用します。

    例1 :セッション変数の使用:

    mysql> set @x = null;
    Query OK, 0 rows affected (0.00 sec)
    mysql> select @x;
    +------+
    | @x   |
    +------+
    | NULL |
    +------+
    1 row in set (0.00 sec)
    
    mysql> delimiter $$
    mysql> select current_date() into @x;
        -> $$
    Query OK, 1 row affected (0.02 sec)
    
    mysql> select @x;
        -> $$
    +------------+
    | @x         |
    +------------+
    | 2012-10-22 |
    +------------+
    1 row in set (0.00 sec)
    

    プロシージャ内でセッション変数を設定/定義することはできますが、 DECLAREはできないことに注意してください。

    例2 :プロシージャスコープ変数の使用:

    mysql>
    mysql> delimiter $$
    mysql> create procedure some_x()
        ->    begin
        ->      declare varLocalityName varchar(50);
        ->
        ->      set @sessionDate = null;
        ->      select @sessionDate;
        ->      set @sessionDate = current_date();
        ->      select @sessionDate;
        ->
        ->      select varLocalityName;
        ->    end;
        -> $$
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> delimiter ;
    mysql>
    mysql> call some_x();
    +--------------+
    | @sessionDate |
    +--------------+
    | NULL         |
    +--------------+
    1 row in set (0.00 sec)
    
    +--------------+
    | @sessionDate |
    +--------------+
    | 2012-10-22   |
    +--------------+
    1 row in set (0.00 sec)
    
    +-----------------+
    | varLocalityName |
    +-----------------+
    | NULL            |
    +-----------------+
    1 row in set (0.00 sec)
    
    Query OK, 0 rows affected (0.00 sec)
    
    mysql>
    mysql> select @sessionDate;
    +--------------+
    | @sessionDate |
    +--------------+
    | 2012-10-22   |
    +--------------+
    1 row in set (0.00 sec)
    
    mysql> select varLocalityName;
    ERROR 1054 (42S22): Unknown column 'varLocalityName' in 'field list'
    mysql>
    

    変数の宣言とスコープも参照してください。



    1. PostgreSQLの範囲のすべてのセットのすべての交差を検索します

    2. SQLServerの左結合と右結合の違い

    3. HibernateDB接続プーラーc3p0に問題があります

    4. ストアドプロシージャclassicaspから値と結果セットを返します