ORACLE不提供位运算是有道理的。因为其数据类型不像MSSQL或者C那样,int就是4个字节,而char是8位。ORACLE的原始数据类型实际已经是一个类了。
可以使用一些模拟位操作的包来做,不过不到万不得已就不要用了,因为效率不高。
我本人开发过一个完整的位操作模拟包,花费时间一天。
可以使用一些模拟位操作的包来做,不过不到万不得已就不要用了,因为效率不高。
我本人开发过一个完整的位操作模拟包,花费时间一天。
解决方案 »
- 关于job执行间隔时间问题、
- 高人请进!linux系统下oracle9i数据库如何备份?
- 求助呀 关于ORACLE官方网站的问题
- oracle 培训教材 习题 寻求答案 (7)
- 如何知道我的oracle数据库所能接受的最大连接数session?
- 在proc*c中调用oracle包时参数传递的问题
- 请问我的oracle enterrise manager sysman的密码忘了,请问还有另的帐号可以登录不?
- oracle8.0.5 win2000 sql*plus 连接不上
- Oracle的session问题,100分送上。
- 数据导入问题
- 怎样修改ORACLE的internal的密码为其它或者失效?
- 817中在那里可以创建资料档案库,即我想使用oms。谢谢!
disable_mask IN NUMBER ) return NUMBER IS
l_enable number;
l_disable number;
i number;
j number;
l_outvalue number;
l_temp number;
begin
l_enable := enable_mask;
l_disable := disable_mask;
l_outvalue := in_value;
-- enable
j := 0;
while l_enable > 0 loop
if MOD(l_enable,2) = 1 then -- to do set work
l_temp :=TRUNC(l_outvalue/POWER(2,j));
if MOD (l_temp,2) = 0 then -- set it to 1
l_outvalue := l_outvalue + POWER(2,j);
end if;
end if;
l_enable := TRUNC(l_enable/2);
j := j+1 ;
end loop; -- disable
j := 0;
while l_disable > 0 loop
if MOD(l_disable,2) = 1 then -- to do set work
l_temp :=TRUNC(l_outvalue/POWER(2,j));
if MOD (l_temp,2) = 1 then -- set it to 0
l_outvalue := l_outvalue - POWER(2,j);
end if;
end if;
l_disable := TRUNC(l_disable/2);
j := j+1 ;
end loop; return l_outvalue;
end;
/2. 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;
/
bitor 就不行, 或许没有这个函数吧.
佩服佩服