sql >> データベース >  >> RDS >> Oracle

NVLとCoalesceのOracleの違い

    COALESCE ANSI-92の一部であるより現代的な関数です 標準。

    NVL Oracleです 具体的には、80で導入されました 基準が存在する前のことです。

    2つの値の場合、それらは同義語です。

    ただし、実装方法は異なります。

    NVL COALESCEの間、常に両方の引数を評価します 通常、NULL以外の最初のコードが見つかると評価を停止します (シーケンスNEXTVALなどのいくつかの例外があります ):

    SELECT  SUM(val)
    FROM    (
            SELECT  NVL(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
            FROM    dual
            CONNECT BY
                    level <= 10000
            )
    

    これはほぼ0.5で実行されます SYS_GUID()を生成するため秒 の、1にもかかわらず NULLではない 。

    SELECT  SUM(val)
    FROM    (
            SELECT  COALESCE(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
            FROM    dual
            CONNECT BY
                    level <= 10000
            )
    

    これは、1 NULLではありません 2番目の引数は評価されません。

    SYS_GUID は生成されず、クエリは即座に実行されます。



    1. Oracleテーブルの行を列に変換する方法

    2. MySQLエラー1093-FROM句で更新するターゲットテーブルを指定できません

    3. SQLServerのSalesforceSOQL

    4. SQLServerからの出力パラメータを使用してOracleストアドプロシージャを呼び出す