java使用mybatis调用函数返回一个游标结果集(代码片段)

瀚高PG实验室 瀚高PG实验室     2023-03-09     589

关键词:

瀚高数据库
目录
环境
文档用途
详细信息

环境
系统平台:IBM:Linux on System z Red Hat Enterprise Linux 7
版本:4.5,6.0
文档用途
mybatis调用函数返回一个游标时如何接收

详细信息
1.service实现类代码

@Override
@Transactional
public List<HighgoFunOneRefcursorEntity> getOneRefcursor(Integer id) 

    HashMap<String, Object> map = new HashMap<String, Object>();
    map.put("id", id);
    highgoFunOneRefcursorDao.getOneRefcursor(map);
    List<HighgoFunOneRefcursorEntity> list = (List<HighgoFunOneRefcursorEntity>)map.get("result");

    return list;

2.dao层

@Mapper
public interface HighgoFunOneRefcursorDao extends BaseMapper<HighgoFunOneRefcursorEntity> 

    ArrayList<Map<String, Object>> getOneRefcursor(HashMap map);
   

3.mapper

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.database.mybatisplus.modules.demo.dao.HighgoFunOneRefcursorDao">

   <!-- 可根据自己的需求,是否要使用 -->
    <resultMap type="com.database.mybatisplus.modules.demo.entity.HighgoFunOneRefcursorEntity" id="highgoFunOneRefcursorMap">
        <result property="hanzi" column="hanzi"/>
        <result property="quanpin" column="quanpin"/>
        <result property="szm" column="szm"/>
        <result property="duyin" column="duyin"/>
        <result property="numbersd" column="numbersd"/>
        <result property="sd" column="sd"/>
        <result property="repsd" column="repsd"/>
        <result property="hzascii" column="hzascii"/>
    </resultMap>

    <!-- 调用函数程返回一个游标 -->
    <select id="getOneRefcursor" parameterType="map" statementType="CALLABLE" resultType="java.util.Map">
        #result,mode=OUT,jdbcType=OTHER,javaType=ResultSet,resultMap=highgoFunOneRefcursorMap = call fn_one_refcursor(#id,mode=IN)
    </select>

</mapper>

4.数据库函数

CREATE OR REPLACE FUNCTION test.fn_one_refcursor(integer)
 RETURNS refcursor
 LANGUAGE plpgsql
AS $function$
declare $2 refcursor;
begin
	if $1 = 1 then 
		open $2 for select * from hzpyszm limit 100;
	elseif $1 = 2 then
		open $2 for select hanzi,quanpin,szm,duyin from hzpyszm limit 100;
	else 
		open $2 for select hanzi,quanpin from hzpyszm limit 100;
	end if;
	return $2;
	exception when others then
		raise exception 'sql exception--%',sqlerrm;
end;
$function$
;

5.jdbc添加参数

url: jdbc:highgo://192.168.21.138:5870/test?escapeSyntaxCallMode=callIfNoReturn

6.数据库表

CREATE TABLE hzpyszm (
	hanzi varchar(4) NULL,
	quanpin varchar(10) NULL,
	szm varchar(5) NULL,
	duyin varchar(10) NULL,
	numbersd varchar(1) NULL,
	sd varchar(5) NULL,
	repsd varchar(5) NULL,
	hzascii int8 NULL
);
CREATE INDEX hzpyszm_hanzi_idx ON test.hzpyszm USING btree (hanzi varchar_pattern_ops);

