簡體   English   中英

MySQL存儲過程錯誤與IF ... THEN ... END IF; 聲明

[英]MySQL stored Procedure error with IF…THEN…END IF; statements

我有一個MySQL存儲過程會引發錯誤。

DELIMITER $$

DROP PROCEDURE IF EXISTS `test_schema`.`TEST_SPROC` $$  
CREATE PROCEDURE `test_schema`.`TEST_SPROC` (IN var0 INT, var1 INT)  
BEGIN

  DECLARE var0 INT;
  DECLARE var1 INT;

  SELECT COUNT(*) INTO var0 FROM INFORMATION_SCHEMA.`TABLES` 
  WHERE `TABLE_SCHEMA`='test_schema' AND `TABLE_NAME`='original_table'; 

  SELECT COUNT(*) INTO var1 FROM INFORMATION_SCHEMA.`COLUMNS` 
  WHERE `TABLE_SCHEMA`='test_schema' AND `TABLE_NAME`='new_table' 
  AND `COLUMN_NAME`='id';

  IF var0=1 THEN
    RENAME TABLE test_schema.original_table TO test_schema.new_table;   
  END IF;

  IF var1=1 THEN
    ALTER TABLE test_schema.new_table CHANGE id AccountID VARCHAR;   

  END IF;       #error is thrown here.

END $$

DELIMITER ;

錯誤:

腳本行:4您的SQL語法有錯誤; 檢查與您的MySQL服務器版本對應的手冊,以便在'附近使用正確的語法; 萬一;

在第15行結束

我的if語句出了什么問題?

改變這一行:

ALTER TABLE test_schema.new_table CHANGE id AccountID VARCHAR;

對此:

ALTER TABLE test_schema.new_table CHANGE id AccountID VARCHAR(100);

當然,您應該為VARCHAR列指定適當的長度。 我剛剛使用VARCHAR(100)作為例子。

您必須為alter table語句指定長度。 請參閱以下評論:

IF varTable=1 THEN
    RENAME TABLE test_schema.original_table TO test_schema.new_table;
    SELECT COUNT(*) INTO varColumn FROM INFORMATION_SCHEMA.`COLUMNS` 
    WHERE `TABLE_SCHEMA`='test_schema' AND `TABLE_NAME`='new_table' 
    AND `COLUMN_NAME`='id';

    IF varColumn=1 THEN
      #The following statement must be "VARCHAR(255)"  not just "VARCHAR"
      ALTER TABLE test_schema.new_table CHANGE id AccountID VARCHAR(255);
    ELSE
      #statements.
    END IF;
END IF;

暫無
暫無

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

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