Задавайте вопросы, мы ответим
Вы не зашли.
CREATE PROCEDURE temp_sp () IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_NAME = 'Counter_Sctp' AND COLUMN_NAME = 'pmSctpInErrors') BEGIN ALTER TABLE Counter_Sctp ADD pmSctpInErrors INT END IF; END; DELIMITER ; CALL temp_sp(); DROP PROCEDURE temp_sp;
Подскажите, где ошибка?
Неактивен
Неправильный синтаксис
http://dev.mysql.com/doc/refman/5.5/en/ … edure.html
IF NOT EXISTS это ключевое слово для операторов create table, create database.
Для проверки пустой ли результат выборки нужно использовать
http://dev.mysql.com/doc/refman/5.5/en/ … ition.html
http://dev.mysql.com/doc/refman/5.5/en/ … ndler.html
P.S. Делать select * плохой тон. В данном случае достаточно count(*)
Неактивен
Спасибо)
Неактивен
Да как эту процедуру написать???
Надо проверить на наличие поля и добавить при его отсутствии!!!
Процедуру делать даже не надо, это я намудрил.
Про CONDITION и HANDLER ничего не понял, сам знаю только ddl(
Пробовал так, но не вышло...
DELIMITER $$ DROP PROCEDURE IF EXISTS `sp_test`$$ CREATE PROCEDURE `sp_test`(IN Number INT) READS SQL DATA BEGIN IF ((SELECT Count(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'test' AND COLUMN_NAME = 'pmSctpInErrors') < 1) Then ALTER TABLE test ADD pmSctpInErrors INT NULL; END IF; END$$ DELIMITER;
Отредактированно Amega686 (26.07.2012 11:46:43)
Неактивен
Почему не вышло? Вполне рабочий код, неясно только лишь зачем вы делаете у этой процедуры входной параметр (IN Number INT) ?
Т.е. вызывать её нужно как
Неактивен
vasya написал:
зачем вы делаете у этой процедуры входной параметр (IN Number INT) ?
Это я коряво спёр откуда-то)
Процедура создаётся, но при выполнении выдаёт окно: "Function NAME does not exist"
Неактивен
Урааааааа!!! Заработало! спасибо!
Неактивен