mysql хранимая процедура - проверьте, не возвращает ли запрос результат - PullRequest
0 голосов
/ 14 февраля 2020

Я создаю хранимую процедуру, в которой я выполняю резервное копирование определенных значений из моей основной базы данных в другую.

У меня есть al oop, который выполняется для всех таблиц, и для определенных таблиц у меня разные операторы для создания резервных таблиц, но все они выглядят примерно так:

SET @backupQuery= NULL;
IF (tableName IN ('some_table', 'another_table')) THEN  
    SET @backupQuery= CONCAT(
        'CREATE TABLE backup.', tableName, ' AS',
        ' SELECT * FROM mydb.', tableName
        ' WHERE row = "criteria");
ELSEIF (tableName IN ('table_with_other criteria')) THEN
    SET @backupQuery= CONCAT(
...

IF (@backupQueryIS NOT NULL) THEN
    PREPARE stmt from @backupQuery;
...

Если оператор Select не возвращает строк, он все равно создает пустую таблицу, это то, что я не хочу иметь.

Каков наилучший способ избежать пустых таблиц?

Моя идея состояла в том, чтобы разделить на две части: часть SELECT и часть 'CREATE TABLE backup.' ,tableName, ' AS' , Проверьте, вернул ли оператор SELECT какие-либо строки. Но я не уверен, как я могу это сделать.

Другим подходом было бы удалить все пустые таблицы в конце, но мне действительно не нравится это, поскольку процедура делает бесполезные вещи.

...