Name

BITAND

Synopsis

The BITAND function performs a logical AND between two positive, integer arguments. The specification for BITAND is:

FUNCTION BITAND (n NUMBER, m NUMBER) RETURN NUMBER;

The following example illustrates how BITAND might be used to read the bits in an integer used to contain on/off-type flags.

DECLARE
   --Declare a flag variable, the bits of which are interpreted
   --as follows:
   ---   0000
   ---      |--0=male, 1=female
   ---     |---0=part-time, 1=full-time
   ---    |----0=hourly, 1=salaried
   ---   |-----0=office, 1=factory
   bit_flags PLS_INTEGER;
BEGIN
   --Initialize the flag variable to indicate a female,
   --full-time employee. Note that 3 is represented in 
   --binary as 11.
   bit_flags := 3;
...
   --Do some things if the employee is full-time
   IF BITAND(bit_flags, 2) <> 0 THEN
      DBMS_OUTPUT.PUT_LINE('Employee is full-time.');
          ...

To set an individual bit in an integer value, you can use an incantation such as the following. The first resets the full-time bit in the flag variable used in the previous example, while the second sets the same bit:

bit_flags := BITAND(bit_flags,13);
bit_flags := BITAND(bit_flags,13) + 2;

These incantations work by using BITAND with a mask that returns the current state of all bits except the one that we want to set (or reset, as the case may be). The value 13 is represented in binary as 1101. Consequently, the value returned by BITAND in this case is guaranteed to have the full-time bit set to zero. If we want to leave it that way, we can. Otherwise, to set the bit, we ...

Get Oracle PL/SQL Programming, Third Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.