@fillflip
Кодер

Как сделать ветвление в хранимых процедурах в MySQL?

Здравствуйте.
Есть такая задачка, необходимо сделать выборку поля из всех таблиц которые начинаются на "form", это сделано при помощи процедур и курсора, но в некоторых таблиц нету именно того поля и процедура заканчивает работу с ошибкой, как сделать проверку на существование поля в таблице и если его нет то записать его временную таблицу (err), а если есть то оно запишется во временную таблицу (names) и продолжить выполнение процедуры ? Спасибо :)
P.S.
DELIMITER //
CREATE PROCEDURE final()
BEGIN
DECLARE tableName VARCHAR(255);
DECLARE done INT DEFAULT 0;
DECLARE FormsCursor CURSOR FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'form%' AND TABLE_SCHEMA = 'test' GROUP BY TABLE_NAME;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
CREATE TEMPORARY TABLE IF NOT EXISTS names(name VARCHAR(50));
CREATE TEMPORARY TABLE IF NOT EXISTS err(nameTable VARCHAR(50));
OPEN FormsCursor;
WHILE done = 0 DO
FETCH FormsCursor INTO tableName;
SET @nameTable = tableName;
SET @s = CONCAT('INSERT INTO names(name) SELECT name from ', @nameTable);
PREPARE stmt1 FROM @s;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
END WHILE;
CLOSE FormsCursor;
SELECT DISTINCT * FROM names;
DROP TEMPORARY TABLE names;
END //
  • Вопрос задан
  • 279 просмотров
Пригласить эксперта
Ответы на вопрос 1
orlov0562
@orlov0562
I'm cool!
1) используй SHOW COLUMNS FROM .. LIKE ..
dev.mysql.com/doc/refman/5.7/en/show-columns.html

2) попробуй LOOP
https://dev.mysql.com/doc/refman/5.6/en/loop.html
и обычный IF ELSE внутри
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы