2013-07-09 8 views
3

У меня есть хранимая процедура MySQL, которая выдает ошибку.MySQL хранит ошибку процедуры с IF ... THEN ... END IF; statement

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 ; 

Ошибка:

Script line: 4 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 '; END IF;

END' at line 15

Что случилось с моим, если заявление?

+0

Правильно сформирована инструкция if. Это оператор alter table, который имеет синтаксические ошибки. –

ответ

1

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

ALTER TABLE test_schema.new_table CHANGE id AccountID VARCHAR; 

к этому:

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

Конечно, вы должны указать длину для VARCHAR столбца, который подходит. В качестве примера я использовал только VARCHAR(100).

0

Вы должны указать длину для инструкции 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;