如何将存储过程转换为单个 SQL 语句

Posted

技术标签:

【中文标题】如何将存储过程转换为单个 SQL 语句【英文标题】:How can i transform a stored procedure into a single SQL statment 【发布时间】:2015-10-24 20:58:14 【问题描述】:

我的数据库中有一个表,看起来像(表中可以有相同的元组):

+-------------+---------+--------+
| ProductName | Status  | Branch |
+-------------+---------+--------+
| P1          | dead    |      1 |
| P1          | dead    |      2 |
| P1          | dead    |      2 |
| P2          | expired |      1 |
+-------------+---------+--------+

我必须在 as 之后显示结果(Branch 属性是动态的):

+-------------+---------+--------+
| ProductName | Branch 1|Branch 2|
+-------------+---------+--------+
| P1          | dead    |    dead|
| P2          | expired |     OK |
+-------------+---------+--------+

经过一些帮助,我想出了以下解决方案:

设置@sql = NULL; 选择 GROUP_CONCAT(DISTINCT 连接( 'COALESCE(GROUP_CONCAT(DISTINCT case when branch = ''', 分支, ''' 然后状态结束),''OK'') AS ', CONCAT('分支',分支) ) ) 进入@sql 从表1; SET @sql = CONCAT('SELECT productName, ', @sql, ' 从表 1 按产品名称分组'); 从@sql 准备stmt; 执行语句;

它显示了我需要的确切结果:

+-------------+---------+-----------+
| productName | Branch1 |  Branch2  |
+-------------+---------+-----------+
| p1          | dead    |    dead   |
| p2          | expired |    OK     |
+-------------+---------+-----------+

SQL Fiddle.

我希望将此过程转换为单个 SQL 语句。我已经尝试过,但找不到解决方案。我怎样才能做到这一点?谢谢

【问题讨论】:

我们可以将call spName(...) 视为一条语句吗? 【参考方案1】:

这个确切的结果(因为它是由存储过程产生的,列数是在运行时确定的),不能在单个 SQL 选择语句中重现。这是不可能的。

【讨论】:

以上是关于如何将存储过程转换为单个 SQL 语句的主要内容,如果未能解决你的问题,请参考以下文章

在 Snowflake 中处理多个 SQL 语句的存储过程

将存储过程从 MS SQL Server 转换为 Informix

将单个xml节点作为数组转换为json

需要将以下存储过程从 Oracle 转换为 SQL

如何将单个结果集从返回多个集的 SQL 存储过程保存到临时表?

oracle SQL语句中怎么样调用存储过程