MySQL存储过程是否支持传入表值参数?
MySQL 中是否支持类似 SQL Server 的表值参数?
在 SQL Server 中,我们可以通过表值参数(用户定义表类型)向存储过程传入结构化的表格数据,示例如下:
CREATE OR ALTER PROCEDURE [dbo].[TestProcedure] ( @Id INT, @StartDate DATETIME, @EndDate DATETIME, @TestIds1 dbo.UserDefinedTableType1 READONLY, @TestIds2 dbo.UserDefinedTableType2 READONLY )
MySQL 的替代实现方案
MySQL 目前没有直接对应 SQL Server 表值参数的功能,但可以通过JSON 格式参数实现类似的结构化数据传入需求,具体操作如下:
1. 传入 JSON 格式的列表数据
若要传入如下 Id 列表:
| Id |
|---|
| 1 |
| 2 |
可将其序列化为 JSON 字符串 '[{"Id":1},{"Id":2}]',再调用存储过程:
CALL TestProcedure ( ID1, '[{"Id":1},{"Id":2}]', '[{"Id2":1}]', 'No' );
2. 在存储过程中解析 JSON 数据
使用 JSON_TABLE 函数将 JSON 字符串解析为表格数据:
SELECT * FROM JSON_TABLE(Ids, "$[*]" COLUMNS(Id INT PATH "$.Id")) AS XX;
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

