将Informix多返回值存储函数转成支持多数据类型的MySQL存储函数
Informix存储函数转MySQL实现(支持返回多类型多行结果)
原Informix函数的作用是根据输入的日期范围,查询并返回符合条件的患者ID、姓名、性别描述及生成日期。由于MySQL中函数返回多列多行结果的方式和Informix不同,以下提供两种实现方案:
方案1:存储过程实现(兼容所有支持存储过程的MySQL版本)
MySQL的存储过程可以直接返回结果集,无需逐行循环返回,代码更简洁:
DELIMITER // CREATE PROCEDURE patient_details_fun(IN from_date DATE, IN to_date DATE) BEGIN SELECT pdt.patient_id, CONCAT(pdt.first_name, '', pdt.last_name) AS patient_name, (SELECT mgt.gender_desc FROM master_gender_tbl mgt WHERE pdt.gender_id = mgt.gender_id) AS gender_desc, pdt.generated_date FROM patient_details_tbl pdt WHERE pdt.generated_date BETWEEN from_date AND to_date; END // DELIMITER ;
调用方式:CALL patient_details_fun('2023-01-01', '2023-12-31');
方案2:表值函数实现(MySQL 8.0.19及以上版本支持)
如果需要用函数形式返回结果,可以使用MySQL的表值函数:
CREATE FUNCTION patient_details_fun(from_date DATE, to_date DATE) RETURNS TABLE ( patient_id VARCHAR(20), patient_name VARCHAR(150), gender_desc VARCHAR(30), generated_date DATE ) RETURN ( SELECT pdt.patient_id, CONCAT(pdt.first_name, '', pdt.last_name) AS patient_name, (SELECT mgt.gender_desc FROM master_gender_tbl mgt WHERE pdt.gender_id = mgt.gender_id) AS gender_desc, pdt.generated_date FROM patient_details_tbl pdt WHERE pdt.generated_date BETWEEN from_date AND to_date );
调用方式:SELECT * FROM patient_details_fun('2023-01-01', '2023-12-31');
关键转换点说明
- Informix的字符串拼接符
||替换为MySQL的CONCAT()函数 - Informix中
RETURNING ... WITH RESUME逐行返回的逻辑,在MySQL中直接通过SELECT语句返回结果集即可,无需循环 - 表值函数需要指定返回的表结构,存储过程则直接输出查询结果
内容的提问来源于stack exchange,提问作者Kranthi Dasari
相关产品推荐
相关产品推荐

