编辑
2023-09-04
学习记录
00
请注意,本文编写于 577 天前,最后修改于 575 天前,其中某些信息可能已经过时。

目录

前提
问题
实现

前提

由于业务需要,需要返回多个值,不能在程序里写死sql,所以就改成写函数,让现场可以自动配置

问题

oracle函数和存储过程返回结果集是一件很麻烦的事情,其次就是不能使用同一个字段名union,如果设置成返回复杂对象或者游标类型,那么就不够动态,前端还是要不断因为现场调整函数而进行调整,所以我采用拼接字符串的方式,返回一个字符串,然后java根据字符串来中',',来进行分割成数组返回给前端,这个方式只能在函数中每个select查询都是查询一个结果的时候才能用,如果查询多个结果就不好用了

实现

oracle 函数

sql
create or replace function get_important_mark(patientId in varchar2, visitNo in varchar2) RETURN VARCHAR2 IS result_marks VARCHAR2(100); -- 修改为result_marks变量,并指定适当的长度 mark1 VARCHAR2(10); mark2 VARCHAR2(10); BEGIN -- 第一个查询语句 SELECT CASE WHEN SYSDATE - t.admission_date_time > 3 THEN '三' ELSE '' END INTO mark1 FROM system.abc t WHERE t.patietn_id = patientId AND t.visit_id = visitNo; -- 将第一个标记赋值给result_marks变量 result_marks := mark1; -- 第二个查询语句(修改条件) SELECT CASE WHEN SYSDATE - t.discharge_date_time > 3 THEN '四' ELSE '' END INTO mark2 FROM system.abc t WHERE t.patient_id = patientId AND t.visit_id = visitNo; -- 将第二个标记添加到result_marks变量中(使用字符串连接操作符) result_marks := result_marks || ',' || mark2; -- 返回结果值 RETURN result_marks; END get_important_mark;

java 接收函数结果

java
@Select("select get_important_mark(#{param1,jdbcType=VARCHAR},#{param2,jdbcType=VARCHAR}) from dual") String getImportantMarks(String patientId, String visitId);

使用字符串split方法分割成字符串数组返回给前端

本文作者:Weee

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!