【问题标题】:MySQL does not accept this procedure. Can you help, please?MySQL 不接受这个过程。你能帮忙吗?
【发布时间】: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 

【问题讨论】:

    标签: mysql


    【解决方案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】:

    你应该遵循:

    1. 使用函数大括号
    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 ; 尝试过,也没有运气......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 2014-03-01
      • 2011-05-20
      相关资源
      最近更新 更多