首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >创建嵌套存储过程

创建嵌套存储过程
EN

Stack Overflow用户
提问于 2019-04-24 06:09:46
回答 1查看 439关注 0票数 1

我正在使用Entity Framework Core,并且我想使用一个存储过程。我创建了一个自定义SQL,以便在迁移时创建它。

生成脚本如下:

代码语言:javascript
复制
DROP PROCEDURE IF EXISTS MigrationsScript;
DELIMITER //
CREATE PROCEDURE MigrationsScript()
BEGIN
    IF NOT EXISTS(SELECT 1 FROM `__EFMigrationsHistory` WHERE `MigrationId` = '20190411134055_AddGenerations_sp') THEN


                        DROP PROCEDURE IF EXISTS GetCurrentGeneration;
                        CREATE  PROCEDURE GetCurrentGeneration(IN timeOut INT, IN createBy char(255))
                        BEGIN
                               -- Stored procedure body
                        END
    END IF;
END //
DELIMITER ;
CALL MigrationsScript();
DROP PROCEDURE MigrationsScript;


DROP PROCEDURE IF EXISTS MigrationsScript;
DELIMITER //
CREATE PROCEDURE MigrationsScript()
BEGIN
    IF NOT EXISTS(SELECT 1 FROM `__EFMigrationsHistory` WHERE `MigrationId` = '20190411134055_AddGenerations_sp') THEN

    INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`)
    VALUES ('20190411134055_AddGenerations_sp', '2.2.4-servicing-10062');

    END IF;
END //
DELIMITER ;
CALL MigrationsScript();
DROP PROCEDURE MigrationsScript;

但是我得到了这个错误

错误代码: 1357。不能从另一个存储例程

中删除或更改过程

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-24 07:13:50

正如错误消息所述,您不能删除或更改过程。您也不能创建过程。MySQL不支持它。

https://dev.mysql.com/doc/refman/8.0/en/stored-program-restrictions.html说:

通常,在SQL prepared语句中不允许的语句在存储程序中也是不允许的。有关支持作为预准备语句的语句列表,请参见Section 13.5, “Prepared SQL Statement Syntax”

您可以通过该链接找到支持作为预准备语句的SQL语句的文档。但该列表不包括CREATE PROCEDURE。

因此,您必须通过从应用程序或脚本运行SQL语句来创建过程。

坦率地说,我在MySQL中根本不使用存储过程,因为它们的效率非常低。我知道来自Microsoft SQL Server或Oracle文化背景的人习惯于使用存储过程进行大量工作,但在使用MySQL时,更常见的是使用Python或Perl语言编写脚本代码。对于这些语言,有更好的编辑和调试工具。

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

https://stackoverflow.com/questions/55820070

复制
相关文章

相似问题

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