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);//遍历结果集resultSetwhile (resultSet.next()){//获取行的索引2的字段并打印出来System.out.println(resultSet.getString(2));}return resultSet;
}

oracle创建存储过程,hibernate调用相关推荐

  1. oracle存储过程和视图不存在,Oracle 创建存储过程 提示权限不足或者提示表和视图不存在问题...

    grant create view to hospital; --授予查询权限 grant select any table to hospital; --授予权限 grant select any ...

  2. (2)存储过程中可以调用其他存储过程吗?_详解Oracle创建存储过程、创建函数、创建包及实例演示...

    概述 说句实在的,平时工作基本上不会去背啥创建存储过程.创建函数.创建包之类的语法,但是相信大家面试啥的却基本会笔试这些,所以就对存储过程.函数和包的语法做下总结,也做个备忘!这里面语法大家理解就可以 ...

  3. oracle创建包 和调用,oracle创建函数和调用存储过程和调用函数的例子(区别)...

    创建函数: 格式:create or replace function func(参数 参数类型) Return number Is Begin --------业务逻辑--------- End; ...

  4. oracle创建函数和调用存储过程和调用函数的例子(区别)

    创建函数: 格式:create or replace function func(参数 参数类型) Return number Is Begin --------业务逻辑--------- End; ...

  5. 第15章_存储过程与函数(创建存储过程、调用存储过程、存储函数的使用、存储过程和函数的查看、修改、删除)

    第15章_存储过程与函数 第15章_存储过程与函数 1. 存储过程概述 1.1 理解 1.2 分类 2. 创建存储过程 2.1 语法分析 2.2 代码举例 3. 调用存储过程 3.1 调用格式 3.2 ...

  6. hibernate 调用oracle存储过程,hibernate调用oracle存储过程||函数

    pakeage dao.Impl; //调用函数FUN_GET(); public String get(String Id,String Name){ return getSession().cre ...

  7. oracle 创建存储过程_Oracle存储过程编程:流程控制选择结构和循环结构总结

    <大数据和人工智能交流>头条号向广大初学者新增C .Java .Python .Scala.javascript 等目前流行的计算机.大数据编程语言,希望大家以后关注本头条号更多的内容. ...

  8. Oracle创建存储过程时出现“警告: 创建的过程带有编译错误。”

    执行完存储过程的创建后,如出现"警告: 创建的过程带有编译错误.",可执行语句: show errors; 查看具体哪里出现了编译错误.

  9. oracle创建存储过程设置变量,oracle建游标变量包,且在存储过程中使用

    --建包 createorreplacepackage PA_BGYZB as type sp_cursor is ref cursor; end PA_BGYZB; --存储过程调用包 create ...

最新文章

  1. Leetcode刷题 232题:用栈实现队列(基于python3和c++两种语言)
  2. 独家 | 别用csv存储了-这种文件格式比csv快150倍(附链接)
  3. AT4502-[AGC029C]Lexicographic constraints【二分,栈】
  4. Oracle行转列语法总结大全
  5. ActiveMQ 即时通讯服务 入門指南及淺析
  6. 使用tar进行磁带备份的命令汇总
  7. 笨办法学Python(第三版)pdf
  8. 通过Chrome浏览器检测和优化页面
  9. java打印菱形图案
  10. 小白入门该如何学习PR视频剪辑软件及辅助工具的使用呢?
  11. 论文阅读笔记 | 分类网络——ParNet
  12. JAVA输出希腊字母表
  13. Allegro SigXplorer 等长设置方法-比较简单
  14. 官宣:华为云学院带你看AI
  15. PMP项目管理的就业前景
  16. 安全分析--追踪溯源的找人思路
  17. 【论文导读】- Cluster-driven Graph Federated Learning over Multiple Domains(聚类驱动的图联邦学习)
  18. BC3.1精简版win7/10下不兼容问题的解决
  19. layui弄一个好看的数据表格样式
  20. String.format()详解与遇到的问题(UnknownFormatConversionException)

热门文章

  1. Uos统信系统 本地APT源配置
  2. win10同步服务器文件夹在哪,win10系统一键同步win 10文件夹视图的操作方法
  3. 如何选择计算机软考科目,计算机软考科目众多 我们该如何选择考试科目?
  4. 他把我撞了,却骂我diao丝
  5. 如何提升 Java 技术
  6. 2018年区块链红黑榜-千氪
  7. iMeta | 东农吴凤芝/南农韦中等揭示生物炭抑制作物土传病害机理
  8. 计算机哪个按键可以和弦,钢琴键盘和弦图解大全!作曲必看!老师和家长快收藏起来...
  9. 从计数器逻辑中揭秘神奇的HDL
  10. 无穷小陪伴老翁走人生