FUNCTION SetOneBit(AttributeNumber IN NUMBer,iBit IN NUMBER) RETURN NUMBER IS iNewAttri number:=0; BEGIN IF mod(AttributeNumber,power(2,iBit+1)) < power(2,iBit) THEN iNewAttri:=AttributeNumber+power(2,iBit); else iNewAttri:=AttributeNumber; END IF; RETURN iNewAttri; END;
转贴: func_and 用于对两个数进行与操作,经常用于判断用户是否有权限等。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; /还可以用以下: UTL_RAW.BIT_AND ( r1 IN RAW, r2 IN RAW) RETURN RAW;UTL_RAW.BIT_OR ( r1 IN RAW, r2 IN RAW) RETURN RAW;select utl_raw.bit_and('1111','0000') from dual;
转贴: func_and 用于对两个数进行与操作,经常用于判断用户是否有权限等。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; /还可以用以下: UTL_RAW.BIT_AND ( r1 IN RAW, r2 IN RAW) RETURN RAW;UTL_RAW.BIT_OR ( r1 IN RAW, r2 IN RAW) RETURN RAW;select utl_raw.bit_and('1111','0000') from dual;
IS
iNewAttri number:=0;
BEGIN
IF mod(AttributeNumber,power(2,iBit+1)) < power(2,iBit) THEN
iNewAttri:=AttributeNumber+power(2,iBit);
else
iNewAttri:=AttributeNumber;
END IF;
RETURN iNewAttri;
END;
func_and 用于对两个数进行与操作,经常用于判断用户是否有权限等。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;
/还可以用以下:
UTL_RAW.BIT_AND (
r1 IN RAW,
r2 IN RAW)
RETURN RAW;UTL_RAW.BIT_OR (
r1 IN RAW,
r2 IN RAW)
RETURN RAW;select utl_raw.bit_and('1111','0000') from dual;
func_and 用于对两个数进行与操作,经常用于判断用户是否有权限等。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;
/还可以用以下:
UTL_RAW.BIT_AND (
r1 IN RAW,
r2 IN RAW)
RETURN RAW;UTL_RAW.BIT_OR (
r1 IN RAW,
r2 IN RAW)
RETURN RAW;select utl_raw.bit_and('1111','0000') from dual;