INSERT INTO hzpyszm (hanzi, quanpin, szm, duyin, numbersd, sd, repsd, hzascii) VALUES('唔', 'ngn', 'n', 'ńgń', '2', NULL, NULL, 21780);
INSERT INTO hzpyszm (hanzi, quanpin, szm, duyin, numbersd, sd, repsd, hzascii) VALUES('匌', 'ge', 'g', 'gé', '2', 'é', 'e', 21260);
INSERT INTO hzpyszm (hanzi, quanpin, szm, duyin, numbersd, sd, repsd, hzascii) VALUES('匍', 'pu', 'p', 'pú', '2', 'ú', 'u', 21261);
INSERT INTO hzpyszm (hanzi, quanpin, szm, duyin, numbersd, sd, repsd, hzascii) VALUES('匎', 'e', 'e', 'è', '4', 'è', 'e', 21262);
INSERT INTO hzpyszm (hanzi, quanpin, szm, duyin, numbersd, sd, repsd, hzascii) VALUES('匏', 'pao', 'p', 'páo', '2', 'á', 'a', 21263);
INSERT INTO hzpyszm (hanzi, quanpin, szm, duyin, numbersd, sd, repsd, hzascii) VALUES('匐', 'fu', 'f', 'fú', '2', 'ú', 'u', 21264);
INSERT INTO hzpyszm (hanzi, quanpin, szm, duyin, numbersd, sd, repsd, hzascii) VALUES('匑', 'gong', 'g', 'gōng', '1', 'ō', 'o', 21265);
INSERT INTO hzpyszm (hanzi, quanpin, szm, duyin, numbersd, sd, repsd, hzascii) VALUES('匒', 'da', 'd', 'dá', '2', 'á', 'a', 21266);
INSERT INTO hzpyszm (hanzi, quanpin, szm, duyin, numbersd, sd, repsd, hzascii) VALUES('匓', 'jiu', 'j', 'jiù', '4', 'ù', 'u', 21267);
INSERT INTO hzpyszm (hanzi, quanpin, szm, duyin, numbersd, sd, repsd, hzascii) VALUES('匔', 'gong', 'g', 'gōng', '1', 'ō', 'o', 21268);

java使用mybatis调用存储过程返回一个游标结果集

瀚高数据库目录环境文档用途详细信息环境系统平台:IBM:LinuxonSystemzRedHatEnterpriseLinux7版本:6.0,4.5文档用途mybatis调用存储过程返回游标接收结果集。详细信息1.service实现类@Override@TransactionalpublicList<HighgoFunOneRefcurso... 查看详情

java使用mybatis调用存储过程返回一个游标结果集(代码片段)

瀚高数据库目录环境文档用途详细信息环境系统平台:IBM:LinuxonSystemzRedHatEnterpriseLinux7版本:6.0,4.5文档用途mybatis调用存储过程返回游标接收结果集。详细信息1.service实现类@Override@TransactionalpublicList<HighgoFunOneRefcurso... 查看详情

java - 调用返回游标的存储函数

】java-调用返回游标的存储函数【英文标题】:java-CallingStoredFunctionThatReturnsaCursor【发布时间】:2015-08-2715:03:21【问题描述】:我有一个存储函数设置如下:CREATEORREPLACEPACKAGEPACKAGENAMEISFUNCTIONREAD_FUNC(i_nameINVARCHAR2)RETURNSYS_REFCURSOR;ENDPA... 查看详情

调用返回游标的 oracle 函数

...Oracle函数,它接受一个输入参数并返回一个游标。我正在使用C#调用Oracle函数,但是我无法检索光标。我的Oracle函数调用如下:-selectTBL_POWER_VIEW.GET_POWER_ID(\'V\')FROMDUAL;我的C#代 查看详情

Java 和数据库:关于使用多个结果集和游标

】Java和数据库:关于使用多个结果集和游标【英文标题】:Javaanddatabase:onusingmultipleResultSetsandCursors【发布时间】:2012-04-1419:14:24【问题描述】:我正在运行一个java方法来调用Oracle11.2数据库中的存储过程。我正在使用JDBC连接调... 查看详情

在另一个游标中使用/调用游标 - PL/Sql

】在另一个游标中使用/调用游标-PL/Sql【英文标题】:Using/Callingacursorinanothercursor-PL/Sql【发布时间】:2011-11-1416:23:21【问题描述】:我有一个带有返回ID的光标的函数。我需要使用第一个游标的这个ID结果在另一个游标中获取一些... 查看详情

mybatis如何调用返回游标形式的结果集存储过程,java层如何把cursor转换为list呢?有代码吗?麻烦贴一下

