iT邦幫忙

2

十四、偷桃換李(Oracle SQL 2013/09/29)

有時候會覺得系統訊息很討厭看到,或者是條件下好好的,
偏偏報表輸出除了表頭,其餘空空如也,甚至出現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


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言