查询数据库数据连续性问题---存储过程解决
2011-10-24 14:09
555 查看
--切记一定要用jdbc查询 ,不能用hibernate查询,不然临时表不会起临时表的作用,应为一般hibernater用到了缓存。
--要查询的表
create table test(
ids number(5),
names varchar2(50),
nums number(5)
);
--临时表
create global temporary table tempComtinuity
(
id number(5)
)on commit preserve rows;
--测试脚本
insert into test values(1,'张山',1);
insert into test values(2,'sss',2);
insert into test values(3,'李四',3);
insert into test values(4,'王武',5);
insert into test values(5,'赵六',6);
insert into test values(6,'aaa',8);
insert into test values(7,'hui',9);
insert into test values(8,'chen',18);
insert into test values(9,'ivan',16);
insert into test values(11,'kkk',17);
insert into test values(12,'yyy',14);
select * from tempComtinuity;
--创建存储过程 mycursor out SYS_REFCURSOR 输出参数游标
create or replace procedure testContinuity(sizes in number,mycursor out SYS_REFCURSOR)is
minnum number ;--最小值
maxnum number;--最大值
ns number:=0; --记录值
temp number:=0; --是否存在变量
begin
--获取最大值与最小值
begin
--获取最大与最小值
select min(nums) into minnum from test;
select max(nums) into maxnum from test;
end ;
--循环计算
while (minnum<=maxnum)
Loop
--获取是否存在记录,并判断
select count(*) into temp from test where nums =minnum ;
begin
if temp>0 then
begin
minnum :=minnum+1; --最小值+1
ns :=ns+1; --记录+1
if minnum>maxnum and ns>=sizes then --如果最小值超过最大值 并且记录ns大于要连续的参数sizes时 记录该连续的id
insert into tempComtinuity (select ids from test where nums between minnum-ns and minnum);
end if;
end;
else
if ns>=sizes then --记录ns大于要连续的参数sizes时 记录该连续的id
begin
insert into tempComtinuity (select ids from test where nums between minnum-ns and minnum);
minnum:=minnum+1;
ns:=0;--将记录数据归0 使得判断连续性从新开始
end;
else
minnum:=minnum+1;
ns:=0;--将记录数据归0 使得判断连续性从新开始
end if;
end if;
end;
end loop;
--返回游标值
open mycursor for select * from test where ids in (select id from tempComtinuity) order by nums;
end testContinuity;
--要查询的表
create table test(
ids number(5),
names varchar2(50),
nums number(5)
);
--临时表
create global temporary table tempComtinuity
(
id number(5)
)on commit preserve rows;
--测试脚本
insert into test values(1,'张山',1);
insert into test values(2,'sss',2);
insert into test values(3,'李四',3);
insert into test values(4,'王武',5);
insert into test values(5,'赵六',6);
insert into test values(6,'aaa',8);
insert into test values(7,'hui',9);
insert into test values(8,'chen',18);
insert into test values(9,'ivan',16);
insert into test values(11,'kkk',17);
insert into test values(12,'yyy',14);
select * from tempComtinuity;
--创建存储过程 mycursor out SYS_REFCURSOR 输出参数游标
create or replace procedure testContinuity(sizes in number,mycursor out SYS_REFCURSOR)is
minnum number ;--最小值
maxnum number;--最大值
ns number:=0; --记录值
temp number:=0; --是否存在变量
begin
--获取最大值与最小值
begin
--获取最大与最小值
select min(nums) into minnum from test;
select max(nums) into maxnum from test;
end ;
--循环计算
while (minnum<=maxnum)
Loop
--获取是否存在记录,并判断
select count(*) into temp from test where nums =minnum ;
begin
if temp>0 then
begin
minnum :=minnum+1; --最小值+1
ns :=ns+1; --记录+1
if minnum>maxnum and ns>=sizes then --如果最小值超过最大值 并且记录ns大于要连续的参数sizes时 记录该连续的id
insert into tempComtinuity (select ids from test where nums between minnum-ns and minnum);
end if;
end;
else
if ns>=sizes then --记录ns大于要连续的参数sizes时 记录该连续的id
begin
insert into tempComtinuity (select ids from test where nums between minnum-ns and minnum);
minnum:=minnum+1;
ns:=0;--将记录数据归0 使得判断连续性从新开始
end;
else
minnum:=minnum+1;
ns:=0;--将记录数据归0 使得判断连续性从新开始
end if;
end if;
end;
end loop;
--返回游标值
open mycursor for select * from test where ids in (select id from tempComtinuity) order by nums;
end testContinuity;
相关文章推荐
- 总结数据库查询软件的开发和问题解决过程
- 程序调用查询数据存储过程的问题
- 抛砖引玉:使用二进制位操作,解决铁道部火车票的数据查询和存储问题,超轻量级的解决方案
- 多表查询分页存储过程,解决了第二页不显示的问题
- 解决数据库存储和查询中的乱码问题
- SQLSERVER 占了500多M内存,原来的程序无法一次查询出50多W数据了,记录下这个问题的解决过程。
- 多表查询分页存储过程,解决了第二页不显示的问题
- 网页数据存储mysql数据库过程问题及解决
- 数据库存储过程多用户同时冲突问题解决构思
- 运用ORACLE的OO4O类库函数解决调用存储过程向远程数据库上传超过32K图片失败的问题
- 第16天(就业班) 数据约束、数据库设计、关联查询、存储过程、权限和备份
- php在执行mysql存储过程后执行其他数据库操作问题解决方法
- Hibernate4 将 Entity 保存不到数据库 但可以查询数据问题解决
- 解决:hibernate查询过多时与数据库连接断开或无法再查询到数据问题。
- 将java的集合转换为数据库集合类型 解决weblogic调用存储过程的时候,返回值乱码问题
- 数据库查询速度极慢【个人工作问题解决过程记录】
- 解决问题:Oracle存储过程执行成功,但数据没有变化
- pb11 -- PB12 查询数据时死锁问题解决办法<转>
- 【MySQL】查询前7天的数据统计(解决日期不连续问题)
- 关于sql存储过程在IDE或数据库中执行报错的解决办法