Mysql
 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. В mysql или postgres има ли ограничение за размера на оператор IN (1,2,n)?

  2. Не е поставена отметка в квадратчето за отметка, връщащо нулева стойност

  3. Използване на оператор Case с IS NULL и IS NOT NULL

  4. Каква функция да използвате за хеширане на пароли в MySQL?

  5. mysql - избиране на стойности от таблица с даден номер на колона