现有两个实例orcl_1和orcl_2,在这两个实例下都有data_dm这个用户,两个用户下存的都是代码表,所有的表都只有两个字段:ID,NAME,但是这两个用户下的代码表有相同的有不同的,现在要比较相同的那些表里面的数据是否相同,要把所有不同的数据全部显示出来,应该怎么写SQL,求大神帮帮忙,万分感谢

解决方案 »

  1.   

    不同实例下的用户访问需要建立一个dblink。
    create public database link mydblink connect to  data_dm  IDENTIFIED BY 密码
    using '
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = ip)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SID = data_dm)
        )
      )';
    然后,
    select * from dmb b3,data_dm.dmb@mydblink  b4 where b3.id!=b4.id;
      

  2.   

    我的DBlink已经建好了,现在要查的是在相同的表里有哪些值不一样,并且记录下来表名及器差异数据啊
      

  3.   

    不知道我理解的对不对,个人认为你这个需求类似数据盘点给你个思路
    问题1:取出所有表进行比较(可加入一定过滤条件)
    问题2:保存不同的记录明细数据
              (这里比较不同:一种理解知道都有id比较id的不同,一种是整条数据不同比较整条数据——为了盘点割接原因造成的数据遗漏等)1.用游标取出用户下的所有表名称 
    select * from user_tables where table_name = '用户名' 做为 一层循环2.取游标的表名称进行拼接取差异记录,插入到同结构  表名称+‘_bak’表中
    类似如下:
    /*逻辑并非真正SQL*/
    create table t1_bak as
    (select id from t1
            minus
            select id from t1@my_dblink) /*t1有,t1@my_dblink没有的记录*/
    union
    (select id from t1@my_dblink
            minus
            select id from t1) /*t1没有,t1@my_dblink有的记录*/
      

  4.   

    在这里给楼主个思路,使用union查询两表,然后对全部结果做去重