1、Oracle中如何读取未提交的数据,如果不能,怎么判断一个表数据量是不是在变化?
    如在db2 中可以使用with ur 读取未提交的数据,这样我采用select count(*) from t with ur 就能判断对一个表的数据量的变化了。2、3个表关联,第一种方法,和第二种方法的优缺点是什么的呢
SELECT count(1) FROM (select nvl(c.tcpg_bil_type_id, 'TCPG_0000') , a.prd_inst_id,SUM( a.charge)
        from eda.tb_b_ft_bs_bil_item_201105 partition(latn_551) a INNER JOIN 
             eda.tb_b_mid_acs_prd_inst_mon_551 b
       ON  a.prd_inst_id = b.prd_inst_id 
left join eda.tb_b_dim_acct_item_acs c
 on a.acct_item_type_id = c.acct_item_type_id  AND   c.USE_TYPE_ID = 2
group by a.prd_inst_id,nvl(c.tcpg_bil_type_id, 'TCPG_0000'));
--对比
SELECT COUNT(1) FROM (
select 
       a.prd_inst_id,
       551 latn_id,
       nvl(b.tcpg_bil_type_id, 'TCPG_0000') tcpg_bil_type_id,
       sum(charge) charge
from (select a.acct_item_type_id, a.prd_inst_id, a.charge
        from eda.tb_b_ft_bs_bil_item_201105 partition(latn_551) a,
              eda.tb_b_mid_acs_prd_inst_mon_551 b
       where a.prd_inst_id = b.prd_inst_id) a
left join eda.tb_b_dim_acct_item_acs b
 on a.acct_item_type_id = b.acct_item_type_id  AND B.USE_TYPE_ID = 2
group by a.prd_inst_id,nvl(b.tcpg_bil_type_id, 'TCPG_0000'))
3、最近有一个表需要换一种方法加工,怎么比较2个表的数据量
    目前是采用intersect和minus的方法,但是上诉方法只能找出数据,如果比较出2个表加工后(含主键),是哪些字段不一样了?

解决方案 »

  1.   

    1、未提交的数据为脏数据,oracle不是允许脏读,其它会话是不能看到当前会话的数据的。未提交的数据只有当前会话可能看到。
    2、没有什么区别。
    3、如果主键都不一样的,那你要比较两条件记录,凭什么比较那个列不一样?
    如果不键不变,那么根据主键两表连接比较相应的列值就行了。