oracle dbms_lob.instr

INSTR 函数

 
   
本函数返回LOB中从你指定的位置开始,第n个符合pattern的匹配的位置。
VARCHAR2 缓冲区(pattern参数)的格式必须匹配CLOB参数的格式。换句话说,如果输入的LOB参数类型为NCLOB,
缓冲区也必须包含NCHAR类型数据。 相反,如果输入LOB参数是CLOB类型,那么缓冲区必须包含CHAR类型数据。
对于BFILE而言,文件必须已经成功使用FILEOPEN操作打开,本操作才能成功。
接受RAW型或VARCHAR2型参数pattern匹配的操作,如INSTR,其pattern参数或子串不支持正则表达式或者特殊匹配字符(譬如SQL中的LIKE) 。
语法
DBMS_LOB.INSTR (
   lob_loc    IN   BLOB,          //参数类型BLOB
   pattern    IN   RAW,          //pattern类型RAW
   offset     IN   INTEGER := 1,             //开始位置,默认为1
   nth        IN   INTEGER := 1)  //第N个匹配,默认为1
  RETURN INTEGER;

DBMS_LOB.INSTR (
   lob_loc    IN   CLOB      CHARACTER SET ANY_CS,               //参数类型CLOB
   pattern    IN   VARCHAR2  CHARACTER SET lob_loc%CHARSET,         //pattern类型VARCHAR2
   offset     IN   INTEGER := 1,            //开始位置,默认为1
   nth        IN   INTEGER := 1)  //第N个匹配,默认为1
  RETURN INTEGER;

DBMS_LOB.INSTR (
   file_loc   IN   BFILE,                 //参数类型BFILE
   pattern    IN   RAW,  //pattern类型RAW
   offset     IN   INTEGER := 1,  //开始,默认为1
   nth        IN   INTEGER := 1)  //第N个匹配,默认为1
  RETURN INTEGER;

编译指示

pragma restrict_references(INSTR, WNDS, WNPS, RNDS, RNPS);

参数


参数 描述
lob_loc

LOB的定位器

file_loc

LOB的文件类型定位器。

pattern

要测试的Pattern。pattern对BLOB来说是一组RAW字节,对CLOB来说是字符串(VARCHAR2)。最大为16383字节。

offset

开始pattern匹配的位置,BLOB以字节为单位,CLOB以字符为单位,默认为1。

nth

发现次数,从1开始


返回值

Table 23-30 INSTR Function Returns
返回 描述
INTEGER

从匹配pattern开始处的偏移量,以字节或字符为单位 

pattern未找到返回0。

NULL

可分以下情况:

-一个或多个入参为NULL或者非法 

-开始位置 < 1 或大于 > LOBMAXSIZE 

-nth < 1. 

-nth > LOBMAXSIZE.


异常

Table 23-31 INSTR Function Exceptions for BFILES
异常 描述
UNOPENED_FILE

文件未处于打开状态

NOEXIST_DIRECTORY

路径不存在

NOPRIV_DIRECTORY

路径无权限

INVALID_DIRECTORY

文件打开后,目录非法

INVALID_OPERATION

文件不存在,或是对文件无权限


例子

CREATE OR REPLACE PROCEDURE Example_12a IS
    lobd        CLOB;
    pattern     VARCHAR2 := 'abcde';
    position    INTEGER  := 10000;
BEGIN
-- get the LOB locator
    SELECT b_col INTO lobd
        FROM lob_table
        WHERE key_value = 21;
    position := DBMS_LOB.INSTR(lobd,
                        pattern, 1025, 6);
    IF position = 0 THEN
        dbms_output.put_line('Pattern not found');
    ELSE
        dbms_output.put_line('The pattern occurs at ' 
                || position);
    END IF;
END;

CREATE OR REPLACE PROCEDURE Example_12b IS
DECLARE
    fil BFILE;
    pattern VARCHAR2;
    pos INTEGER;
BEGIN
    -- initialize pattern
    -- check for the 6th occurrence starting from 1025th byte
    SELECT f_lob INTO fil FROM lob_table WHERE key_value = 12;
    dbms_lob.fileopen(fil, dbms_lob.file_readonly);
    pos := dbms_lob.instr(fil, pattern, 1025, 6);
    dbms_lob.fileclose(fil);
END;

参见: 

"SUBSTR Function"


 

你可能感兴趣的:(译文)