三个不同的函数根据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'
答案 0 :(得分:1)
您不希望将二进制值加在一起。如果您只想迭代字母表,只需使用ASCII
和CHR
函数即可。例如
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;