【问题标题】:Tutorial example of while loop not working for mewhile 循环的教程示例对我不起作用
【发布时间】:2019-11-12 16:50:12
【问题描述】:

我正在尝试来自 link 的示例 while 循环

DECLARE @cnt INT = 0;

WHILE @cnt < 10
BEGIN
   PRINT 'Inside simulated FOR LOOP on TechOnTheNet.com';
   SET @cnt = @cnt + 1;
END;

PRINT 'Done simulated FOR LOOP on TechOnTheNet.com';
GO

但是我得到了这些错误:-

mysql> DECLARE @cnt INT = 0;                                                                                                                      

ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“DECLARE @cnt INT = 0”附近使用正确的语法

mysql> 
mysql> WHILE @cnt < 10
    -> BEGIN
    ->    PRINT 'Inside simulated FOR LOOP on TechOnTheNet.com';
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 'WHILE @cnt < 10
BEGIN
   PRINT 'Inside simulated FOR LOOP on TechOnTheNet.com'' at line 1


mysql>    SET @cnt = @cnt + 1;
Query OK, 0 rows affected (0.00 sec)

mysql> END;
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 'END' at line 1


mysql> 
mysql> PRINT 'Done simulated FOR LOOP on TechOnTheNet.com';
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 'PRINT 'Done simulated FOR LOOP on TechOnTheNet.com'' at line 1
mysql> GO
ERROR: 
No query specified

【问题讨论】:

  • 您只能从存储过程执行此代码,而不能从 MySQL 命令行执行。而且,一般来说,您应该避免在 MySQL 中使用显式循环,因为 SQL 数据库是基于集合的工具,已经隐式循环表。
  • 有什么方法可以从 MYSQL cli 执行 while 循环吗?
  • 它的 SQL Server 教程,你正在 MySQL 上试用它。
  • 我不知道,但是你又为什么要这样做?
  • 实际上我有一个带有特定列(浮点值)的表。对于这一列的每一行,我想创建另一列,其行值=(old_value*3.5 +78)

标签: mysql sql while-loop


【解决方案1】:

您在使用 MySQL 时从 SQL Server 教程中复制。

MySQL中正确的版本是:

CREATE PROCEDURE sp_test() 
BEGIN   
  DECLARE cnt INT DEFAULT 0;

  WHILE cnt < 10 DO
    SELECT 'Inside simulated FOR LOOP on TechOnTheNet.com';
    SET cnt = cnt + 1;
  END WHILE;
END//

演示:http://sqlfiddle.com/#!9/a4fb7c/1.

【讨论】:

  • mysql> 创建过程 sp_test() -> BEGIN -> DECLARE cnt INT DEFAULT 0;错误 1046 (3D000): 未选择数据库
  • 你可以在没有 CREATE PROCEDURE sp_test() BEGIN 和最后一个 END 的情况下尝试吗?
  • mysql> BEGIN -> DECLARE cnt INT DEFAULT 0; ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的“DECLARE cnt INT DEFAULT 0”附近使用正确的语法
  • 您需要先连接到数据库。你能试试关注a2hosting.com/kb/developer-corner/mysql/…吗?
  • 连接到一个测试数据库并在第一行再次收到此错误。 mysql> DECLARE cnt INT DEFAULT 0; ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“DECLARE cnt INT DEFAULT 0”附近使用正确的语法
猜你喜欢
  • 1970-01-01
  • 2021-11-24
  • 2018-06-12
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-21
  • 1970-01-01
相关资源
最近更新 更多