如何在 MySQL 中创建临时过程?

Posted

技术标签:

【中文标题】如何在 MySQL 中创建临时过程?【英文标题】:How to create temporary procedures in MySQL? 【发布时间】:2012-03-23 23:45:57 【问题描述】:

我目前正在为一家餐馆开发一个门户应用程序。使用的后端数据库是 mysql,我使用 Spring JDBC 支持来编写数据访问逻辑。

我的一些 DAO 中充斥着多个查询,并且代码量高达数千行。我认为我可以通过将我的一些逻辑移动到 SQL-PSM 过程中来减少大小和复杂性(因为 Java 中的数据绑定和胶水代码是地狱般的憎恶)。

但是我在 Db 上没有 DDL 权限,因此无法创建该过程。

我想知道是否有一种方法可以创建可丢弃\临时过程,您可以像 DML 语句一样直接执行而无需先创建它。

即我想要一个减去 create 关键字的过程,它可以完成我的工作,返回结果并消失。

谷歌了很多,但找不到任何东西。 :'( 只是想知道你们是否知道一个优雅的解决方案。

【问题讨论】:

我什至没有在 Db 中启用 PSM 的发言权,更不用说让团队采用 ORM。 :-( 我决定通过其他方式降低复杂性,例如将我的查询外部化到单独的 Spring 配置文件等。无论如何感谢所有回复。:-) 您是否尝试过从文本文件中执行 SQL 语句 link 【参考方案1】:

我不认为你可以。我的建议是在 Java 中创建“存储过程”。编写一个方法来获取您的输入,执行查询和计算,然后返回数据集。

【讨论】:

这不是问题。我已经有 Java 中的工作代码。关键是在关系表中的数据操作方面,Java 无法与 SQL-PSM 竞争。代码可以缩小到一半。 @MonikaMichael 您仍然可以通过运行查询在数据库端进行数据操作,对吧?只需将查询包装在 Java 方法而不是 MySQL SP 中。我对您使用的 JDBC 了解不多,但任何现代 DB 抽象都应该包括多查询支持。【参考方案2】:

我猜你正在寻找匿名代码块/匿名过程。不幸的是,它在 MySQL 中不受支持(它在诸如 Oracle 或 Sybase 等“大”RDBMS 中受支持)

我会考虑使用一些 ORM 框架,但我不是 Java 开发人员,所以我不能推荐任何一个。

【讨论】:

没错!匿名代码块。很遗憾听到 mysql 不支持它们.. :-( 想知道如何处理我的意大利面条 DAO。 您仍然可以使用常规程序来完成部分工作,如果您可以预先创建它们。【参考方案3】:

您正在寻找匿名 SQL 块。但是 MySQL 不支持。

唯一的解决方法是使用非匿名 SQL 块,即标准命名的存储过程和函数。

【讨论】:

以上是关于如何在 MySQL 中创建临时过程?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 mariadb 或 mysql 中创建临时表?

如何在打开游标之前在存储过程中创建一个临时表?

在 MySQL 存储过程中创建临时表

在存储过程中创建临时表

如何在 SQL 中创建临时表以用于多个 ADF 活动?

如何在mysql中创建存储过程