Oracle PL/SQL – BITANDファンクションの例
`BITAND`関数は、その入力とその出力をビットのベクトルとして扱い、出力は入力のビットごとのANDです。
基本的には以下のステップを実行します。
-
入力をバイナリに変換します.
-
これらの2つの文字列に対して標準的なビット単位のAND演算を実行します.
-
バイナリ結果を10進数に変換して返します.
1. BITANDの例
SELECT BITAND (12,10) FROM DUAL; -- output 8 1 1 0 0 = 12 1 0 1 0 = 10 ------------- 1 0 0 0 = 8
DUALからBITAND(24,18)を選択します。 - 出力16 1 1 0 0 0 = 12 1 0 0 1 0 = 18 ------------- 1 0 0 0 0 = 16
2.トランザクション状態を計算するためにBITANDを使用します.
2.1この例では、
txn
details`テーブルに、異なる銀行との支払いゲートウェイの取引詳細が含まれていると仮定します。ここで、 `txn
details`テーブルの
txn__status`カラムには単一の数値が含まれていますが、この値の各ビットにはいくつかの意味があります。
`txn__status`の意味は次のように考えました。
-
バイナリ値001(10進数1)は、BankへのRequest Sentを意味します.
-
バイナリ値010(10進数2)は、Response Receivedを意味します.
-
バイナリ値100(10進数4)は、Error In In Responseを意味します.
CREATE TABLE txn__details ( TXN__ID number(5) primary key, BANK__NAME varchar2(20), TXN__STATUS number(1) );
2.2サンプル値の挿入。
INSERT INTO txn__details VALUES (1,'ABC Bank',3); INSERT INTO txn__details VALUES (2,'National Bank',0); INSERT INTO txn__details VALUES (3,'Corporation Bank',1); INSERT INTO txn__details VALUES (4,'ABC Bank',7);
2.3この例では
DECODE`関数を使用して、
txn__status`値の3つのビットのそれぞれに2つの値を与えます。ビットがオンの場合は1つ、オフの場合は1つです。
REQ
SENT`カラムの場合、BITANDはまず
txnstatus`と1(2進001)を比較します。重要なビット値だけが比較されるので、右端のビットに1を持つバイナリ値は正に評価され、1を返します。
偶数は0を返します。
DECODE`関数は、BITANDによって返された値を1と比較します。両方が1の場合、
REQ__SENT`の値は
YES ''であり、そうでない場合は
NO ”です。
他の2つの列
RESPONSE
RECEIVED`と
ERRORIN__RESPONSE`も同様に評価されます。
SELECT txn__id,bank__name,txn__status , DECODE(BITAND(txn__status, 1), 1, 'YES', 'NO') "REQ__SENT", DECODE(BITAND(txn__status, 2), 2, 'YES', 'NO') "RESPONSE__RECEIVED", DECODE(BITAND(txn__status, 4), 4, 'YES', 'NO') "ERROR__IN__RESPONSE" FROM txn__details;
出力
| =========================================== ========================== | TXN
ID | BANK
NAME | TXN
STATUS | REQ
SENT | RESPONSE
RECEIVED | ERROR
IN__RESPONSE | 1 | ABCバンク| 3 | YES | YES | NO
| 2 |国立銀行| 0 |いいえ|いいえ|いいえ
| 3 |法人銀行| 1 |はい|いいえ|いいえ
| 4 | ABCバンク| 7 |はい|はい|はい| ============================== =======================