DBMS_LOB.substr返回null

时间:2016-03-08 13:43:18

标签: sql oracle substr clob

v_tmp_clob := DBMS_LOB.substr(v_qry_strng, dbms_lob.getlength(v_qry_strng)-10,1);

前一行返回null,虽然v_qry_strng是一个长度为32897个字符的CLOB ...可以解释吗?

1 个答案:

答案 0 :(得分:0)

您尚未指定Oracle版本。

DBMS_LOB.SUBSTR会返回VARCHAR2(其中包括CLOB),但最多只能容纳32767个字符的字符。

此外,DBMS_LOB.SUBSTR会在following conditions上返回NULL

  1. 任何参数都显式为NULL
  2. 参数2(量)< 1
  3. 参数2(金额)> 32767
  4. Param 3(偏移)< 1
  5. Param 3(偏移)> LOBMAXSIZE
  6. 在您的表达式中,您有:dbms_lob.getlength(v_qry_strng)-10 - > 32897-10 - > 32887作为参数2。

    32887 > 32767< - 这就是原因。

    更新

    要直接从LOB复制到LOB,请使用DBMS_LOB.COPY

    在您的示例中,它可能是:

    DBMS_LOB.COPY(v_tmp_clob, v_qry_strng, DBMS_LOB.GETLENGTH(v_qry_strng) - 10, 1, 1);