我很惊讶Oracle原型类型具有SUBSTR
函数但没有INSTR
函数。
有没有办法像INSTR
类型中的varchar2
函数一样搜索原始类型中的字节序列?
答案 0 :(得分:1)
将raw写入blob并使用blob instr?
DBMS_LOB.INSTR (lob_loc IN BLOB,
pattern IN RAW,`
offset IN INTEGER := 1,
nth IN INTEGER := 1)
RETURN INTEGER;
答案 1 :(得分:0)
使用INSTRB
函数。
示例(使用字符串“ helloäthere”作为utf8编码的八位字节序列)[结果:13]:
SELECT INSTRB ( utl_raw.cast_to_varchar2 ( HEXTORAW('68656c6c6F20C3A4207468657265') ), 'r' ) from dual;
请注意,原始变量代表的八位位组序列不需要是有效的utf8编码。
示例(用utf 8中的非法八位字节序列“ C020”替换“ C3A4”的“ä”编码)[结果:13]:
SELECT INSTRB ( utl_raw.cast_to_varchar2 ( HEXTORAW('68656c6c6F20C020207468657265') ), 'r' ) from dual;
在Oracle 12c1上测试。