• <ul id="mayc0"></ul>
    <ul id="mayc0"><center id="mayc0"></center></ul>
    <strike id="mayc0"><input id="mayc0"></input></strike>
    <ul id="mayc0"></ul>
  • 始創于2000年 股票代碼:831685
    咨詢熱線:0371-60135900 注冊有禮 登錄
    • 掛牌上市企業
    • 60秒人工響應
    • 99.99%連通率
    • 7*24h人工
    • 故障100倍補償
    您的位置: 網站首頁 > 幫助中心>文章內容

    Oracle數據庫中COALESCE函數使用詳解

    發布時間:  2012/9/8 16:37:10

    數據庫應用軟件很多時候將多重的、相關的實體信息保存在同一個表格中。例如,購買的零件和本地生產的零件都是零件,經理和工人都是員工,盡管多重的實體類型在數據存儲上略有不同,但是它們有太多的相同之處,因此通常使用一個表格而不是兩個。

      處理這樣的表格通常意味著對每一行進行條件測試來檢查哪個實體類型正在被處理,然后返回每種類型的不同結果集。CASE語句可以用來完成這一工作。
    -
     

      從Oracle 9i版開始,COALESCE函數在很多情況下就成為替代CASE語句的一條捷徑,COALESCE的格式如下:

    QUOTE:
    COALESCE (expression_1, expression_2, ...,expression_n)


      列表中第一個非空的表達式是函數的返回值,如果所有的表達式都是空值,最終將返回一個空值。

      使用COALESCE的秘密在于大部分包含空值的表達式最終將返回空值(連接操作符“||”是一個值得注意的例外)。例如,空值加任何值都是空值,空值乘任何值也都是空值,依此類推。

      這樣您就可以構建一系列表達式,每個表達式的結果是空值或非空,這就像一個CASE語句,表達式按照順序進行測試,第一個滿足條件的值就確定了結果。

      列表A展示了名為PARTS的表格的一部分,該表格存儲了購買的零件數據和生產的零件數據,如果是購買的零件,那么part_type列的值為‘P’,如果是本地生產或組裝的則是‘B’;此外,對于購買的零件,purchase_cost 列會顯示購買成本,而本地生產的零件則是空值;而且,本地生產的零件還有material_qty和material_cost兩列的信息,對于購買的零件則是空值。

    QUOTE:
    SQL> desc parts
    Name Null? Type
    PART_ID NOT NULL NUMBER(6)
    PART_TYPE NOT NULL CHAR(1)

    (other columns)

    PURCHASE_COST NUMBER(8,2)
    MATERIAL_COST NUMBER(8,2)
    MATERIAL_QTY NUMBER(6)
    LAST_UPDATED TIMESTAMP(6)
    UPDATED_BY VARCHAR2(30)


      列表A:
      您可以使用一個CASE語句來測試part_type列的值并返回either purchase_cost和material_qty列與material_cost列的乘積;不過COALESCE可以用一行語句解決這個問題:

    QUOTE:
    COALESCE(purchase_cost, material_qty * material_cost)


      如果數據行中存儲的是一個購買的零件,那么purchase_cost就不是空值,將返回purchase_cost的值;然而,對于本地生產的零件,purchase_cost是空值,COALESCE會忽略它,然后將material_qty和material_cost相乘,并將乘積作為結果返回。

    QUOTE:
    SELECT part_id "Part", part_type "Type",
    COALESCE(purchase_cost, material_qty * material_cost) "Cost"
    FROM parts;


      您可以對任何數量的表達式重復使用這個模式,COALESCE是一個非常便捷的方法對統一表格中的多重實體求值。

      最后,還要說一點CASE語句的優點,就是CASE是自動進行文檔記錄的,這便于理解和解讀正在發生的事情。


    本文出自:億恩科技【www.vbseamall.com】

    服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經營性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經營性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經營性ICP/ISP證:贛B2-20080012
  • 服務器/云主機 24小時售后服務電話:0371-60135900
  • 虛擬主機/智能建站 24小時售后服務電話:0371-60135900
  • 專注服務器托管17年
    掃掃關注-微信公眾號
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權所有  地址:鄭州市高新區翠竹街1號總部企業基地億恩大廈  法律顧問:河南亞太人律師事務所郝建鋒、杜慧月律師   京公網安備41019702002023號
      0
     
     
     
     

    0371-60135900
    7*24小時客服服務熱線