Spring StoredProcedure Cursor 使用

Spring StoredProcedure Cursor 使用JavaCodeimportjava.sql.ResultSet;importjava.sql.SQLException;importjava.text.DateFormat;importjava.text.SimpleDateFormat;importjava.util.HashMap;importjava.util.List;importjava.util.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Java Code

import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import oracle.jdbc.OracleTypes;

import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.SqlOutParameter;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.object.StoredProcedure;



public class GetUserActionsOnV2 extends StoredProcedure {
	
	public GetUserActionsOnV2(DataSource dataSource) {
		setDataSource(dataSource);
		setSql("GETUSERACTIONSONV2");
		final DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		declareParameter(new SqlOutParameter("active_rs", OracleTypes.CURSOR, new RowMapper() {
		   public Map mapRow(ResultSet rs, int rowNum)
				throws SQLException {
			   Map<String,Object> map = new HashMap<String,Object>();
			   map.put("SOEID", rs.getString("SOEID"));
			   map.put("IOIID", rs.getString("IOIID"));
			   map.put("NAME", rs.getString("NAME"));
			   map.put("VALUE", rs.getString("VALUE"));
			   map.put("DESTINATIONUSER", rs.getString("DESTINATIONUSER"));
			   map.put("ADD_TS", df.format(rs.getTimestamp("ADD_TS")));
			   map.put("UPDATE_TS", df.format(rs.getTimestamp("UPDATE_TS")));
			   return map;
		}
	}));
		declareParameter(new SqlOutParameter("return_sql", OracleTypes.VARCHAR));
		
		declareParameter(new SqlParameter("V_SOEID",OracleTypes.VARCHAR));
		declareParameter(new SqlParameter("V_IOIID", OracleTypes.VARCHAR));
		declareParameter(new SqlParameter("V_NAME",OracleTypes.VARCHAR));
		declareParameter(new SqlParameter("V_VALUE",OracleTypes.VARCHAR));
		declareParameter(new SqlParameter("V_DESTINATIONUSER",OracleTypes.VARCHAR));
		
		
		compile();
	}
		
	public List<Map<String,Object>> executeGetUserActions(Map<String,String> param) throws Exception {
		Map<String, Object> inParameters = new HashMap<String, Object>();
		inParameters.put("V_SOEID", param.get("SOEID"));
		inParameters.put("V_IOIID", param.get("IOIID"));
		inParameters.put("V_NAME", param.get("NAME"));
		inParameters.put("V_VALUE", param.get("VALUE"));
		inParameters.put("V_DESTINATIONUSER", param.get("DESTINATIONUSER"));
		try {
			Map result = execute(inParameters);
			String sql = (String) result.get("return_sql");
			logger.info("GetUserActionsOnV2 sql=" + sql);
			
			List<Map<String,Object>> activeList = (List<Map<String, Object>>) result.get("active_rs");
			return activeList;
		} catch (DataAccessException e) {
			logger.error("Failed to GetUserActionsOnV2 !");
			throw new Exception(e);
		}
	}
}

SP code

/*
#ident "%W%"
*/

CREATE OR REPLACE PROCEDURE GETUSERACTIONSONV2(
  active_rs OUT ×××××_TYPES.cur_type,
  return_sql OUT VARCHAR2,
  V_SOEID IN VARCHAR2,
  V_IOIID IN VARCHAR2,
  V_NAME IN VARCHAR2,
  V_VALUE IN VARCHAR2,
  V_DESTINATIONUSER IN VARCHAR2
)
IS

v_sql VARCHAR2(1000);

