转贴:提供参考
用于对两个数进行与操作,经常用于判断用户是否有权限等。create or replace function func_and(in_value IN NUMBER,in_mask IN NUMBER)
  return number is
  i        number;
  n_result number;
  n_value number;
  n_mask  number;
begin
 n_value := in_value;
 n_mask  := in_mask;
 i := 0;
 n_result := n_value;
 while n_value > 0 loop
   if (mod(n_mask,2) = 0) and (mod(n_value,2) = 1) then
     n_result := n_result - power(2,i);
   end if;
   n_value := TRUNC(n_value/2);
   n_mask  := TRUNC(n_mask/2);
   i := i + 1;
 end loop;
 return n_result;
end;
/
有时间研究或操作

解决方案 »

  1.   

    有没有简单方法?
    比如象mysql中的  select 字段|某个值
      

  2.   

    BIT_AND Function  Performs bitwise logical "and" of the values in RAW r1 with RAW r2 and returns the "anded" result RAW. 
     
    BIT_OR Function  Performs bitwise logical "or" of the values in RAW r1 with RAW r2 and returns the "or'd" result RAW. 
     
    UTL_RAW.BIT_OR (
       r1 IN RAW,
       r2 IN RAW) 
      RETURN RAW;看这个函数是否符合,也比较少用,一般用自已创建函数
      

  3.   

    SQL> select utl_raw.bit_and('1111','0000') from dual;UTL_RAW.BIT_AND('1111','0000')
    --------------------------------------------------------------------------------
    0000SQL> select utl_raw.bit_or('1111','0000') from dual;UTL_RAW.BIT_OR('1111','0000')
    --------------------------------------------------------------------------------
    1111