ORA-06502:PL / SQL:数字或值错误ORA-06512:在“test.BITOPS2”,第68行

时间:2018-02-20 14:03:10

标签: oracle plsql

跑步时 SELECT BITOPS2.BITAND(128,64) FROM DUAL,我收到以下错误

  

ORA-06502:PL / SQL:数字或值错误
  ORA-06512:在“test.BITOPS2”,第68行

(仅当我使用128号时才会发生)

1 个答案:

答案 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函数?