Oracle DECODE関数文法の使用紹介

2884 ワード

Oracle DECODE関数の機能が強いので、Oracle DECODE関数の使い方を詳しく紹介します。Oracle DECODE関数についてもっと知ってもらいたいです。Oracle DECODE関数Oracle DECODE関数は、Oracle社が独占的に提供する機能であり、機能の強い機能です。SQLの標準ではないが,性能には非常に有用である。現在まで、他のデータベースプロバイダはDECODEのような機能を提供できません。OracleのSQLが標準ではないという批判さえあるデータベースのサプライヤーもいます。実際には、このような批判は一部の一方的または不十分なレベルがある。ある馬車メーカーがヘンリーに文句を言っているようです。フォードの馬車は標準と違っています。1 DECODEのif-then-elseロジックは、論理プログラミングにおいて、If C The n CElseを用いて論理的に判断されることが多い。DECODEの文法では、実はこのような論理処理過程です。DECODE(value,if 1,then 1,if 2,then 2,if 3,then 3.else)Valueは、あるテーブルの任意の種類の列または計算によって得られた任意の結果を表します。各value値がテストされると、valueの値がif 1であれば、Decode関数の結果はthen 1である。もしvalueがif 2に等しいなら、Decode関数の結果はthen 2です。など。実際には、複数のif/then対を与えることができる。もしvalue結果が与えられた対に等しくない場合、Decode結果はelseに戻ります。なお、ここでのif、thenおよびelseは、関数または計算式でもよい。意味:DECODE(条件、値1、翻訳値1、値2、翻訳値2、…値n、翻訳値n、デフォルト値)この関数の意味は、IF条件=値1 THEN_RETURN(翻訳値1)ELSIF条件=値2 THEN_RETURN(翻訳値2)…ELSIF条件=値n THEN_RETURN(翻訳値n)ELESE_RETURN(デフォルト値)END IF_2 DECODEの簡単な例Oracleシステムには、多くのデータがイディックを使用しています。会話情報を記録するV$SESSIONデータ辞書の表示はこのようです。「Oracle 8 i/9 i Reference」の資料から、ユーザ登録が成功した後、V$SESSIONに該当するユーザの記録があることが分かりましたが、ユーザが行ったコマンド操作はこのビューにコマンドのコードだけを記録します。したがって、現在の各ユーザの名前とその操作を知るためには、下記のコマンドを使用して詳細な結果が得られます。
 
select sid,serial#,username,
DECODE(command,
0,'None',
2,'Insert',
3,'Select',
6,'Update',
7,'Delete',
8,'Drop',
‘Other') cmmand
from v$session where username is not null;
3 DECODE実現テーブルの転置データベースのテーブルは列と行からなる二次元テーブルです。一般的にはどのデータベースにも限られた数量で、行の変化が大きい場合、行の数は千万行に達するかもしれません。同じ列の同行者でないと異なる値がありますし、予め定義されているものではありません。例:住宅積立金の報告書の置き換え例:1.各会社は当地の取扱銀行で口座を開設し、口座を開設することは会社の基本情報と社員情報を登録することです。2.毎月の各会社の会計は担当銀行に行って、当会社の社員全員の住宅積立金を納付します。システムは従業員ごとの納付明細を記録しています。そして、各記録には担当行のコードが記録されています。3.毎月、四半期、半年と年末には、経営銀行を「列」に変えてヶ月の明細表を提出することを要求しています。担当行:城西区城東区月:2001.01 xx 1.xx 2.xx 2.xx 3.xxxx 4.xx。。。。。。。。。。。元のデータの順序は:城西区2001.01 xxx 1.xx城東区2001.01 xxxxxx2.xx城西区2001.02 xxxx3.xx城東区2001.02 xxxxxxxxxxxxxxxxxxx4.xx住宅積立金システムの記録従業員の毎月の納付名の細いpay_。lstはバンド構造です。code varrrhar 2(6)NOT NULL、--取扱行コードacc_ノvarrhar 2(15)not null、--単位コード(単位アカウント)emp_acc_ノvarrrhar 2(20)not null、--従業員アカウントtrandate date not null--納期tran_val Number(7,2)not null、--納付額sys_date date default sysdate--システム日付oper_id varrrhar 2(10)--オペレータコードのようなテーブル構造は、通常は担当行を行(row)として集計するのが容易ですが、担当行を列(column)にしたいというフォーマットで出力するのは難しいです。DECODE関数で処理すれば簡単になります。ビューを作成して、現在のpay_に対応します。lstテーブルで照会します。行コードを特定の担当行名に変更すればいいです。
 
CREATE OR REPLACE VIEW bank_date_lst AS
Select to_char(tran_date,'yyyy.mm'),
SUM( DECODE ( bank_code,'001', tran_val,0 )) ,
SUM( DECODE ( bank_code,'002', tran_val,0 )) ,
SUM( DECODE ( bank_code,'003', tran_val,0 ))
FROM pay_lst
GROUP BY to_char(tran_date,'yyyy.mm');
ビューを作成した後、直接にビューを照会することができます。列に従って結果が表示されます。