从 Oracle APEX 中的 restful 服务返回单个大 clob

Returning a single large clob from a restful service in Oracle APEX

有什么方法可以 return 将 clob 作为文本(或文件)而不先拆分成更小的部分?

我尝试使用 PL/SQL 源创建一个 GET 处理程序来执行此操作:

declare
  txt clob;
begin
  ...-- set clob
  htp.p(txt);
end;

但后来我收到错误 ORA-06502: PL/SQL: numeric or value error

然后我尝试将 clob 分成更小的部分并多次调用 htp.p,这奏效了,但我想知道是否有办法一次发送整个东西。

doc 声明 htp.phtp.prn 仅采用 VARCHAR2,因此您受到 varchar2 的最大大小的限制,如果 clob 长度超过该长度,它将抛出一个错误。您可以这样做:

以 4k 块循环遍历 clob 并使用 htp.prn 输出。避免在循环中使用 htp.p,因为这会生成一个换行符,这可能会弄乱输出,例如,如果您正在生成 json。通过设置 mime header.

让浏览器知道他得到了什么也是一个好习惯
DECLARE
  l_clob  CLOB;
  l_amt   INTEGER := 4000;
  l_pos   INTEGER := 1;
  l_buf   VARCHAR2(4000);
BEGIN
    owa_util.mime_header ('text/html', true);
    l_clob := '....';
    LOOP
        BEGIN
        dbms_lob.read(
                    l_clob,
                    l_amt,
                    l_pos,
                    l_buf
        );
        l_pos := l_pos + l_amt;
        -- need htp.prn since htp.p generates a newline char at the end.
        htp.prn(l_buf);
        EXCEPTION
        WHEN no_data_found THEN
            EXIT;
        END;
    END LOOP;
END;