v_tmp_clob := DBMS_LOB.substr(v_qry_strng, dbms_lob.getlength(v_qry_strng)-10,1);
前一行返回null,虽然v_qry_strng
是一个长度为32897个字符的CLOB ...可以解释吗?
答案 0 :(得分:0)
您尚未指定Oracle版本。
DBMS_LOB.SUBSTR
会返回VARCHAR2
(其中包括CLOB
),但最多只能容纳32767个字符的字符。
此外,DBMS_LOB.SUBSTR
会在following conditions上返回NULL
:
LOBMAXSIZE
在您的表达式中,您有: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);