Oraclesqldecodeの概要
このセクションでは、Oraclesqlステートメントの非常に重要な側面であるOracleデコード処理について説明します
オラクル デコードは、Oracleデータベースでデータ値をある値から別の値に変換する方法であり、理解しやすくなっています。 Oracle Decodeは、取得時にデータ値を変換します。
これは、 If then elseの一種です。 処理用
OraclesqlDecodeのコードブロックは次のとおりです
decode(式または列名、一致、結果[、一致、結果]…[、デフォルト])
上記のコードの用語の意味は次のとおりです。
a)式または列は比較する値です
b)一致は式と比較される値です
c)結果は返される値です式がmatchと等しい場合
d)デフォルトはオプションです。一致するものが見つからない場合、デコードはデフォルトを返します。デフォルトを省略すると、decodeステートメントはNULLを返します(一致するものが見つかりません)。
これがそれをよりよく理解するためのアルゴリズムです
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;
基本的に、ある値に評価できるいくつかの式への要件
SELECT col1、col2 decode(abs(col1-col2)、0、‘col1 =col2’、Col1-col2、‘col1> col2’、’col1
CASEはPL/SQL構造として機能できますが、DECODEはSQL文でのみ使用されます。CASEは関数/プロシージャのパラメータとして使用できます。
CASEはデータ型の整合性を期待しますが、DECODEはデータ型を期待しません。一貫性、DECODEは
DECODEはスカラー値のみで機能しますが、CASEは論理演算子、述語、および検索可能なサブクエリで機能します。
はいexpr、検索、結果、デフォルトなど、DECODE関数のコンポーネントの最大数は255です。
関連リンク
デコードに関するOracleのドキュメント
SQLクエリの記述方法
基本的なSQLステートメント
ヒントと例を使用したOracleCaseステートメント
SQLチュートリアル