Oracle
Oracle Anywhere

For anyone that would like free Oracle anywhere http://www.oracle.com/technology/products/database/xe/index.html 

Add Comment Filed Under [ Oracle ]
Bitwise Operations in PLSQL

Looking around on the web I have found numerous posts complaining about the lack of bitwise operators in Oracle. Although Oracle does not seem to directly support bitwise operations on number types it does have support for bitwise operations on the raw type via the utl_raw package. With a little bit of type manipulation it is relatively easy to leverage these routines for use with number types.

create or replace package K_NUMBER_UTIL is
   
  function ToRaw(p_Value number) return raw;
  function BitOr(p_Value1 number, p_Value2 number) return number;
  function BitXor(p_Value1 number, p_Value2 number) return number;
  function BitAnd(p_Value1 number, p_Value2 number) return number;

end K_NUMBER_UTIL;
/
create or replace package body K_NUMBER_UTIL is
 
  RawToNumberFMT constant char(12) := 'XXXXXXXXXXXX';
  NumberToRawFMT constant char(14) := 'FM' || RawToNumberFMT;
 
  function ToRaw(p_Value number) return raw is
  begin
    return HexToRaw(To_Char(p_Value, NumberToRawFMT));
  end;
 
  function BitOr(p_Value1 number, p_Value2 number) return number is
  begin
    return To_Number(utl_raw.bit_or(ToRaw(p_Value1), ToRaw(p_Value2)), RawToNumberFMT);
  end;
 
  function BitXor(p_Value1 number, p_Value2 number) return number is
  begin
    return To_Number(utl_raw.bit_xor(ToRaw(p_Value1), ToRaw(p_Value2)), RawToNumberFMT);
  end;

  function BitAnd(p_Value1 number, p_Value2 number) return number is
  begin
    return To_Number(utl_raw.bit_and(ToRaw(p_Value1), ToRaw(p_Value2)), RawToNumberFMT);
  end;
 
end K_NUMBER_UTIL;
/

One Comment Filed Under [ Oracle ]