在工作中,我们经常会有这样的需求,特别是在交易的时候,判断终端的交易流水号是否连续,即可判断终端上的数据是否有丢失。下面总结了如何处理这种情况,比较通用,红色部分就是实现的原理
--2.执行语句块
declare
isExists number ;
v_zdbh char(8);
v_begin char(10);
v_first number;
v_min number;
v_max number;
begin
delete from tmp_lost;
v_zdbh := '01011198';
v_begin := '2011/09/30';
v_first :=1;
v_min :=0;
v_max :=0;
for cur_lost in (select * from
(
select min(zdjyxlh) min ,max(zdjyxlh) max,rn from -- 得到连续的段的开始位置和结束位置,rn的值,
(
select a.*, rownum,(a.zdjyxlh-rownum) as rn from --在原始结果集上加上rownum列,通过排序字段-rownum值,能过这个值来判断中间是否连续
(
select t.* from ic_xfmxz t where zdbh=v_zdbh and to_char(jyrq,'yyyy/mm/dd')=v_begin order by zdjyxlh --先进行排序,得到原始的结果集。这里的排序字段为zdjyxlh
) a
) aa group by rn --进行分组,
)bb
order by bb.min) loop
v_max := cur_lost.min;
dbms_output.put_line(cur_lost.min||','||cur_lost.max||','||cur_lost.rn||','||v_min||','||v_max);
if v_first<>1 then
for cur_wrz in (select * from ic_wrzlsz t where t.zdbh =v_zdbh
and t.zdjyxlh>v_min and t.zdjyxlh<v_max
order by t.zdjyxlh ,t.jyrq desc ,t.jysj desc) loop
dbms_output.put_line('zdjyxlh='||cur_wrz.zdjyxlh);
select count(*) into isExists from tmp_lost tmp where tmp.zdjyxh = cur_wrz.zdjyxlh and tmp.zdbh=cur_wrz.zdbh;
if isExists =0 then
insert into tmp_lost values(cur_wrz.lsh,cur_wrz.zdbh,cur_wrz.zdjyxlh,cur_wrz.ickh,cur_wrz.icjyxh,cur_wrz.jyje,cur_wrz.icye,cur_wrz.jyrq,cur_wrz.jysj);
end if;
end loop;
else
v_first:=0;
end if;
v_min := cur_lost.max;
end loop;
commit;
EXCEPTION
when others then
dbms_output.put_line(sqlcode||'='||sqlerrm);
rollback;
end;
分享到:
相关推荐
is_number(oracle函数判断字段是否合法数字)
往数据库中添加数据时,字段值自动加1: 1、创建表 2、创建序列 3、创建触发器
完成Java编程过程中数据存储序号自增长。
oracel中判断字段是否为数字的函数,查找非法字符解决多表关联报错
Oracle添加字段的完整语句,oracle 添加字段时判断字段是否已经存在,sqlserver判断字段是否存在并添加
oracle unused字段后恢复出来 说明,本来,unused是为了快速drop字段用的,但是是没有used或者什么reused命令恢复出来的,常规的办法只能drop这个字段后再添加,但是还是有办法恢复字段以及以前的内容的【毕竟空间...
Oracle blob字段上传下载 Oracle blob字段上传下载Oracle blob字段上传下载 Oracle blob字段上传下载
Oracle LOB字段处理工具是一款简单的lob字段处理工具
Oracle使用 alter 增加 修改 删除 字段, 可以同时添加多个字段 创建 修改 添加表的约束
oracle某个字段多行记录转化为一行,oracle某个字段多行记录转化为一行。
oracle字段去重 以某一个字段去重 oracle字段去重 以某一个字段去重
JDBC读写Oracle的CLOB字段
若在程序中执行该语句则会报异常,这就需要我们在删除表前先判断该表是否存在,若存在则删除. DECLARE num NUMBER; BEGIN SELECT COUNT(1) INTO num FROM USER_TABLES WHERE TABLE_NAME = UPPER('tableName'); IF num...
Oracle数据库中,表中已存在数据字段修改该字段的长度,如有疑问可沟通联系,当积分自动提升到很高的时候欢迎联系,会把积分调低。
oracle查询blob字段照片(jpeg) 像素大小sql
oracle非数字合计,将字段中含有汉子的数据自动转换为 数字0
oracle触发器实现主键自动增长操作
oracle设置主外键即主键序列自动增长
在我们平常的开发中可能会遇到这样的问题,就是判断某一列是否全部由数字组成,我们都知道oracle并没有给我们提供这样一个现成的函数,那么根据我的经验我总结了两个行之有效的方法(列名:column,表名:table): ...
NULL 博文链接:https://panshaobinsb.iteye.com/blog/1772716