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);//遍历结果集resultSetwhile (resultSet.next()){//获取行的索引2的字段并打印出来System.out.println(resultSet.getString(2));}return resultSet; }
oracle创建存储过程,hibernate调用相关推荐
- oracle存储过程和视图不存在,Oracle 创建存储过程 提示权限不足或者提示表和视图不存在问题...
grant create view to hospital; --授予查询权限 grant select any table to hospital; --授予权限 grant select any ...
- (2)存储过程中可以调用其他存储过程吗?_详解Oracle创建存储过程、创建函数、创建包及实例演示...
概述 说句实在的,平时工作基本上不会去背啥创建存储过程.创建函数.创建包之类的语法,但是相信大家面试啥的却基本会笔试这些,所以就对存储过程.函数和包的语法做下总结,也做个备忘!这里面语法大家理解就可以 ...
- oracle创建包 和调用,oracle创建函数和调用存储过程和调用函数的例子(区别)...
创建函数: 格式:create or replace function func(参数 参数类型) Return number Is Begin --------业务逻辑--------- End; ...
- oracle创建函数和调用存储过程和调用函数的例子(区别)
创建函数: 格式:create or replace function func(参数 参数类型) Return number Is Begin --------业务逻辑--------- End; ...
- 第15章_存储过程与函数(创建存储过程、调用存储过程、存储函数的使用、存储过程和函数的查看、修改、删除)
第15章_存储过程与函数 第15章_存储过程与函数 1. 存储过程概述 1.1 理解 1.2 分类 2. 创建存储过程 2.1 语法分析 2.2 代码举例 3. 调用存储过程 3.1 调用格式 3.2 ...
- hibernate 调用oracle存储过程,hibernate调用oracle存储过程||函数
pakeage dao.Impl; //调用函数FUN_GET(); public String get(String Id,String Name){ return getSession().cre ...
- oracle 创建存储过程_Oracle存储过程编程:流程控制选择结构和循环结构总结
<大数据和人工智能交流>头条号向广大初学者新增C .Java .Python .Scala.javascript 等目前流行的计算机.大数据编程语言,希望大家以后关注本头条号更多的内容. ...
- Oracle创建存储过程时出现“警告: 创建的过程带有编译错误。”
执行完存储过程的创建后,如出现"警告: 创建的过程带有编译错误.",可执行语句: show errors; 查看具体哪里出现了编译错误.
- oracle创建存储过程设置变量,oracle建游标变量包,且在存储过程中使用
--建包 createorreplacepackage PA_BGYZB as type sp_cursor is ref cursor; end PA_BGYZB; --存储过程调用包 create ...
最新文章
- Leetcode刷题 232题:用栈实现队列(基于python3和c++两种语言)
- 独家 | 别用csv存储了-这种文件格式比csv快150倍(附链接)
- AT4502-[AGC029C]Lexicographic constraints【二分,栈】
- Oracle行转列语法总结大全
- ActiveMQ 即时通讯服务 入門指南及淺析
- 使用tar进行磁带备份的命令汇总
- 笨办法学Python(第三版)pdf
- 通过Chrome浏览器检测和优化页面
- java打印菱形图案
- 小白入门该如何学习PR视频剪辑软件及辅助工具的使用呢?
- 论文阅读笔记 | 分类网络——ParNet
- JAVA输出希腊字母表
- Allegro SigXplorer 等长设置方法-比较简单
- 官宣:华为云学院带你看AI
- PMP项目管理的就业前景
- 安全分析--追踪溯源的找人思路
- 【论文导读】- Cluster-driven Graph Federated Learning over Multiple Domains(聚类驱动的图联邦学习)
- BC3.1精简版win7/10下不兼容问题的解决
- layui弄一个好看的数据表格样式
- String.format()详解与遇到的问题(UnknownFormatConversionException)