UTL_RAW INSTR功能?

时间:2015-06-23 13:52:50

标签: oracle plsql

我很惊讶Oracle原型类型具有SUBSTR函数但没有INSTR函数。

有没有办法像INSTR类型中的varchar2函数一样搜索原始类型中的字节序列?

2 个答案:

答案 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上测试。