- 浏览: 295514 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
gwj879:
结果是因为磁盘满了。。呵呵~~
Encountered 1 errors during the transfer错误解决 -
gwj879:
这么多方法,都不管用啊!1:google 搜索发现,上传的时候 ...
Encountered 1 errors during the transfer错误解决 -
yuanqionlan:
Encountered 1 errors during the transfer错误解决 -
shiyongxin2010:
我服务器上有两个实例,FMPDB,FMPDB1,由于设置mem ...
oracle--ORA 838 Specified value of MEMORY_TARGET is too small, needs to be at le -
fish_bone:
呱唧呱唧
js中获取时间new Date()
解决一个上周很郁闷的问题:
项目中有一个需求,一个表 数据量很大,有几百万条吧,保守估计,呵呵。页面上填入 每组 要显示的个数,租用时间(以秒为单位),逻辑就是我先分组,然后循环 每组里根据填入的个数查询出相应的数据,这些数据要写入到xml里,然后更新。
只用java+sql,就是那种最普通的方式,测试之后发现查询+更新需要18分钟完成100000条记录的操作,这根本不能满足需求。
还是请教一下别人哈,得到的答案是 在Oracle里写存储过程,我测了一下,确实快了不少。呵呵,就用它了。
先看 存储过程怎么写吧!
思路就是先分组,然后根据分组 每组再查询出用户要求的个数,放到一个临时表里,然后更新这些数据,最后查询出临时表里的数据返回一个游标。(注:临时表的创建放在command window 里执行)
create or replace procedure updatePro(returndataCur out IPINFO_PACKAGE.curList,curTime in number,endTime in number,dateTime in number,num in number) is
authId number;
--声明变量
pro VARCHAR2(32);
ipInfoId number;
info_ip number;
maskLen number;
portStart number;
portEnd number;
direct number;
rownumber number;
str varchar2(300);
cnt int;
Cursor groupCur is select auth_id,property from ip_info group by property,auth_id;
Cursor curListCur is select id,ip,mask_len,port_start,port_end,dir,property,auth_id from (select t.*,rownum rn from (select id,ip,mask_len,port_start,port_end,dir,property,auth_id from ip_info ip_info where USABLE_TIME_START + dateTime < = endTime and USABLE_TIME_END + dateTime > = endTime and NEXT_USE_TIME < curTime and property=pro and auth_id=authId order by id desc) t where rownum < = num ) s where rn> 0;
begin
--赋值
authId:=0;
pro:='m';
ipInfoId:=0;
info_ip:=0;
maskLen:=0;
portStart:=0;
portEnd:=0;
direct:=0;
rownumber:=0;
cnt:=0;
str:='delete from RETURNDATA';
select count(*) into cnt from all_tables where table_name='RETURNDATA';
--if cnt!=0 then
--execute immediate str;
--end if;
--此处是游标嵌套
open groupCur;
loop
fetch groupCur into authId,pro;
exit when groupCur%notfound;
--dbms_output.put_line(authId||pro);
open curListCur;
loop
fetch curListCur into ipInfoId,info_ip,maskLen,portStart,portEnd,direct,pro,authId;
exit when curListCur%notfound;
dbms_output.put_line(ipInfoId);
insert into RETURNDATA values(ipInfoId,info_ip,maskLen,portStart,portEnd,direct,pro,authId);
update ip_info set last_use_time=curTime,next_use_time=endTime where id=ipInfoId;
end loop;
commit;
close curListCur;
end loop;
close groupCur;
open returndataCur for select * from RETURNDATA;
end updatePro;
hibernate里调用存储过程
public List findAllIpInfoList(Long curTime,Long tempNum,Long dateTime,Integer number) {
ResultSet rs=null;
Session ses = this.getHibernateTemplate().getSessionFactory().openSession();
List ipInfoList=new ArrayList();
try{
Connection conn = ses.connection();
conn.setAutoCommit(false);
String proc="{Call updatepro(?,?,?,?,?)}";
CallableStatement st = conn.prepareCall(proc);
st.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);//输出参数
st.setInt(2,Integer.valueOf(curTime.toString()));
st.setInt(3,Integer.valueOf(tempNum.toString()));
st.setInt(4,Integer.valueOf(dateTime.toString()));
st.setInt(5,number);
st.execute();
rs = (ResultSet) st.getObject(1);
while(rs.next())
{ IpInfo ipInfo=new IpInfo();
ipInfo.setIpinfoIpString(PublicClass.getJustIp(rs.getString(2)));
ipInfo.setMaskLin(rs.getInt(3));
ipInfo.setPortStart(rs.getInt(4));
ipInfo.setPortEnd(rs.getInt(5));
ipInfo.setDir(rs.getInt(6));
ipInfo.setProperty(rs.getString(7));
ipInfo.setAuthId(rs.getInt(8));
ipInfoList.add(ipInfo);
//System.out.println("<tr><td>" +rs.getLong(2)+"</td><td>"+ rs.getInt(3)+rs.getInt(4)+rs.getInt(5)+rs.getInt(6)+rs.getString(7)+rs.getInt(8)+"</td><td>");
}
conn.commit();
st.close();
conn.close();
ses.close();
}catch(Exception e){
e.printStackTrace();
}
return ipInfoList;
}
发表评论
-
定时任务 每个小时的15 45分的时候执行存储过程
2013-04-11 13:59 1041定时任务 每个小时的15 45分的时候执行存储过程 ... -
racle系统包——dbms_job用法(oracle定时任务)
2013-01-25 17:40 843http://www.tieguanyin168.com/?p ... -
oracle日期转化毫秒及毫秒转为日期
2012-08-24 15:31 1816在Java开发中,很多时候我们为了方便会直接使用long型来保 ... -
将一张表中查询的结果插入到另一张表中
2012-08-24 15:30 1178INSERT INTO Scms_sub_company(Na ... -
oracle 任务定时执行
2012-08-24 15:20 978oracle 任务定时执行 在 ... -
oracle里字段用的是date类型 如果java里想得到这里边的值要用to_char转一下
2012-06-04 11:13 989oracle里字段用的是date类型 如果java里想得到这里 ... -
org.hibernate.hql.ast.QuerySyntaxException:expection open")"
2012-04-01 18:48 795相当相当隐蔽的错误 org.hibernate.hql.ast ... -
ORA-22858问题详解
2012-03-09 18:06 12421近日工作中发现有一张表的字段类型建错了,本应是CLOB类型 ... -
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException MYSQL 区分大小写
2011-11-28 13:01 5248java连接 mysql数据库报这个错: com.mysql ... -
hibernate中的各主键
2011-11-26 18:49 768native标识符生成器依据数据库对自动生成标识符的支持能力来 ... -
applicationContext.xml配置hibernate的连接MYDQL数据库
2011-11-26 18:27 2330<?xml version="1.0" ... -
net.sf.json.JSONException: java.lang.NoSuchMethodException: Property 'delegate'
2011-10-31 16:45 9891今天在做修改数据的时候报了一个net.sf.json.JS ... -
222
2011-09-05 17:55 858oracle除法 select MOD(65,50) f ... -
111
2011-09-04 23:01 745http://blog.sina.com.cn/s/blog_ ... -
Oracle ORA-00257: archiver error. Connect internal only, until freed
2011-07-26 16:11 1196Oracle客户端连接报错: Oracle ORA-00257 ... -
Hibernate 关联映射
2011-06-10 15:16 938Hibernate 关联映射 单向 man ... -
oracle trunc() 的认识
2011-05-11 16:40 1011TRUNC函数为指定元素而截去的日期值 TRUNC(date ... -
如何将 pl/sql Developer 中查询的结果集导出到 Excel . txt . html . xml csv中?
2011-05-11 16:16 6580选中结果集,点击右键选 copy to excel 就可导出 ... -
Oracle中根据Date型转换成Java对应的long型毫秒数
2011-03-26 18:53 1936在Java开发中,很多时候我们为了方便会直接使用long型来保 ... -
oracle 常用语句
2011-03-26 18:42 14211.当前时间转成秒 s ...
相关推荐
本篇文章将深入探讨如何使用Hibernate的Query接口来调用Oracle的存储过程和函数,以及提供相关的示例代码和数据库文件。 首先,让我们了解什么是存储过程和函数。存储过程是预编译的SQL语句集合,可以接受参数、...
在hibernate中调用oracle中的存储过程的详细代码。可以借鉴使用,帮助学习。
总的来说,Hibernate调用Oracle函数涉及到了数据库设计、ORM框架的使用、原生SQL查询和结果映射等多个方面,熟练掌握这些技能对于开发高质量的企业级应用至关重要。希望这篇文章能帮助你更好地理解和应用这些知识。
本文将从 Oracle 存储过程的基础知识开始,逐步深入到 Oracle 存储过程的高级应用,包括 Hibernate 调用 Oracle 存储过程和 Java 调用 Oracle 存储过程的方法。 Oracle 存储过程基础知识 Oracle 存储过程是 Oracle...
调用Oracle存储过程并处理返回的游标(Cursor)在Java中通常涉及以下步骤: 1. **建立数据库连接**:使用JDBC(Java Database Connectivity)驱动,通过`DriverManager.getConnection()`方法建立到Oracle数据库的...
在解决问题的过程中,我们发现了 Spring Boot 项目中调用 Oracle 存储过程时遇到的问题,即连接池数量默认为 10,导致每次访问数据库后连接未释放。我们可以通过手动关闭 Session 来释放连接,或者使用第一种方式来...
- **Hibernate调用Oracle存储过程**:Hibernate框架支持调用存储过程,通过映射配置文件或注解指定存储过程的调用方式。 - **用Java调用Oracle存储过程**:使用`CallableStatement`接口来调用存储过程,设置输入...
5. **调用Oracle存储过程**:通过Java或Hibernate等工具调用Oracle存储过程,需要注意参数传递和结果集的处理。 #### 动态SQL与存储过程 在存储过程中执行动态SQL,有两种主要方式: 1. **本地动态SQL**:适用于...
- **Java调用Oracle存储过程**:使用Hibernate框架或纯Java代码可以实现调用Oracle存储过程的功能。 - 无返回值的存储过程调用较为简单。 - 有返回值的存储过程需要特别处理返回值。 - 返回列表的存储过程需通过...
调用 Oracle 存储过程需要使用 Hibernate 的存储过程调用机制。 七、 用 Java 调用 Oracle 存储过程总结 用 Java 调用 Oracle 存储过程可以使用 JDBC 或 Oracle 的java驱动程序。下面是用 Java 调用 Oracle 存储...
Hibernate3通过Query对象的createSQLQuery方法提供对存储过程的调用支持。它允许我们编写原生的SQL语句,包括调用存储过程,然后映射结果到Java对象。 三、具体步骤 1. **创建SQL查询** 使用Session的...
#### 八、Java调用Oracle存储过程 - **无返回值的存储过程**: 可以直接调用存储过程,无需关注返回值。 - **有返回值的存储过程**: - 非列表返回: 通常使用简单的数据类型作为返回值。 - 列表返回: 使用游标或...
它支持大规模数据存储,并且有丰富的功能,适合企业级应用。 三、Hibernate与Oracle的集成 1. 配置Hibernate - `hibernate.cfg.xml`配置文件:在其中设置Oracle数据库的相关参数,包括JDBC驱动类、URL、用户名和...
总结来说,通过Hibernate调用Oracle数据库的存储过程涉及配置数据库连接、定义Java类和接口、注解指定存储过程,以及在服务类中执行调用。这个过程既体现了Hibernate的灵活性,也展示了其在复杂数据库操作中的实用性...
#### 三、Hibernate调用存储过程的方法 在Hibernate中调用存储过程通常有两种方式:通过`Query`接口或使用`StoredProcedureQuery`。这里我们主要介绍使用`StoredProcedureQuery`的方式,因为这种方式更适合处理复杂...
总之,Hibernate不仅支持简单的ORM操作,还提供了调用存储过程和定义命名SQL查询的能力,使得开发者可以灵活地处理各种数据库交互需求,提高代码的灵活性和可维护性。在实际开发中,理解并熟练掌握这些特性,将有助...
6. 通过Hibernate调用Oracle存储过程,需要配置和编写映射元数据,以便ORM框架能够正确地调用和处理返回值。 7. 使用Java调用Oracle存储过程分为三种情况:无返回值的过程、有单个返回值的过程和返回列表的过程。 *...
4. **Hibernate调用Oracle存储过程** Hibernate作为Java持久层框架,可通过`Session.createSQLQuery()`或`StoredProcedureQuery`来调用存储过程。 - 无返回值的存储过程:直接执行不获取结果。 - 有返回值的存储...