gpt4 book ai didi

mysql - 创建嵌套存储过程

转载 作者:行者123 更新时间:2023-11-29 07:22:01 25 4
gpt4 key购买 nike

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

生成的凭证如下:

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;

但是我得到了这个错误

Error Code: 1357. Can't drop or alter a PROCEDURE from within another stored routine

最佳答案

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

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

Generally, statements not permitted in SQL prepared statements are also not permitted in stored programs. For a list of statements supported as prepared statements, see Section 13.5, “Prepared SQL Statement Syntax”.

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

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

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

关于mysql - 创建嵌套存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55820070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com