当前位置: 首页 > 知识库问答 >
问题:

如何克服CLOB空间不足-ORA-06502:PL/SQL:数值或值错误

濮阳耀
2023-03-14

我有一个向CLOB追加字符串的场景。我遇到的问题是,一旦CLOB达到一定大小,如果我试图向CLOB追加更多内容,就会出现ORA-06502:PL/SQL:numeric或value错误。我假设它的大小已经用完了,但我不知道如何克服这个问题(即指定如何使clob变大)。

有人能帮帮我吗。

我就是这样宣布我的衣服的...

LP_xml_result CLOB;

DBMS_LOB.CREATETEMPORARY(
      lob_loc => LP_xml_result
    , cache   => true
    , dur     => dbms_lob.call
);

DBMS_LOB.OPEN(
      lob_loc    => LP_xml_result
    , open_mode  => DBMS_LOB.LOB_READWRITE
);

然后我像这样插入它....

PROCEDURE lob_append(i_string IN VARCHAR2)
IS
BEGIN

    dbms_lob.append(LP_xml_result,LP_LineFeed || i_string);
END lob_append;

谢谢

共有1个答案

陶法
2023-03-14

当您执行lp_linefeed i_string时,它将隐式强制转换为varchar2,这里的限制为32K。

这样做:

PROCEDURE lob_append(i_string IN VARCHAR2)
IS
BEGIN

    dbms_lob.append(LP_xml_result,LP_LineFeed);
    dbms_lob.append(LP_xml_result,i_string);
END lob_append;

关于打印到HTP的问题,前段时间我也遇到了同样的问题,下面是我的解决方案

chunkSize   CONSTANT INTEGER := 5000;
pos NUMBER;

BEGIN
IF LENGTH(CLOB_VAL) > chunkSize THEN
    LOOP
        Htp.prn(SUBSTR(CLOB_VAL, pos, chunkSize));
        pos := pos + chunkSize;
        EXIT WHEN pos > LENGTH(CLOB_VAL);
    END LOOP;
ELSE
    Htp.prn(CLOB_VAL);
END IF;
 类似资料: