Ошибка хранимой процедуры MySQL с IF...THEN...END IF; заявления

У меня есть хранимая процедура 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, чтобы найти правильный синтаксис для использования рядом с '; END IF;

END 'в строке 15

Что не так с моим утверждением if?

2 ответа

Решение

Измените эту строку:

ALTER TABLE test_schema.new_table CHANGE id AccountID VARCHAR;

к этому:

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

Of course you should specify a length for the VARCHAR column that is appropriate. I've just used 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;
Другие вопросы по тегам