我按照网上的例子怎么弄都不对,搞了一天了。。晕死。麻烦大牛们贴个java层和xml里面的代码,谢谢了。。http://bbs.csdn.net/topics/390866155这个地址里,有我的代码,还有报错信息。麻烦查看。。回下面那个网友:我写的跟你差不... 查看详情

在 Java 中调用 Oracle PL/SQL 中的过程或函数。返回结果集 false

】在Java中调用OraclePL/SQL中的过程或函数。返回结果集false【英文标题】:InJavacallingprocedureorfunctioninOraclePL/SQL.ReturnResultsetfalse【发布时间】:2016-07-2011:08:56【问题描述】:我有一个函数plsql,在plsql中运行函数返回游标有数据但是... 查看详情

参考光标和结果集

...ref游标,我正在从游标中提取结果集并迭代结果集以供我使用,现在我的问题是这个返回的ref游标是包含所有数据还是在游标上调用getObject以获取结果集时再次进入数据库服务器?问候【问题讨论】:【参考方案1】:FetchSize是... 查看详情

mysql存储过程,获取使用游标查询的结果集

参考技术AMySQL存储过程中,使用游标查询,返回的是结果集时,如何查看调用存储过程输出结果呢?解决方案:存储过程不返回数据,但它能创建和填充另一个表。所以在存储过程运行中创建临时表。该临时表将保存存储过程中... 查看详情

sqlserver游标都有哪些属性

...用程序调用API游标函数时,服务器会对API函数进行处理。使用API函数和方法可以实现如下功能:(1)打开一个连接。(2)设置定义游标特征的特性或属性,API自动将游标影射到每个结果集。(3)执行一个或多个Transaction-SQL语句... 查看详情

如何从 plsql 函数创建和返回游标?

...一个游标并从函数中返回这个游标。然后我想在Java类中调用这个函数并从游标中检索数据。注意:光标返回一行。我写了这样的东西,,CREATEORREPLACEFUNCTIONFUNCTION1( 查看详情

在游标中调用函数 for 循环

...一些需要填充的缺少日期的记录。我编写了一个游标,它使用select语句来查找这些记录,并打算使用for循环来更新它们。应用程序中有一个现有的公共函数,如果我将记录的ID传递给它,它将返回我需要的日期。我的问题实际上... 查看详情

oracle如何返回多条记录

...任何查询结果默认都提供隐式游标,当前方案的重点在于使用游标取得查询结果的句柄,由于游标被引用为类型,通过返回类型,即等效于(并不等同)返回数据集。具体的案例如下:--创建包头createorreplacepackagemypackage1as--声明... 查看详情

错误:使用游标时查询没有结果数据的目的地

】错误:使用游标时查询没有结果数据的目的地【英文标题】:Error:queryhasnodestinationforresultdatawhileusingacursor【发布时间】:2014-03-2609:41:34【问题描述】:我编写了一个函数,用于为我的项目自动执行一组函数。我正在使用一个ref... 查看详情

mysql之游标

...FUNCTION函数名称(参数)RETURNS数据类型程序体存储过程中使用游标的4个步骤:定义游标、打开游标、读取游标数据和关闭游标。定义游标:DECLARE游标名CURSORFOR查询语句打开游标:OPEN游标名称;读取游标数据:FETCH游标名INTO变量... 查看详情

Oracle函数:如何将表名作为参数传递,并使用游标结果作为表名?

】Oracle函数:如何将表名作为参数传递,并使用游标结果作为表名?【英文标题】:Oraclefunctions:Howtopassatablenameasparameter,anduseacursorresultasatablename?【发布时间】:2014-04-0319:29:18【问题描述】:我在尝试创建的这个oracle函数方面需... 查看详情

数据库视频对游标的认识

...,允许用户访问单独的数据行,而不是对整个行进行操作使用游标的好处单独处理每一行逐条收集信息对数据逐行进行操作为什么使用游标降低系统开销降低潜在的阻隔情况生成SQL代码并立即执行或输出游标的组成游标结果集由... 查看详情