Sql DBMS_LOB.substr返回null

Sql DBMS_LOB.substr返回null,sql,oracle,substr,clob,Sql,Oracle,Substr,Clob,v_tmp_clob:=DBMS_LOB.substr(v_qry_strng,DBMS_LOB.getlength(v_qry_strng)-10,1) 前一行返回null,尽管v_qry\u strng是一个长度为32897个字符的CLOB。。。有人能解释一下吗?您还没有指定Oracle版本 DBMS_LOB.SUBSTR返回一个VARCHAR2(除其他外,但不是CLOB),它最多可以容纳32767字节的字符 另外,DBMS\u LOB.SUBSTR在以下位置返回NULL: 任何参数都显式为

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


前一行返回null,尽管
v_qry\u strng
是一个长度为32897个字符的CLOB。。。有人能解释一下吗?

您还没有指定Oracle版本

DBMS_LOB.SUBSTR
返回一个
VARCHAR2
(除其他外,但不是
CLOB
),它最多可以容纳32767字节的字符

另外,
DBMS\u LOB.SUBSTR
在以下位置返回
NULL

  • 任何参数都显式为空
  • 参数2(金额)<1
  • 参数2(金额)>32767
  • 参数3(偏移量)<1
  • 参数3(偏移量)>
    LOBMAXSIZE
  • 在表达式中,有:
    dbms\u lob.getlength(v\u qry\u strng)-10
    -->
    32897-10
    -->
    32887
    作为参数2


    32887>32767
    那么,在我的例子中,如何在CLOB上执行相同的操作呢?使用
    DBMS\u LOB.COPY
    ,参数略有不同,但很简单。见:
    DBMS_LOB.COPY(v_tmp_clob, v_qry_strng, DBMS_LOB.GETLENGTH(v_qry_strng) - 10, 1, 1);