MySQL 不接受这个过程。你能帮忙吗?

Posted

技术标签:

【中文标题】MySQL 不接受这个过程。你能帮忙吗?【英文标题】:MySQL does not accept this procedure. Can you help, please? 【发布时间】:2012-12-04 12:12:46 【问题描述】:
CREATE PROCEDURE reset_xyz_autoincrement
BEGIN

  SELECT @max := MAX(ID)+ 1 FROM ABC; 

  PREPARE stmt FROM 'ALTER TABLE XYZ AUTO_INCREMENT = ?'
  EXECUTE stmt USING @max 

  DEALLOCATE PREPARE stmt;

END $$

我从这里获取了代码: How to Reset an mysql AutoIncrement using a MAX value from another table?

这是 MySQL 输出:

#1064 - 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 'BEGIN

  SELECT @max := MAX(ID)+ 1 FROM ABC' at line 2 

【问题讨论】:

【参考方案1】:

试试这个

     CREATE PROCEDURE reset_xyz_autoincrement
          (username varchar(64),password varchar(64))     // here you use your columns
      BEGIN

编辑:

试试这个

     DROP PROCEDURE IF EXISTS reset_xyz_autoincrement;
     CREATE PROCEDURE reset_xyz_autoincrement (userid INT)
      BEGIN

【讨论】:

还是没有运气。我在第 3 行的 '' 附近出现错误 SELECT @curID := MAX(movies.id) FROM movies; 现在错误不在开始附近,所以它修复了第一个错误,然后错误现在在 SELECT 中 查询不在程序中时正常运行。我的意思是它输出正确的东西,但在过程中它失败了...... 确保您的真实表中的reset_xyz_autoincrementABCXYZ 是三个不同的表【参考方案2】:

你应该遵循:

    使用函数大括号 每条语句使用分号。

分隔符 $$ 创建过程 reset_xyz_autoincrement() 开始

      SELECT @max:=MAX(ID)+ 1 FROM Company_Master; 

      PREPARE stmt FROM 'ALTER TABLE Dept_Master AUTO_INCREMENT = ?';
      EXECUTE stmt USING @max ;

      DEALLOCATE PREPARE stmt;

    END$$

【讨论】:

【参考方案3】:

尝试在CREATE PROCEDURE 语句之前添加delimiter $$

编辑:

我在 cmets 中丢失了您的程序的当前版本,但您的 SELECT 声明中有错误:

SELECT @yourVar := MAX(ID)+ 1 FROM ABC;

应该变成

SELECT MAX(ID) + 1 INTO @yourVar FROM ABC;

另外,我认为您应该先DECLARE myVar INT(假设它是一个整数),请注意max 也是一个 MySQL 关键字,所以我会避免在我的过程中使用该名称。

【讨论】:

我在发帖前就试过了,但还是没有成功。我又得到了错误:#1064 - 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 'BEGIN SELECT @max := MAX(id)+ 1 FROM movies; PREPARE stmt FROM 'ALTER TABL' at line 2 我也用delimiter ; 尝试过,也没有运气......

以上是关于MySQL 不接受这个过程。你能帮忙吗?的主要内容,如果未能解决你的问题,请参考以下文章

你能帮忙解决这个 MVC ViewModel 问题吗?

你能帮忙把这个非常小的 C++ 组件翻译成 Delphi 吗?

面试官你能让我想想吗?我忘记了!

Flutter 医生不接受控制台中的 android 许可证

mysql存储过程可以有默认参数吗?

你能以编程方式接受 UITextView 中的拼写更正吗?