Oracle PL/SQL - BITAND-Funktionsbeispiel

Oracle PL / SQL - BITAND Funktionsbeispiel

DieBITAND-Funktion behandelt ihre Eingänge und ihre Ausgabe als Vektoren von Bits, die Ausgabe ist das bitweise UND der Eingänge.

Grundsätzlich werden die folgenden Schritte ausgeführt.

  1. Wandelt die Eingänge in Binär um.

  2. Führt eine standardmäßige bitweise UND-Verknüpfung für diese beiden Zeichenfolgen aus.

  3. Konvertiert das binäre Ergebnis zurück in eine Dezimalzahl und gibt den Wert zurück.

1. BITAND Beispiele

SELECT BITAND (12,10) FROM DUAL; -- output 8

1 1 0 0  = 12
1 0 1 0  = 10
-------------
1 0 0 0  = 8
SELECT BITAND(24,18) FROM DUAL; -- output 16

1 1 0 0 0  = 12
1 0 0 1 0  = 18
-------------
1 0 0 0 0  = 16

Note
Versuchen Sie dies -Binary to Decimal converter

2. BITAND wird zur Berechnung des Transaktionsstatus verwendet.

2.1 In this example suppose txn_details table contains transaction details of some payment gateway with different banks. Hier enthält die Spaltetxn_status der Tabelletxn_details einen einzelnen numerischen Wert, hat jedoch innerhalb jedes Bits dieses Werts mehrere Bedeutungen.

Wir haben die Bedeutungen vontxn_statuswie folgt betrachtet

  1. Der Binärwert 001 (dezimal 1) bedeutet Anforderung an Bank gesendet.

  2. Der Binärwert 010 (dezimal 2) bedeutet Antwort empfangen.

  3. Der Binärwert 100 (dezimal 4) bedeutet einen als Antwort empfangenen Fehler.

CREATE TABLE txn_details
(
  TXN_ID number(5) primary key,
  BANK_NAME varchar2(20),
  TXN_STATUS number(1)
);

2.2 Inserting sample values.

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 The example uses the DECODE function to provide two values for each of the three bits in the txn_status value, one value if the bit is turned on and one if it is turned off.

Für die SpalteREQ_SENT vergleicht BITAND zuersttxn_status mit 1 (binär 001). Es werden nur signifikante Bitwerte verglichen, sodass jeder Binärwert mit einer 1 im Bit ganz rechts positiv ausgewertet wird und 1 zurückgibt.

Gerade Zahlen geben 0 zurück. Die FunktionDECODE vergleicht den von BITAND zurückgegebenen Wert mit 1. Wenn beide 1 sind, ist der Wert vonREQ_SENT "JA", andernfalls "NEIN".

Die beiden anderen SpaltenRESPONSE_RECEIVED undERROR_IN_RESPONSE wurden ähnlich bewertet.

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;

Ausgabe

TXN_ID BANK NAME TXN_STATUS REQ_SENT ANTWORT ERHALTEN ERROR_IN_RESPONSE

1

ABC Bank

3

YES

YES

NO

2

Nationalbank

0

NO

NO

NO

3

Corporation Bank

1

YES

NO

NO

4

ABC Bank

7

YES

YES

YES