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.
-
Wandelt die Eingänge in Binär um.
-
Führt eine standardmäßige bitweise UND-Verknüpfung für diese beiden Zeichenfolgen aus.
-
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_status
wie folgt betrachtet
-
Der Binärwert 001 (dezimal 1) bedeutet Anforderung an Bank gesendet.
-
Der Binärwert 010 (dezimal 2) bedeutet Antwort empfangen.
-
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 |