簡體   English   中英

MySQL不接受此過程。 你能幫忙嗎?

[英]MySQL does not accept this procedure. Can you help, please?

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 $$

我從這里獲取代碼: 如何使用另一個表中的MAX值重置MySQL AutoIncrement?

這是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 

嘗試這個

     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

你應該遵循:

  1. 使用功能支架
  2. 每個語句都使用分號。

分隔符$$
CREATE PROCEDURE reset_xyz_autoincrement()BEGIN

  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$$ 

嘗試在CREATE PROCEDURE語句之前添加delimiter $$

編輯:

我在關於過程的當前版本的注釋中丟失了跟蹤,但是在SELECT語句中存在錯誤:

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

應該成為

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

另外,我認為您之前應該DECLARE myVar INT (假設它是一個整數),請注意max也是一個MySQL關鍵字,所以我會避免在我的程序中使用該名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM