Oracle中可以进行位运算吗?

bomdy 2003-09-12 11:49:15
系统中使用int类型存储掩码,需要按位进行访问。
例如取mark的第1、2位的值用C描述为 value=mark&3;
请问Oracle中可以实现吗?怎样做?
...全文
87 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bomdy 2003-09-12
  • 打赏
  • 举报
回复
还有要做移位操作该怎样做呢?
这些在SQLServer中都可实现。
bomdy 2003-09-12
  • 打赏
  • 举报
回复
只能这样一位一位的判断吗?没有更简洁的方法?
beckhambobo 2003-09-12
  • 打赏
  • 举报
回复
转贴:
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;
beckhambobo 2003-09-12
  • 打赏
  • 举报
回复
转贴:
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;
ColinGan 2003-09-12
  • 打赏
  • 举报
回复
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;

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