前回の投稿でOracleDecode処理の動作を確認しました
OracleSQLデコード処理
次に、OracleCaseステートメントの処理を見てみましょう
これは、Decodeステートメントに似ています。 Oracle 8.1.6より前のデータベースには、DECODE関数しかありませんでした。 CASEは、Oracle 8.1.6で、標準の、より意味のある、より強力な関数として導入されました。
DECODEでできることはすべて、CASEでもできます。 CASEでできることは他にもたくさんありますが、DECODEではできません。この記事では詳細な例を見ていきます
Caseステートメントの構文から始めましょう
CASE [expression] when condition_1 then value_1 when condition_2 then value_2 when condition_2 then value_2 …. else value_n end
式はオプションです
CaseステートメントはSimpleCaseステートメントとSearchablecaseステートメントの2つのカテゴリに分けることができます
単純なCASEステートメントの例
select case region when ‘N’ then ’North’ when ‘S’ then ’South’ when ‘E’ then ’East’, when ‘W’ then ’West’ else ‘UNKNOWN’ end from customer;
検索可能なCaseステートメントは、条件または述語を指定するcaseステートメントです(複数の条件を持つOracleのcaseステートメント)
SQL> select emp_name , case when Salary < 10000 then 'Junior Level' when (Salary >=10000 and Salary < 50000) then 'Middle Level' when (Salary >= 50000 and Salary < 100000) then 'Senior Level' else 'Managers' end Emp_level from employee_info where rownum < 5; EMP_NAME EMP_LEVEL ---------- --------- JOHN Junior Level DON Senior Level BOB Manager BILL Middle Level
これはcaseステートメント内のcaseステートメントです
SQL> select emp_name , case when Salary < 10000 then 'Junior Level' when (Salary >=10000 and Salary < 50000) then 'Middle Level' when (Salary >= 50000 and Salary < 100000) then 'Senior Level' else (Case when grade ='20' then 'Vice President' when grade='21' then 'Senior Vice President' else 'Manager' End) end Emp_level from employee_info where rownum < 5;
(1)検索されたCASEは、各「when」オプションの下で条件を個別に評価します。この構造を使用すると、単純なCASEよりもはるかに複雑な条件を検索されたCASEで実装できます。
(2)検索されたCASEは、複数の列、比較、およびAND/OR演算子を使用して複数のテストを組み合わせることができます。
(3)単純なCASE構造と検索されたCASE構造の両方で、条件は上から下に順番に評価され、最初の一致が見つかった後に実行が終了します。したがって、複数の条件が真であるとすると、最初のアクションのみが考慮されます。
(4)Oracle Databaseは、短絡評価を使用します。つまり、単純なCASE式の場合、データベースは、exprと比較する前にすべてのcomparation_expr値を評価するのではなく、exprと比較する前にのみ各comparation_expr値を評価します。したがって、前のcomparation_exprがexprと等しい場合、Oracleはcomparation_exprを評価しません。検索されたCASE式の場合、データベースは各条件を評価してそれが真であるかどうかを判断し、前の条件が真であった場合は条件を評価しません
次に、CaseステートメントとDecodeステートメントの違いを見てみましょう
(1)DECODEはスカラー値のみを処理できますが、CASEは論理演算子、述語、および検索可能なサブクエリを処理できます。
デコードはスカラー値で機能することがわかっています。論理演算子には使用できません。それを利用するには、スカラー値に変換する必要があります。
ケースを使用すると、プロセス全体が簡単になります。 Caseステートメントで論理演算子を簡単に使用できます
SQL> select city , case when population < 100000 then 'Tier I' when (population >=100000 and population < 200000) then 'Tier II' when (population >= 200000 and population < 300000) then 'Tier III' else 'TIER IV' end City_Tier from city_info where rownum < 5; CITY CITY_TIER ---------- --------- XYX TIER I XYZ TIER II XZW TIER II
上記は検索可能なケースステートメントと呼ばれます
(2)CASEはPL / SQL構造として機能できますが、DECODEはSQL文でのみ使用されます。CASEは関数/プロシージャのパラメータとして使用できます。
例
DECLARE V_x VARCHAR2(10) := 'A'; V_y VARCHAR2(10); BEGIN V_y := CASE V_x WHEN 'A' THEN 'Excellent' WHEN 'B' THEN 'Good' WHEN 'C' Then 'Average' ELSE 'Poor' END; DBMS_OUTPUT.PUT_LINE( 'Grade V_x is '||V_y||'.' ); END; /
グレードV_xは優れています。
(3)CASEはデータ型の一貫性を期待しますが、DECODEは期待しません。
select case 5 when 1 then '1' 2 when '2' then '2' 3 else '5' 4 end 5 from dual; when '2' then '2' * ERROR at line 2: ORA-00932: inconsistent datatypes: expected NUMBER got CHAR
(4)CASEはANSISQLに準拠しています。 DECODEはOracle独自のものです。
(5)CASEは、オプティマイザーでDECODEよりも高速に実行されます。
(6)CASEはステートメントであり、DECODEは関数です。
関連記事
Oracle sql Tutorials:sqlを習得し、RDBMS(Oracle、MySql)データの管理と操作で使用できるすべてのsqlチュートリアルレッスンのリスト
Oracleインタビューの質問:このページでトップ49を確認してくださいOracle Interviewの質問と回答:基本、インタビューに役立つOracleSQL。
oraclePLSQLレコード:oraclePLSQLレコードの動作に関するこの記事を確認してください。また、それを定義して値を割り当てるさまざまな方法を見つけてください。
Oracle SQL開発者ツール:Oracle sql開発者ツール、Oracle sql開発者のダウンロード方法、インストール方法に関するすべての情報については、このページを確認してください。
oracle日付関数:この投稿で、oracle日付関数、年単位のoracle日付の違い、日単位のoracle日付の違い、月単位のoracle日付の違いを確認してください。
https://docs.oracle.com/cd /B19306_01/server.102/b14200/expressions004.htm
推奨コース
OracleSQLの優れたUdemyコースは次のとおりです。
Oracle-Sql-ステップバイステップ:このコースでは、基本的なSQL、結合、テーブルの作成とその構造の変更、ビューの作成、ユニオン、ユニオンなどすべてについて説明します。 。 SQL初心者のための素晴らしいコースと必須のコース
完全なOracleSQL認定コース :これは、SQL開発者のスキルに対応できるようになりたい人にとっては良いコースです。わかりやすい説明コース
OracleSQLDeveloper:Essentials、Tips and Tricks :OracleSql開発者ツールは多くの開発者によって使用されています。このコースでは、それを効果的に使用して生産的なSQL開発者になるための秘訣とレッスンを提供します。
Oracle SQL Performance Tuning Masterclass 2020 :パフォーマンスの調整は、重要で最も求められているスキルの1つです。これは、それについて学び、SQLパフォーマンスの調整を開始するための良いコースです