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

OracleでDecodeを使用する方法

    Oraclesqldecodeの概要

    このセクションでは、Oraclesqlステートメントの非常に重要な側面であるOracleデコード処理について説明します

    オラクル デコードは、Oracleデータベースでデータ値をある値から別の値に変換する方法であり、理解しやすくなっています。 Oracle Decodeは、取得時にデータ値を変換します。

    これは、 If then elseの一種です。 処理用

    OraclesqlDecodeのコードブロックは次のとおりです

    decode(式または列名、一致、結果[、一致、結果]…[、デフォルト])

    上記のコードの用語の意味は次のとおりです。
    a)式または列は比較する値です
    b)一致は式と比較される値です
    c)結果は返される値です式がmatchと等しい場合
    d)デフォルトはオプションです。一致するものが見つからない場合、デコードはデフォルトを返します。デフォルトを省略すると、decodeステートメントはNULLを返します(一致するものが見つかりません)。

    select
    decode(
    Phase Code、
    'P'、'Pending'、
    'C'、'Completed'、
    'T'、 '終了しました'、
    ' S'、' Standby'、
    ' UNKNOWN'

    from
    FND_REQUESTS;

    これがそれをよりよく理解するためのアルゴリズムです

    1)Oracleは、フェーズコードの列値を取得します
    2)フェーズコード='P'の場合は保留中
    3)フェーズコード='C'の場合は完了
    4)フェーズコード=の場合「T」の場合は終了
    5)フェーズコードが「S」の場合はスタンバイ
    6)フェーズコードが上記のいずれでもない場合、デコードは不明を返します
    7)デフォルトが存在しない場合nullを与える

    Oracleデコードは、列名または式を指定することから始まり、その後に変換値の一致するペアのセットが続くことに注意してください。デコードステートメントの最後に、デフォルト値があります。デフォルト値は、列の値がペアリストにない場合に何を表示するかをデコードに指示します。

    このようにアルゴリズムを言うことができます

    if(expr ==search1)
    return(result1);
    elseif(expr ==search2)
    return( result2);
    …elseif(expr ==searchn)
    return(resultn);
    else
    return(default);

    OracleDecodeで覚えておくべきいくつかのポイント

    1)DECODE関数では、Oracleは2つのヌルを同等と見なします。 exprがnullの場合、Oracleは最初の検索の結果もnullを返します。

    SQL> SELECT decode(null、null、1,0)FROM dual;
    DECODE(NULL、NULL、1,0)
    ———————
    1

    2)expr、検索、結果、デフォルトなど、DECODE関数のコンポーネントの最大数は255です。

    3)Oracleは、expressionとcompare_valueの値を最初のcompare_valueのデータ型に自動的に変換します。また、return_valueのデータ型は、最初のreturn_valueのデータ型に変換されます。最初の結果のデータ型がCHARの場合、または最初の結果がnullの場合、Oracleは戻り値をデータ型VARCHAR2

    に変換します。

    Oracleでデコードを読み取る方法

    decodeステートメントをif-elseifステートメントとして読み取ることができます。デコードステートメントの最初の引数は、通常、データ変換が必要な列になります。その後の引数は、最初の引数の値をそれと比較します

    Oraclesqlデコード処理に関するFAQ

    (1)「expr」が指定された値と同等であることがわかりました。>や<のような不等式演算子を使用できますか?

    例を見てみましょう
    SELECTDECODE(salary、<50000、sal + 1000、sal + 500)Final_salary FROM emp;
    2行目のエラー
    ORA-00936:式がありません
    したがって、それを使用することはできません。これを行うには、caseステートメントを使用する必要があります。または、デコードで関数に署名して、それを実現することもできます
    SELECT DECODE(sign(salary-50000)、-1、sal + 1000、sal + 500)Final_salary FROM emp;
    基本的に、ある値に評価できるいくつかの式への要件

    (2)Oracleデコードを使用して2つの列の値を比較するにはどうすればよいですか?

    SELECT col1、col2 decode(abs(col1-col2)、0、‘col1 =col2’、Col1-col2、‘col1> col2’、’col1 FROM example_tab;

    (3)デコードとケースの違いは何ですか

    CASEはPL/SQL構造として機能できますが、DECODEはSQL文でのみ使用されます。CASEは関数/プロシージャのパラメータとして使用できます。
    CASEはデータ型の整合性を期待しますが、DECODEはデータ型を期待しません。一貫性、DECODEは
    DECODEはスカラー値のみで機能しますが、CASEは論理演算子、述語、および検索可能なサブクエリで機能します。

    (4)Oracleデコードには制限がありますか

    はいexpr、検索、結果、デフォルトなど、DECODE関数のコンポーネントの最大数は255です。

    関連リンク
    デコードに関するOracleのドキュメント
    SQLクエリの記述方法
    基本的なSQLステートメント
    ヒントと例を使用したOracleCaseステートメント
    SQLチュートリアル


    1. OracleのROUND(number)関数

    2. SQLServerで「sp_server_info」ストアドプロシージャを使用する方法

    3. 重複する日付範囲を削除して削減します

    4. 1列のみのDISTINCT