在工作中,我们经常会有这样的需求,特别是在交易的时候,判断终端的交易流水号是否连续,即可判断终端上的数据是否有丢失。下面总结了如何处理这种情况,比较通用,红色部分就是实现的原理
--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;
分享到:
相关推荐
在插入数据时,自增长字段可由空值 '' 或 null 代替,如果 insert 语句中列出了所插入的字段,如 insert into list(name) values('aaa'), 则增长字段不用写。 Oracle 字段自增长机制可以简化开发者的工作,提高开发...
Oracle 数据库字段值自动加 1 Oracle 数据库中,字段值自动加 1 是一个常见的需求,特别是在数据插入时需要自动生成唯一标识符的情况下。下面将详细介绍如何实现 Oracle 数据库字段值自动加 1。 首先,需要创建一...
is_number(oracle函数判断字段是否合法数字)
oracel中判断字段是否为数字的函数,查找非法字符解决多表关联报错
在实际应用中,判断BLOB字段是否为空对于数据完整性检查、避免无效查询以及优化数据库性能等方面具有重要意义。例如,在上传文件到数据库前,确保数据不为空可以防止存储无用的空文件;在检索数据时,检查BLOB字段...
在Oracle数据库中,确保表中特定字段具有唯一性是数据完整性的重要方面。这可以通过创建唯一约束或唯一索引来实现。以下是对"Oracle数据库表建立字段唯一性方法"的详细解释: 1. **唯一约束(Unique Constraint)**...
若在程序中执行该语句则会报异常,这就需要我们在删除表前先判断该表是否存在,若存在则删除. DECLARE num NUMBER; BEGIN SELECT COUNT(1) INTO num FROM USER_TABLES WHERE TABLE_NAME = UPPER('tableName'); IF num...
修改字段通常包括改变字段的数据类型、默认值、是否允许为空等属性。语法如下: ```sql ALTER TABLE 表名 MODIFY (字段名 数据类型 [默认值] [NULL/NOT NULL]); ``` **示例**:修改`test1`表中的`name`字段,将其...
Oracle添加字段的完整语句,oracle 添加字段时判断字段是否已经存在,sqlserver判断字段是否存在并添加
oracle unused字段后恢复出来 说明,本来,unused是为了快速drop字段用的,但是是没有used或者什么reused命令恢复出来的,常规的办法只能drop这个字段后再添加,但是还是有办法恢复字段以及以前的内容的【毕竟空间...
Oracle数据库系统中,LOB(Large Object)字段是用来存储大量数据的类型,如图像、音频、视频或大型文本文件。在数据库操作中,LOB字段的处理往往比常规的行数据更为复杂,因为它涉及到大块的数据读取、写入和管理。...
在Oracle数据库管理中,有时我们需要判断某个字段值是否完全由数字构成。Oracle并没有提供一个直接的内置函数来完成这个任务,但我们可以利用一些其他函数的组合来实现这一目的。这里介绍两种有效的方法。 方法一:...
### 更改Oracle表中字段顺序的方法 在Oracle数据库管理中,有时我们可能需要对表中的字段顺序进行调整。然而,通常的做法是通过备份、删除原表并重建来达到这一目的,这种方法不仅耗时而且繁琐。幸运的是,经过一番...
Oracle数据库中,表中已存在数据字段修改该字段的长度,如有疑问可沟通联系,当积分自动提升到很高的时候欢迎联系,会把积分调低。
JDBC读写Oracle的CLOB字段
在Oracle数据库中,实现主键自动增长是一种常见的需求,尤其在设计高并发、大数据量的系统时,确保每个记录都有一个唯一且连续的标识符变得至关重要。本文将深入探讨如何利用Oracle触发器来实现这一功能,同时也会...
在Oracle数据库环境中,有时我们需要处理包含非数字字符的字段,并将其转换为数字进行计算或统计。根据提供的文件信息,本文将详细介绍如何实现“oracle非数字合计”,即将字段中含有汉字或其他非数字字符的数据自动...
Oracle 表字段或是视图字段添加备注方法 Oracle 是一个强大的关系数据库管理系统,提供了多种方式来添加备注信息到表字段或视图字段中。在本节中,我们将详细介绍如何使用 Oracle 的 Comment 机制来添加备注信息到...
在Oracle数据库中,Blob是一种用来存储二进制数据的数据类型,比如图像、音频或视频文件等。本篇文章将详细介绍如何通过SQL查询语句获取存储在Blob字段中的JPEG格式照片的像素大小。 ### 1. 了解Blob数据类型 在...
这段代码先创建了一个带有`prev_date`和`next_date`的CTE(公共表表达式),然后通过`CASE`语句判断连续性,计算连续天数。 4. **使用集合操作** 还可以通过集合操作如`MINUS`或`EXCEPT`找出连续日期的序列。这种...