跑步时
SELECT BITOPS2.BITAND(128,64) FROM DUAL
,我收到以下错误
ORA-06502:PL / SQL:数字或值错误
ORA-06512:在“test.BITOPS2”,第68行
(仅当我使用128号时才会发生)
答案 0 :(得分:1)
假设您从大约2001年http://www.jlcomp.demon.co.uk/faq/bitwise.html开始使用此软件包的Bart Pots版本,bitops2.raw_ascii
中似乎存在一个错误,它返回null
的值为128到255这意味着循环定义为:
for nr_pos in utl_raw.length(v_tmp_raw1) + 1 .. nr_diff_length loop
生效
for nr_pos in null .. null loop
因此你的ORA-06502:PL / SQL:数字或值错误。
这个bug很有趣。这是功能:
function raw_ascii(p_dec number) return raw is
v_result varchar2(1999);
v_tmp1 number := p_dec;
begin
loop
v_result := chr(mod(v_tmp1, 256)) || v_result;
v_tmp1 := trunc(v_tmp1 / 256);
exit when v_tmp1 = 0;
end loop;
return utl_raw.cast_to_raw(v_result);
end raw_ascii;
如果您通过128
,则mod(128,256)
= 128. chr(128)
是单个字符,但chr(128) || null
为空。我不确定为什么。
正如vc 74建议的那样,为什么不使用内置的bitand
函数?