2017-02-02 4 views
0

Есть ли способ в MySQL создать хранимую процедуру из другой хранимой процедуры?MySQL Создать хранимую процедуру в другой хранимой процедуре

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

DELIMITER # 
DROP PROCEDURE IF EXISTS sp_temp_update_table# 
CREATE PROCEDURE sp_temp_update_table() 
BEGIN 
    DECLARE v_db_version DECIMAL(10,6); 

    SELECT CAST(`value` AS DECIMAL(10,6)) INTO v_db_version 
    FROM `db_metadata` meta 
    WHERE meta.`key` = 'db_version'; 

    IF(v_db_version < CAST('13.30' AS DECIMAL(10,6))) THEN 
     -- UPDATE STATEMENTS HERE 
     ALTER TABLE `foo` ADD COLUMN `bar` INT(10); 

     UPDATE `etl_metadata` SET `value` = '13.30' WHERE `key` = 'db_version'; 
     SELECT CONCAT('13.30 Update Applied - Original db_version=', v_db_version); 
    ELSE 
     SELECT '13.30 Update Not Needed'; 
    END IF; 
END# 
CALL sp_temp_update_table()# 
DROP PROCEDURE IF EXISTS sp_temp_update_table# 
DELIMITER ; 

Теперь нам нужно обновить хранимую процедуру внутри этой процедуры.

Есть ли способ сделать это в MySQL?

ответ

1

Вы не можете create a stored procedure in a prepared statement в MySQL, и вы вообще can't do anything in a stored procedure that you can't do in a prepared statement.

Вы могут прочитать создать заявление процеда в строку (select routine_definition into myVar from information_schema.routines where routine_name='myRoutine'), которые могут быть использованы, например, чтобы хранимая процедура создания единого сценария SQL, который содержит команды для обновления хранимых процедур. Затем вы выполнили бы это sql вручную (или из сценария оболочки, cron-job и т. Д.) После запуска SP выше, и затем он внесет необходимые изменения.

EDIT: Все это предполагает, что динамическое обновление SP действительно является тем, что вы хотите делать. Могут быть гораздо более чистые решения, такие как жестко закодированные части, которые вы хотите изменить, вместо этого введите входной параметр или прочитайте из таблицы ...

Смежные вопросы