由于业务需要,需要返回多个值,不能在程序里写死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 许可协议。转载请注明出处!