IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> oracle创建存储过程,hibernate调用 -> 正文阅读

[大数据]oracle创建存储过程,hibernate调用

1,创建存储过程进行批量更新(存储过程无输出参数)。hibernate调用,传入输入参数完成批量更新

CREATE OR REPLACE?
PROCEDURE CESHI_TEST(startDate in VARCHAR2,endDate in VARCHAR2,tId in VARCHAR2) AS
TYPE cursor_variable is REF cursor; ? --定义游标变量,用于动态关联sql语句
cursor_v cursor_variable; ? ? ? ? ? ? --游标
igtii IMS_GTII%rowtype; --行变量,用于接收遍历游标的结果集
v_sqlstr ? varchar2(1000); ? ? ? ? ? ? ? ? ?--查询结果集sql语句,动态拼接
BEGIN
--动态拼接sql 当tId is not null 时,增加检索条件 tenantId = tId
v_sqlstr := 'select * from IMS_GTII G WHERE status = 0 AND bdate >= TO_DATE (''' || startDate
? ? ? ? ? ?|| ''',''yyyy-mm-dd hh24:mi:ss'') AND bdate <= TO_DATE ('''|| endDate
? ? ? ? ? ?|| ''',''yyyy-mm-dd hh24:mi:ss'') AND INVOICETYPE = 0 AND EXISTS (SELECT DISTINCT VATCODE,VATSNUMBER FROM EI_HEAD H WHERE G .VATCODE = H .infotypecode_js AND G .VATSNUMBER = H .infonumber_js)'; ?

IF tId is not null then
?? ?v_sqlstr := ?(v_sqlstr || ' AND tenantId = ''' || tId || '''');
end IF;
dbms_output.put_line(v_sqlstr);
--将游标cursor_v 与查询语句sql相关联
open cursor_v for v_sqlstr;
?? ??? ?--遍历游标,进行批量更新
?? ??? ?FETCH cursor_v into igtii;
?? ??? ?while cursor_v%found loop
?? ??? ??? ?--批量更新IMS_GTII 中数据
?? ??? ??? ?UPDATE IMS_GTII SET INVOICETYPE = 1,UPDATETIME = sysdate where INVID = igtii.INVID;
?? ??? ??? ?dbms_output.put_line('更新数据id:' || igtii.INVID);
?? ??? ??? ?FETCH cursor_v into igtii;
?? ??? ?end loop;
?? ??? ?close cursor_v;
END;

以上存储过程逻辑:输入参数 startDate? ?endDate? ?tId

定义游标变量 cursor_variable 用于动态绑定sql查询语句

定义字符串变量 v_sqlstr? 拼接sql查询语句,根据输入参数tId是否为null,动态添加检索条件

游标cursor_v与 v_sqlstr 绑定,遍历获取id,根据id主键更新表数据

(IMS_GTII,EI_HEAD 表结构这里就不提供了,查询sql可套用自己的表)

hibernate调用:

findSqlProcess("{CALL CESHI_TEST(?,?,?)}",“2022-05-18”,“2022-05-18”,"tid");
public void findSqlProcess(String queryString, Object... values) {
    SQLQuery query = getSession().createSQLQuery(queryString);
    for (int i = 0; i < values.length; i++) {
        query.setParameter(i, values[i]);
    }
    query.executeUpdate();
}

2,调用带返回参数的存储过程,并获取结果集

CREATE OR REPLACE?
PROCEDURE CESHI_CURSOR_RESULTS(v_pram1 in int,v_param2 in NUMBER,v_param3 in VARCHAR2,dataCursor out sys_refcursor) AS
BEGIN
?? ?open dataCursor FOR select * from IMS_GTII where INVOICETYPE = v_pram1 and RECHECKNAME = v_param3 and TAXRATE = v_param2;
END;

返回参数dataCursor 接收查询语句返回的多行数据

hibernate调用,并获取结果集进行遍历

findSqlProcessResults("{CALL CESHI_CURSOR_RESULTS(?,?,?,?)}",1,0.13,"李四");

public ResultSet findSqlProcessResults(String queryString,Object... values) throws SQLException {
    Connection connection = getSession().connection();
    CallableStatement callable = connection.prepareCall(queryString);

    for (int i = 0; i < values.length; i++) {
        if(values[i] instanceof Integer){
            int v = (Integer) values[i];
            callable.setInt(i+1,v);
        }else if(values[i] instanceof  Double){
            double v = (Double) values[i];
            callable.setDouble(i+1,v);
        }else{
            //其他统一字符串类型
            callable.setString(i+1,values[i].toString());
        }
    }

    int outindex = values.length + 1;
    callable.registerOutParameter(outindex, OracleTypes.CURSOR);
    callable.execute();
    ResultSet resultSet = (ResultSet)callable.getObject(outindex);
????//遍历结果集resultSet
    while (resultSet.next()){
????    //获取行的索引2的字段并打印出来
        System.out.println(resultSet.getString(2));
    }
    return resultSet;
}

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-21 19:02:54  更:2022-05-21 19:04:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 12:19:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码