BEGIN
 v_sql := 'SELECT * FROM USER_ACTION_V2 WHERE 1 = 1 ';
 
  if V_SOEID is not null THEN
    v_sql := v_sql || 'AND (SOEID = '''|| upper(V_SOEID) || ''' OR DESTINATIONUSER = ''' || upper(V_SOEID) || ''') ';
  end if;
 
  if V_IOIID is not null THEN
  	v_sql := v_sql || 'AND IOIID =''' || V_IOIID || ''' ';
  end if;
 
  if V_NAME is not null THEN
  	v_sql := v_sql || 'AND NAME =''' || upper(V_NAME) || ''' ';
  end if;
  
  if V_VALUE is not null THEN
  	v_sql := v_sql || 'AND VALUE =''' || V_VALUE || ''' ';
  end if;

  v_sql := v_sql || 'ORDER BY ADD_TS DESC';
  
  return_sql := v_sql;
  OPEN active_rs FOR v_sql;
END;
/

注意问题:

(1)Java  StoredProcedure 中定义in,out参数的顺序要与SP sql中定义的in,out参数顺序一致

declareParameter(new SqlOutParameter(“return_sql”, OracleTypes.VARCHAR));
declareParameter(new SqlParameter(“V_SOEID”,OracleTypes.VARCHAR));
declareParameter(new SqlParameter(“V_IOIID”, OracleTypes.VARCHAR));

sp sql:

                return_sql OUT VARCHAR2,
  V_SOEID IN VARCHAR2,
  V_IOIID IN VARCHAR2,

(2)如果sp中out参数返回是cursor,必须定义RowMapper对cursor返回结果进行处理,否则get的结果就为空。

         

final DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		declareParameter(new SqlOutParameter("active_rs", OracleTypes.CURSOR, new RowMapper() {
		   public Map mapRow(ResultSet rs, int rowNum)
				throws SQLException {
			   Map<String,Object> map = new HashMap<String,Object>();
			   map.put("SOEID", rs.getString("SOEID"));
			   map.put("IOIID", rs.getString("IOIID"));
			   map.put("NAME", rs.getString("NAME"));
			   map.put("VALUE", rs.getString("VALUE"));
			   map.put("DESTINATIONUSER", rs.getString("DESTINATIONUSER"));
			   map.put("ADD_TS", df.format(rs.getTimestamp("ADD_TS")));
			   map.put("UPDATE_TS", df.format(rs.getTimestamp("UPDATE_TS")));
			   return map;
		}
	}));

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/164515.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux 树型显示文件 tree ls tree 命令

    linux 树型显示文件 tree ls tree 命令

    2021年10月15日
    40
  • pytorch中的卷积操作详解

    pytorch中的卷积操作详解首先说下pytorch中的Tensor通道排列顺序是:[batch,channel,height,width]我们常用的卷积(Conv2d)在pytorch中对应的函数是:torch.nn.Conv2d(in_channels,out_channels,kernel_size,stride=1,padding=0,dilation=1,groups=1,bias=Tr…

    2022年5月28日
    52
  • interview-db[通俗易懂]

    interview-db[通俗易懂]1.索引作用和优缺点索引就一种特殊的查询表,数据库的搜索可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。2.什么字段适合建索引唯一性比较高,不为空,经常查询3.常见慢查询优化1.建索引2.减少表之间的关联3.优化sql,尽量让sq…

    2022年7月21日
    12
  • 硬件工程师成长之路(9)——检测标准

    硬件工程师成长之路(9)——检测标准系列文章目录1.元件基础2.电路设计3.PCB设计4.元件焊接6.程序设计文章目录前言一、防爆认证前言送给大学毕业后找不到奋斗方向的你(每周不定时更新)嵌入式系统设计师考试一、防爆认证详细资料………………

    2022年9月5日
    2
  • 《数据仓库与数据挖掘教程》ch01绪论 章节整理

    《数据仓库与数据挖掘教程》ch01绪论 章节整理数据仓库概述从传统数据库到数据仓库计算机数据处理有两种主要方式事务型处理分析型处理传统数据库与事务处理传统数据库是长期存储在计算机内的、有组织的、可共享的数据集合有严格的数学理论支持,并在商业领域得到普及应用。联机事务处理(On-LineTransactionProcessing)系统,简称OLTP系统。数据存储在传统数据库中,成为OLTP数据库处理特点:实时响应,数…

    2022年6月17日
    19
  • SpringBoot2.0集成WebSocket,实现后台向前端推送信息

    SpringBoot2.0集成WebSocket,实现后台向前端推送信息什么是WebSocket?-初次接触WebSocket的人,都会问同样的问题:我们已经有了HTTP协议,为什么还需要另一个协议?它能带来什么好处?-答案很简单,因为HTTP协议有一个缺陷:***通信只能由客户端发起***,HTTP协议做不到服务器主动向客户端推送信息。https://github.com/moshowgame/spring-cloud-study/tree/master/spring-cloud-study-websocket

    2022年5月3日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号