Chinaunix首页 | 论坛 | 博客
  • 博客访问: 409913
  • 博文数量: 66
  • 博客积分: 1416
  • 博客等级: 上尉
  • 技术积分: 922
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-16 10:37
个人简介

高級Oracle DBA,善長Linux系統維運以及Oracle數據庫管理,開發,調優. 具有多年PL/SQL開發經驗.

文章分类

全部博文(66)

文章存档

2015年(9)

2014年(4)

2013年(5)

2010年(1)

2009年(3)

2008年(6)

2007年(30)

2006年(8)

我的朋友

分类: Oracle

2015-04-28 15:24:22

   在erp系統中, 當使用者輸入一筆單據, 經常會需要處理到很多不同的Table.
  如一筆收貨數據,會回饋採購檔已收貨量,入收貨檔,入庫存檔,庫存累計檔.等等.

各個帳目間的數據是否一致?
   1.用量檔中已採購量總量和多次採購累計,
   2.已同一採購單的多次收貨量和該單的已收量.
   3.當日收貨和當日庫存量是否一致.
   4.收貨量和付款量數據
   5.出庫量和派工量.
   6.是否有程序bug,資料寫入部份寫入錯誤.
   ......

   可用匯總比較兩邊數據是否一致作為一種校驗手段.
   這時候用left join或right join就不合適了, 可能會存在左邊有,右邊沒有, 或左邊沒有右邊有的情況.
   需要用到full outer join 來關聯.

場景1. 庫存檔的主檔和出入庫明細按料號匯總比校.
有差異就表示數據出現問了.需要請赶緊分析問題,修正bug, 調整數據.

点击(此处)折叠或打开

  1. with aa as (
  2. SELECT fact_no, SUBSTR(check_date,1,6) "YYMM", mat_no,
  3.            NVL(SUM(check_qty),0) + NVL(SUM(overtop_qty),0) in_qty,
  4.            NVL(SUM(shoot_qty),0) shoot_qty
  5.     FROM y3_matkinm
  6.     WHERE check_date >=to_char(sysdate-7,'YYYYMM')
  7.     GROUP BY fact_no, SUBSTR(check_date,1,6), mat_no
  8.   ) ,
  9. bb AS (
  10.     SELECT fact_no, yymm, mat_no,
  11.            SUM(NVL(in_stock,0)) in_stock,
  12.            SUM(NVL(out_stock,0)) out_stock
  13.     FROM y3_ymkstock
  14.     WHERE yymm >=to_char(sysdate-7,'YYYYMM')
  15.     GROUP BY fact_no, yymm, mat_no
  16. )

  17. SELECT yymm, fact_no, mat_no,
  18.         aa.in_qty, bb.in_stock, NVL(aa.in_qty,0) - NVL(bb.in_stock,0) in_cy,
  19.         aa.shoot_qty, bb.out_stock, NVL(aa.shoot_qty,0) - NVL(bb.out_stock,0) out_cy
  20.     FROM aa
  21.     FULL OUTER JOIN bb
  22.     USING ( fact_no, yymm, mat_no )
  23.  WHERE ( NVL(aa.in_qty, 0) <> NVL(bb.in_stock,0) OR NVL(aa.shoot_qty, 0) <> NVL(bb.out_stock,0))

阿飛
2015/04/29

阅读(2640) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~