Oracle PL/SQL - Exemple de fonction BITAND

Oracle PL / SQL - Exemple de fonction BITAND

La fonctionBITAND traite ses entrées et sa sortie comme des vecteurs de bits, la sortie est le ET au niveau du bit des entrées.

Fondamentalement, il effectue les étapes ci-dessous.

  1. Convertit les entrées en binaire.

  2. Effectue une opération AND au niveau du bit standard sur ces deux chaînes.

  3. Reconvertit le résultat binaire en décimal et renvoie la valeur.

1. Exemples de BITAND

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
Essayez ceci -Binary to Decimal converter

2. BITAND utilisé pour calculer le statut de la transaction.

2.1 In this example suppose txn_details table contains transaction details of some payment gateway with different banks. Ici, la colonnetxn_status de la tabletxn_details contient une seule valeur numérique, mais ayant plusieurs significations dans chaque bit de cette valeur.

Nous avons considéré les significations detxn_statuscomme

  1. La valeur binaire 001 (décimal 1) signifie Demande envoyée à la banque.

  2. La valeur binaire 010 (décimal 2) signifie Réponse reçue.

  3. La valeur binaire 100 (décimale 4) signifie une erreur reçue en réponse.

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.

Pour la colonneREQ_SENT, BITAND compare d'abordtxn_status avec 1 (binaire 001). Seules les valeurs de bits significatives sont comparées, donc toute valeur binaire avec un 1 dans son bit le plus à droite sera évaluée positivement et retournera 1.

Les nombres pairs renverront 0. La fonctionDECODE compare la valeur renvoyée par BITAND avec 1. S'ils sont tous les deux 1, alors la valeur deREQ_SENT est «OUI», sinon «NON».

Les deux autres colonnesRESPONSE_RECEIVED etERROR_IN_RESPONSE évaluées de la même manière.

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;

Sortie

TXN_ID NOM DE BANQUE TXN_STATUS REQ_SENT RESPONSE_RECEIVED ERROR_IN_RESPONSE

1

Banque ABC

3

YES

YES

NO

2

Banque Nationale

0

NO

NO

NO

3

Banque Corporation

1

YES

NO

NO

4

Banque ABC

7

YES

YES

YES