首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL在另一个存储过程中创建存储过程

MySQL在另一个存储过程中创建存储过程
EN

Stack Overflow用户
提问于 2017-02-03 02:05:45
回答 1查看 4.1K关注 0票数 3

在MySQL中,有没有办法从另一个存储过程中创建一个存储过程?

我们通过使用临时存储过程来处理数据库更新,该过程检查表中的数据库版本:

代码语言:javascript
复制
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中有什么方法可以做到这一点吗?

EN

回答 1

Stack Overflow用户

发布于 2017-02-03 02:56:36

你不能在MySQL中使用create a stored procedure in a prepared statement,通常你可以使用can't do anything in a stored procedure that you can't do in a prepared statement

例如,您可以将过程的create语句读取到一个字符串(select routine_definition into myVar from information_schema.routines where routine_name='myRoutine')中,该字符串可用于让存储过程创建包含更新存储过程的命令的单个sql脚本。在运行上面的SP之后,您需要手动执行该sql (或从shell脚本、cron-job等执行),然后它将进行所需的更改。

编辑:这一切都假设动态更新SP确实是您想要做的事情。可能有更干净的解决方案,比如让你想要修改的硬编码部分取而代之的是输入参数,或者从表中读取...

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42009327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档