`
deejay
  • 浏览: 145361 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

oracle 检测表字段区别

 
阅读更多
DECLARE

  V_COUNT NUMBER;

  V_SQL VARCHAR2(1000);

BEGIN

  --drop database link LINK_SRC;

  --create database link LINK_SRC connect to xzgl identified by "xzgl" using '10.114.72.168/orclrep';

  --drop database link LINK_TARGET;

  --create database link LINK_TARGET connect to xzgl identified by "XZgl123456" using '10.36.10.105/scshdb';

  ---------------初始化结果表部分--------------------------------------------------------------

  SELECT COUNT(*) INTO V_COUNT FROM USER_TABLES WHERE TABLE_NAME='DIFFERENCE';

  IF V_COUNT>0 THEN--已经存在差异结果表

    V_SQL := 'TRUNCATE TABLE DIFFERENCE';

  ELSE--未存在

    V_SQL := 'CREATE TABLE DIFFERENCE(DIFF_TYPE VARCHAR2(20),MARK VARCHAR(2),DIFF_VALUE VARCHAR2(200),

      SRC_FIELD_TYPE VARCHAR2(50),TARGET_FIELD_TYPE VARCHAR2(50))';

  END IF;

  EXECUTE IMMEDIATE(V_SQL);

  ------------------------------------------------------------------------------------------------

  --------------开始交叉比较,将数据插入以上定义的表中----------------

  --①源比目标多的表

  FOR T IN(SELECT TABLE_NAME FROM USER_TABLES@link_src WHERE TABLE_NAME NOT LIKE 'BIN$%') LOOP

    SELECT COUNT(*) INTO V_COUNT FROM USER_TABLES@link_target WHERE TABLE_NAME=T.TABLE_NAME;

    IF V_COUNT=0 THEN

      V_SQL := 'INSERT INTO DIFFERENCE VALUES(''表'',''+'','''||T.TABLE_NAME||''',NULL,NULL)';

      EXECUTE IMMEDIATE(V_SQL);

    END IF;

  END LOOP;

  --②源比目标少的表

  FOR T IN(SELECT TABLE_NAME FROM USER_TABLES@link_target WHERE TABLE_NAME NOT LIKE 'BIN$%') LOOP

    SELECT COUNT(*) INTO V_COUNT FROM USER_TABLES@link_src WHERE TABLE_NAME=T.TABLE_NAME;

    IF V_COUNT=0 THEN

      V_SQL := 'INSERT INTO DIFFERENCE VALUES(''表'',''-'','''||T.TABLE_NAME||''',NULL,NULL)';

      EXECUTE IMMEDIATE(V_SQL);

    END IF;

  END LOOP;

  --③源比目标多的字段

  FOR T IN(SELECT TABLE_NAME,COLUMN_NAME FROM USER_TAB_COLUMNS@link_src WHERE TABLE_NAME NOT LIKE 'BIN$%') LOOP

    SELECT COUNT(*) INTO V_COUNT FROM USER_TAB_COLUMNS@link_target WHERE TABLE_NAME=T.TABLE_NAME

      AND COLUMN_NAME=T.COLUMN_NAME;

    IF V_COUNT=0 THEN

      V_SQL := 'INSERT INTO DIFFERENCE VALUES(''字段'',''+'','''||T.TABLE_NAME||'->'||T.COLUMN_NAME||''',NULL,NULL)';

      EXECUTE IMMEDIATE(V_SQL);

    END IF;

  END LOOP;

  --④源比目标少的字段

  FOR T IN(SELECT TABLE_NAME,COLUMN_NAME FROM USER_TAB_COLUMNS@link_target WHERE TABLE_NAME NOT LIKE 'BIN$%') LOOP

    SELECT COUNT(*) INTO V_COUNT FROM USER_TAB_COLUMNS@link_src WHERE TABLE_NAME=T.TABLE_NAME

      AND COLUMN_NAME=T.COLUMN_NAME;

    IF V_COUNT=0 THEN

      V_SQL := 'INSERT INTO DIFFERENCE VALUES(''字段'',''-'','''||T.TABLE_NAME||'->'||T.COLUMN_NAME||''',NULL,NULL)';

      EXECUTE IMMEDIATE(V_SQL);

    END IF;

  END LOOP;

  --⑤源和目标字段相同但数据类型不同

  FOR T IN(SELECT TABLE_NAME,COLUMN_NAME,DATA_TYPE FROM USER_TAB_COLUMNS@link_src WHERE TABLE_NAME NOT LIKE 'BIN$%') LOOP

    SELECT COUNT(*) INTO V_COUNT FROM USER_TAB_COLUMNS@link_target WHERE TABLE_NAME=T.TABLE_NAME

      AND COLUMN_NAME=T.COLUMN_NAME AND DATA_TYPE<>T.DATA_TYPE ;

    IF V_COUNT>0 THEN

      V_SQL := 'INSERT INTO DIFFERENCE VALUES(''数据类型'',''<>'','''||T.TABLE_NAME||'->'||T.COLUMN_NAME||''',NULL,NULL)';

      EXECUTE IMMEDIATE(V_SQL);

    END IF;

  END LOOP;

END;      
分享到:
评论

相关推荐

    Oracle中如何用SQL检测字段是否包括中文字符

    有一个同事的数据迁移程序有个问题,没有考虑中文编码字符,由于迁移的表有几千万数据,但是有中文的记录集很少,问我能否找出有中文内容的记录数。首先我想到的是采用检测每个字节ASCII的方式,这样的话需要写一个...

    oracle查询表碎片

    本文将详细介绍如何通过SQL查询来检测Oracle表的碎片情况,并对给出的SQL查询语句进行深入解析。 #### 一、Oracle表碎片概念 在Oracle数据库中,随着数据的增删改操作频繁进行,表中的数据块(Blocks)可能会变得...

    ORACLE数据库字段生成扫描件

    1. **字段统计**:工具可能能遍历指定的Oracle数据库表,统计每个字段的NULL值数量、非NULL值数量、唯一值数量等信息。 2. **数据扫描**:可能包含了对字段数据的扫描功能,例如检测无效数据、重复数据或者不符合...

    基于oracle数据库的生产和测试数据库表结构对比工具

    2. 差异检测:通过比较生产库和测试库的表结构,找出字段、约束、索引等方面的差异。 3. 可视化展示:对比结果通常会以清晰的图形或列表形式呈现,方便用户直观了解差异。 4. 报告生成:工具能生成详细的比较报告,...

    Oracle中比对2张表之间数据是否一致的几种方法

    此包提供了非常便捷的方式来检测两表之间的差异。 ##### 实现步骤 1. **创建测试表**: 首先,在源端创建一个包含主键或唯一非空索引的测试表。例如: ```sql CREATE TABLE test1 (t1 NUMBER PRIMARY KEY, t2...

    Oracle删除字段中的空格、回车及指定字符的实例代码

    在Oracle数据库管理中,有时我们需要清理数据字段,去除不必要的空格、回车或其他特定字符。这个过程通常是为了数据标准化、提高查询效率或确保数据的一致性。本文将详细讲解如何使用Oracle SQL语句来实现这一目标,...

    数据库字段及表是否发生变化

    总的来说,数据库字段和表的变更管理是一个复杂的过程,涉及到版本控制、变更检测、文档维护、测试等多个环节。正确处理这些变化可以确保系统的稳定性和数据的一致性,减少因数据库不匹配引发的问题。因此,掌握这些...

    sqlldr导入带有自动增加的数据

    在Oracle数据库管理中,SQL*Loader(简称sqlldr)是一个非常强大的工具,用于将外部数据文件中的数据批量加载到Oracle数据库表中。当涉及到处理带有自动增加字段的表时,SQL*Loader提供了一些灵活的方法来确保数据的...

    oracle获取当前用户表、字段等详细信息SQL

    8. **其他可能感兴趣的文章**: 提到的其他文章涉及到Oracle中的数字字段检测、MyBatis动态SQL、Oracle BLOB类型字段的处理、获取表信息和字段注释、创建自增ID字段、以及处理字段长度超限和清除特殊字符的问题,这些...

    oracle 声明游标(不具备字段)规则应用

    在某些情况下,我们可能需要声明一个包含某些表中不存在的字段的游标,这是通过在查询中联接其他表来引入额外字段的一种策略。这种做法有助于在处理多个表的数据时创建一个统一的数据结构,以满足特定的需求。 在...

    oracle 锁及并发性

    在Oracle数据库中,父表子表之间的关系可以通过外键约束实现。当涉及到父表和子表的事务处理时,锁的概念尤为重要。 **案例1**: 在父表中插入一个主键,并在另一个会话中尝试向子表插入对应的外键值。此时,如果父...

    Excel转Oracle

    4. 数据映射:如果Excel和Oracle表的字段不完全匹配,需要进行数据映射。例如,某些字段可能需要转换或重命名以适应Oracle表结构。 5. 错误处理与验证:导入过程中可能会遇到各种问题,如数据类型不匹配、违反完整...

    OraLoader--用sqlldr的Oracle库表数据装载工具

    1. **无需编写控制文件**:OraLoader省去了手动创建和编辑控制文件的步骤,用户只需选择源文件、目标表以及相关的映射规则,工具会自动生成必要的配置,极大地节省了时间和精力。 2. **图形化界面**:OraLoader采用...

    oracle 查询重复数据

    - **子查询**: `(select peopleid from people group by peopleid having count(peopleid) &gt; 1)` 这部分首先从`people`表中选择`peopleid`字段,然后使用`GROUP BY`对`peopleid`进行分组,计算每组的`peopleid`数量...

    Oracle中SQL语句执行效率的查找与解决

    - **全表扫描**:当查询条件不能有效利用索引时,Oracle可能会选择全表扫描。这种情况下,增加或调整索引策略可能是提高性能的有效手段。 - **索引扫描**:合理利用索引可以显著减少数据访问量。确保查询条件能够...

    通过xlrd读取excel生成oracle的建表语句

    例如,Excel的第一行通常包含列名,我们可以将其作为表的字段名,而后续行则代表数据,可以用来推断数据类型。Python代码可以通过遍历所有单元格来实现这一目标: ```python import xlrd workbook = xlrd.open_...

    Oracle递归树形结构查询功能

    在实际应用中,例如组织结构的展示,我们可以创建一个包含部门信息的表`SYS_DEPT`,其中`dept_id`为主键,`par_dept_id`表示父级部门ID,以此建立层级关系。通过递归查询,我们可以轻松地获取任意部门及其所有子部门...

    ORACLE存储过程判断非法字符

    在创建或更新表、插入数据、更新数据或执行其他数据库操作时,我们有时需要确保输入的数据不包含任何非法或特殊字符,以避免引发错误或破坏数据的完整性。本话题将深入探讨如何在Oracle存储过程中检查和处理非法字符...

    excel导入数据到oracle工具

    2. **字段映射**:将Excel列与Oracle表的字段进行对应,确保数据类型匹配。 3. **数据转换**:工具可能支持对数据进行简单的转换,如日期格式转换、数值精度调整等。 4. **错误处理**:在导入过程中,工具会检测并...

    OracleToMysql转换器

    2. **表结构分析**:OracleToMysql工具会自动检测Oracle数据库中的表结构,包括字段名、字段类型、主键、外键、索引等信息,并生成对应的Mysql表结构。 3. **数据迁移**:在分析完表结构后,工具将开始迁移数据。它...

Global site tag (gtag.js) - Google Analytics