热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

oracle索引表下标使用VARCHAR2类型判断主叫号码

为了提高号段匹配速度,提高匹配效率,使用索引表下标VARCHR2类型匹配电话号是非常方便快捷的。下面是我工作中使用的方法,希望大家共同探讨。CREATEORREPLACEPROC

为了提高号段匹配速度,提高匹配效率,使用索引表下标VARCHR2类型匹配电话号是非常方便快捷的。下面是我工作中使用的方法,希望大家共同探讨。

CREATE OR REPLACE PROCEDURE PC_HAOR_DEAL_SECT IS ---------------------------------------------------------------------------------------------- -- Copyright(c) 2007 : 黑龙江省通信公司支撑共享中心.郝锐.版权所有 ---------------------------------------------------------------------------------------------- -- Program Name      : 去除相同地区重复号段0-9情况 ---------------------------------------------------------------------------------------------- -- This VerSion      : 1.10.00 -- Creator By        : HR    Time:2007/08/02 -- Modify by         :         Time: -- Modify by         :         Time: -- Last Modify by    : -- Last Modify cause : --                   : --                   : --******************************************************************************************-- /*TYPE RD IS RECORD (    TEL_SECT JFJS_HR_UNC_SECT.TEL_SECT%TYPE,    AREA_CODE JFJS_HR_UNC_SECT.AREA_CODE%TYPE    ); */ TYPE T_SECT IS TABLE OF NUMBER INDEX BY VARCHAR2(16); T_TAB T_SECT; --操作内存表

KEY INTEGER; V_BOUND VARCHAR2(16); V_L VARCHAR2(16); V_AREA_CODE NUMBER;

BEGIN      --提取号段到内存表    FOR RE IN (SELECT DISTINCT TEL_SECT,AREA_CODE               FROM JFJS_HR_UNC_SECT               ORDER BY TEL_SECT)    LOOP      T_TAB(RE.TEL_SECT):=RE.AREA_CODE;    END LOOP;

    --处理重复号段操作 处理有上级号段------------------------------------------    V_L:=T_TAB.FIRST;    WHILE V_L IS NOT NULL LOOP      IF T_TAB.EXISTS(SUBSTR(V_L,1,LENGTH(V_L)-1))      OR T_TAB.EXISTS(SUBSTR(V_L,1,LENGTH(V_L)-2))      OR T_TAB.EXISTS(SUBSTR(V_L,1,LENGTH(V_L)-3))      OR T_TAB.EXISTS(SUBSTR(V_L,1,LENGTH(V_L)-4))      OR T_TAB.EXISTS(SUBSTR(V_L,1,LENGTH(V_L)-5))      OR T_TAB.EXISTS(SUBSTR(V_L,1,LENGTH(V_L)-6))      THEN      --如果存在上一级号段则删除当前下一级的号段           T_TAB.DELETE(V_L);      END IF;      V_L:=T_TAB.NEXT(V_L);    end loop;

   --处理没有上级号段重复地址尾号段是0-9的情况--------------------------------- for h in 0..4 loop --处理添加缩位号段后重新满足重复号段的情况    V_L:=T_TAB.FIRST;    WHILE V_L IS NOT NULL LOOP     --保存area_code 值      V_AREA_CODE :=T_TAB(V_L);      --判断号段是否满足重复条件      KEY :=0;        FOR I IN 0..9 LOOP      BEGIN          IF (  T_TAB.EXISTS(SUBSTR(V_L,1,LENGTH(V_L)-1)||TO_CHAR(I)) )             AND             ( V_AREA_CODE=T_TAB(SUBSTR(V_L,1,LENGTH(V_L)-1)||TO_CHAR(I))  )          THEN          KEY :=KEY +1;          END IF;      END;      END LOOP;      --如果满足重复条件,全部删除      IF KEY =10 THEN         FOR J IN 0..9 LOOP         T_TAB.DELETE(SUBSTR(V_L,1,LENGTH(V_L)-1)||TO_CHAR(J)) ;         END LOOP;         --缩位追加         T_TAB(SUBSTR(V_L,1,LENGTH(V_L)-1)):=V_AREA_CODE ;      END IF;

   V_L:=T_TAB.NEXT(v_l);      END LOOP;    end loop;      --替换源表数据    DELETE  FROM tmp_haor ;    COMMIT;       V_BOUND:=T_TAB.FIRST;    WHILE V_BOUND IS NOT NULL LOOP      INSERT INTO tmp_haor(AREA_CODE,TEL_SECT)      VALUES(T_TAB(V_BOUND),V_BOUND);      COMMIT;      V_BOUND:=T_TAB.NEXT(V_BOUND);    END LOOP;    END ; /  


推荐阅读
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 开发笔记:select from具体执行相关知识介绍及案例分析
    本文由编程笔记小编整理,主要介绍了select from具体执行相关的知识,包括数据插入、查询最小rowID、查询每个重复名字的最小rowID、删除重复数据等操作,并提供了案例分析。希望对读者有一定的参考价值。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • 本文主要复习了数据库的一些知识点,包括环境变量设置、表之间的引用关系等。同时介绍了一些常用的数据库命令及其使用方法,如创建数据库、查看已存在的数据库、切换数据库、创建表等操作。通过本文的学习,可以加深对数据库的理解和应用能力。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
author-avatar
依心摇曳少校
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有