如何通过PL / SQL utl_http.html_pieces确定一个部分

问题描述 投票:0回答:2

我正在寻找一些帮助,了解request_pieces函数的工作原理。什么定义一件作品是什么或者是否需要选择数量的字符来构建作品例如前2000个字符将是一个peice。

我还有来自以下PL / SQL块的错误 - PL / SQL:数字或值错误:字符串缓冲区太小

DECLARE 
  x utl_http.html_pieces;
BEGIN
  x := utl_http.request_pieces('www.testwebsite.co.uk', 100);
  dbms_output.put_line(x.count || ' pieces were retrieved.');
  dbms_output.put_line('with total length ');
  IF x.count < 1 
  THEN dbms_output.put_line('0');
  ELSE dbms_output.put_line
  ((2000 * (x.count - 1)) + length(x(x.count)));
  END IF;
END;

谢谢你的帮助。

oracle plsql
2个回答
1
投票

REQUEST_PIECES迭代READ_TEXT或READ_RAW,直到它获得END_OF_BODY。如果READ_TEXT返回的内容超过2000(字节?),那么它将在UTL_HTTP内失败。如果这就是问题,我将使用VARCHAR2(32000)变量专门在您自己的循环中调用READ_TEXT,看看是否有效。

如果底层Oracle逻辑试图以2000个大小的块来获取它,那么字符集转换/多字节字符可能会有些奇怪,这可能偶尔会出现错误计数(尽管它应该给出partial_multibyte_char异常)。可能设置内容类型的HTTP标头会有所帮助。


0
投票

我假设你在谈论UTL_HTTP.REQUEST_PIECES。请阅读文档以获取更多详细信息。

是的,每件都是2000个字符。例如,如果请求的数据长度为5000个字符,则前两个将为2000个字符,第三个将为1000个字符。

我收回之前说过的话。文件说:

此函数返回的PL / SQL表(“部分”)的每个条目可能无法填充到最大容量。在前一个“片段”完全填满之前,该功能可以开始填充下一个片段中的数据。

他们并不清楚这是如何发生的。那么每件都在1-2000个字符之间?

© www.soinside.com 2019 - 2024. All rights reserved.