You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用原生查询按条件分批返回10行数据?该查询能否转存为存储过程?

问题解答

1. 原生查询实现需求

完全可以通过原生查询实现,你给出的SQL语句本身就是标准的原生查询写法:

select * from tbl_bank_customer_accounts where uid in ('05b6864b-ad10-4efe-af8d-b556e02dfc75','19226ae6-72f3-40dc-a690-079c979a3044','1a196c99-007f-4edd-a8a1-556f070cc852' ,'1e88f4fb-101c-4f6c-acd0-100bd1d02237' ,'20511b9b-8e7b-44fb-ba79-5c2103679b39' ,'3564b980-59e3-411f-8cc2-1bffa3cf9883' ,'4491b692-b6a4-4581-b150-411ab03151a4' ,'6364b0eb-015c-422f-a5e2-ae00828c70d6' ,'6ed7a6a2-265d-4d59-8764-d7742296aa17' ,'93c99403-d099-401f-a544-44984dcfc925');

只要uid是tbl_bank_customer_accounts表的有效字段,传入的ID格式与字段类型匹配,执行这条语句就能直接返回对应ID的对象列表。

2. 通过存储过程实现该查询

也可以用存储过程实现,下面以MySQL为例给出两种实现方式:

方式1:接收固定10个ID参数

适合每次固定传入10个ID的场景:

DELIMITER //
CREATE PROCEDURE GetCustomerAccounts(
    IN p_uid1 VARCHAR(36),
    IN p_uid2 VARCHAR(36),
    IN p_uid3 VARCHAR(36),
    IN p_uid4 VARCHAR(36),
    IN p_uid5 VARCHAR(36),
    IN p_uid6 VARCHAR(36),
    IN p_uid7 VARCHAR(36),
    IN p_uid8 VARCHAR(36),
    IN p_uid9 VARCHAR(36),
    IN p_uid10 VARCHAR(36)
)
BEGIN
    SELECT * FROM tbl_bank_customer_accounts 
    WHERE uid IN (p_uid1, p_uid2, p_uid3, p_uid4, p_uid5, p_uid6, p_uid7, p_uid8, p_uid9, p_uid10);
END //
DELIMITER ;

调用方式:

CALL GetCustomerAccounts('05b6864b-ad10-4efe-af8d-b556e02dfc75','19226ae6-72f3-40dc-a690-079c979a3044','1a196c99-007f-4edd-a8a1-556f070cc852' ,'1e88f4fb-101c-4f6c-acd0-100bd1d02237' ,'20511b9b-8e7b-44fb-ba79-5c2103679b39' ,'3564b980-59e3-411f-8cc2-1bffa3cf9883' ,'4491b692-b6a4-4581-b150-411ab03151a4' ,'6364b0eb-015c-422f-a5e2-ae00828c70d6' ,'6ed7a6a2-265d-4d59-8764-d7742296aa17' ,'93c99403-d099-401f-a544-44984dcfc925');

方式2:接收逗号分隔的ID字符串(更灵活)

如果后续ID数量可能变动,可传入逗号分隔的ID字符串实现查询:

DELIMITER //
CREATE PROCEDURE GetCustomerAccountsByString(IN p_uids VARCHAR(1000))
BEGIN
    SET @sql = CONCAT('SELECT * FROM tbl_bank_customer_accounts WHERE uid IN (', p_uids, ')');
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END //
DELIMITER ;

调用方式:

CALL GetCustomerAccountsByString('''05b6864b-ad10-4efe-af8d-b556e02dfc75'',''19226ae6-72f3-40dc-a690-079c979a3044'',''1a196c99-007f-4edd-a8a1-556f070cc852''');

注意:不同数据库的存储过程语法略有差异(如SQL Server、Oracle写法不同),上述示例针对MySQL,你可根据实际使用的数据库调整语法。

内容的提问来源于stack exchange,提问作者Gnana Sekhar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 07:07:03