`

Oracle判断字段的连续性,即判断自增长字段中间是否有缺失,断层

 
阅读更多

在工作中,我们经常会有这样的需求,特别是在交易的时候,判断终端的交易流水号是否连续,即可判断终端上的数据是否有丢失。下面总结了如何处理这种情况,比较通用,红色部分就是实现的原理

--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;

分享到:
评论

相关推荐

    oracle字段自增长

    在插入数据时,自增长字段可由空值 '' 或 null 代替,如果 insert 语句中列出了所插入的字段,如 insert into list(name) values('aaa'), 则增长字段不用写。 Oracle 字段自增长机制可以简化开发者的工作,提高开发...

    oracle数据库字段值自动加1

    Oracle 数据库字段值自动加 1 Oracle 数据库中,字段值自动加 1 是一个常见的需求,特别是在数据插入时需要自动生成唯一标识符的情况下。下面将详细介绍如何实现 Oracle 数据库字段值自动加 1。 首先,需要创建一...

    is_number(oracle函数判断字段是否合法数字).sql

    is_number(oracle函数判断字段是否合法数字)

    oracel中判断字段是否为数字的函数

    oracel中判断字段是否为数字的函数,查找非法字符解决多表关联报错

    判断blob字段是否为空

    在实际应用中,判断BLOB字段是否为空对于数据完整性检查、避免无效查询以及优化数据库性能等方面具有重要意义。例如,在上传文件到数据库前,确保数据不为空可以防止存储无用的空文件;在检索数据时,检查BLOB字段...

    Oracle数据库表建立字段唯一性的方法

    在Oracle数据库中,确保表中特定字段具有唯一性是数据完整性的重要方面。这可以通过创建唯一约束或唯一索引来实现。以下是对"Oracle数据库表建立字段唯一性方法"的详细解释: 1. **唯一约束(Unique Constraint)**...

    Oracle删除表、字段之前判断表、字段是否存在

    若在程序中执行该语句则会报异常,这就需要我们在删除表前先判断该表是否存在,若存在则删除. DECLARE num NUMBER; BEGIN SELECT COUNT(1) INTO num FROM USER_TABLES WHERE TABLE_NAME = UPPER('tableName'); IF num...

    Oracle 增加修改删除字段

    修改字段通常包括改变字段的数据类型、默认值、是否允许为空等属性。语法如下: ```sql ALTER TABLE 表名 MODIFY (字段名 数据类型 [默认值] [NULL/NOT NULL]); ``` **示例**:修改`test1`表中的`name`字段,将其...

    Oracle添加字段的sql语句源码下载

    Oracle添加字段的完整语句,oracle 添加字段时判断字段是否已经存在,sqlserver判断字段是否存在并添加

    oracle unused字段后恢复出来

    oracle unused字段后恢复出来 说明,本来,unused是为了快速drop字段用的,但是是没有used或者什么reused命令恢复出来的,常规的办法只能drop这个字段后再添加,但是还是有办法恢复字段以及以前的内容的【毕竟空间...

    Oracle LOB字段处理工具

    Oracle数据库系统中,LOB(Large Object)字段是用来存储大量数据的类型,如图像、音频、视频或大型文本文件。在数据库操作中,LOB字段的处理往往比常规的行数据更为复杂,因为它涉及到大块的数据读取、写入和管理。...

    Oracle中判断字段是否为数字

    在Oracle数据库管理中,有时我们需要判断某个字段值是否完全由数字构成。Oracle并没有提供一个直接的内置函数来完成这个任务,但我们可以利用一些其他函数的组合来实现这一目的。这里介绍两种有效的方法。 方法一:...

    更改Oracle表中字段的顺序的终极方法

    ### 更改Oracle表中字段顺序的方法 在Oracle数据库管理中,有时我们可能需要对表中的字段顺序进行调整。然而,通常的做法是通过备份、删除原表并重建来达到这一目的,这种方法不仅耗时而且繁琐。幸运的是,经过一番...

    Oracle 数据表修改字段长度

    Oracle数据库中,表中已存在数据字段修改该字段的长度,如有疑问可沟通联系,当积分自动提升到很高的时候欢迎联系,会把积分调低。

    jdbc读写Oracle的CLOB字段

    JDBC读写Oracle的CLOB字段

    oracle触发器实现主键自动增长

    在Oracle数据库中,实现主键自动增长是一种常见的需求,尤其在设计高并发、大数据量的系统时,确保每个记录都有一个唯一且连续的标识符变得至关重要。本文将深入探讨如何利用Oracle触发器来实现这一功能,同时也会...

    oracle非数字合计,将字段中含有汉子的数据自动转换为 数字0

    在Oracle数据库环境中,有时我们需要处理包含非数字字符的字段,并将其转换为数字进行计算或统计。根据提供的文件信息,本文将详细介绍如何实现“oracle非数字合计”,即将字段中含有汉字或其他非数字字符的数据自动...

    oracle表字段或是视图字段添加备注方法

    Oracle 表字段或是视图字段添加备注方法 Oracle 是一个强大的关系数据库管理系统,提供了多种方式来添加备注信息到表字段或视图字段中。在本节中,我们将详细介绍如何使用 Oracle 的 Comment 机制来添加备注信息到...

    oracle查询blob字段照片(jpeg) 像素大小sql

    在Oracle数据库中,Blob是一种用来存储二进制数据的数据类型,比如图像、音频或视频文件等。本篇文章将详细介绍如何通过SQL查询语句获取存储在Blob字段中的JPEG格式照片的像素大小。 ### 1. 了解Blob数据类型 在...

    Oracle计算连续天数,计算连续时间,Oracle连续天数统计

    这段代码先创建了一个带有`prev_date`和`next_date`的CTE(公共表表达式),然后通过`CASE`语句判断连续性,计算连续天数。 4. **使用集合操作** 还可以通过集合操作如`MINUS`或`EXCEPT`找出连续日期的序列。这种...

Global site tag (gtag.js) - Google Analytics