oracle - 将RAW添加到RAW(或BINARY到BINARY)

时间:2014-11-04 20:35:03

标签: oracle binary add

三个不同的函数根据dump()返回相同的数据类型

select 
 dump(utl_raw.cast_to_raw('j')), 
 dump(utl_raw.cast_from_number(1)), 
 dump(utl_raw.cast_from_binary_integer(1)) 
from dual;

DUMP(UTL_RAW.CAST_TO_RAW('J'))
-----------------------------------------------------
DUMP(UTL_RAW.CAST_FROM_NUMBER(1))
-----------------------------------------------------
DUMP(UTL_RAW.CAST_FROM_BINARY_INTEGER(1))
-----------------------------------------------------
Typ=23 Len=1: 106
Typ=23 Len=2: 193,2
Typ=23 Len=4: 0,0,0,1

...但是不能将它们加在一起。

select 
 utl_raw.cast_to_raw('j') + 
 utl_raw.cast_from_number(1), 
 utl_raw.cast_from_number(1) +
 utl_raw.cast_from_binary_integer(1),
 utl_raw.cast_from_binary_integer(1) + 
 utl_raw.cast_to_raw('j')
from dual;

ORA-00932: inconsistent datatypes: expected NUMBER got BINARY

如何在RAW上执行算术,特别是 - 将RAW / BINARY添加到RAW / BINARY?

编辑:此问题源于迭代字母的需要。我发现如何将ascii代码添加1然后以更大的字母返回并不是那么明显,例如。 '一个' + 1 =' b'

1 个答案:

答案 0 :(得分:1)

您不希望将二进制值加在一起。如果您只想迭代字母表,只需使用ASCIICHR函数即可。例如

select ascii('a') ascii_code,
       ascii('a') + 1 next_ascii_code,
       chr( ascii('a') + 1 ) next_char
  from dual

将显示小写字母a的ASCII代码(假设您的数据库字符集是US7ASCII的超集,将为97),下一个字符的ASCII代码(98)以及字符集中的下一个字符(小写b)。如果你想循环遍历字母

FOR i IN 1 .. 26
LOOP
  dbms_output.put_line( chr( ascii('a') + i - 1 ) );
END LOOP;