有時候會覺得系統訊息很討厭看到,或者是條件下好好的,
偏偏報表輸出除了表頭,其餘空空如也,甚至出現No-Data-Found…….
例如: 某個卡號從未刷過卡,Select 結果直接反應就是沒有任何資料列被選取
SQL> create table emp_cards
2 (card_no number,
3 emp_name varchar2(30));
塞兩筆資料
1* insert into emp_cards(card_no, emp_name) values (1001, 'Scott')
1* insert into emp_cards(card_no, emp_name) values (1002, 'Amy')
試跑所有資料,確認資料正確
SQL> select * from emp_cards;
CARD_NO EMP_NAME
--------- ------------------------------
1001 Scott
1002 Amy
試跑有問題的卡號
SQL> select *
2 from emp_cards
3 where card_no = 1003;
沒有任何資料列被選取
這個時候,就可以運用union來達到把這個異常給換掉的目的
例如:以下做法就可以把討厭的異常訊息給都換掉,變成你想看到的正常結果....
select a.card_no, max(a.emp_name) emp_name
from (select card_no, emp_name
from emp_cards
where card_no = 1003
union
select 1003 card_no, ' 無此卡號' emp_name
from dual) a
group by a.card_no
CARD_NO EMP_NAME
--------- ------------------------------
1003 無此卡號
換個存在的卡號試試看,結果是正常喔。
1 select a.card_no, max(a.emp_name) emp_name
2 from (select card_no, emp_name
3 from emp_cards
4 where card_no = 1002
5 union
6 select 1002 card_no, ' 無此卡號' emp_name
7 from dual) a
8* group by a.card_no
SQL> /
CARD_NO EMP_NAME
--------- ------------------------------
1002 Amy
所以成功的把本來會產生異常的,變成正常的"異常訊息"。
[開發技術組]全文閱讀
http://ithelp.ithome.com.tw/ironman6/player/yafuu168/dev/1
[鐵人人生組]全文閱讀
http://ithelp.ithome.com.tw/ironman6/player/yafuu168/life/1