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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过PL / SQL utl_http.html_pieces确定一个部分相关的知识,希望对你有一定的参考价值。

我正在寻找一些帮助,了解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;

谢谢你的帮助。

答案

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

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

另一答案

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

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

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

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

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

以上是关于如何通过PL / SQL utl_http.html_pieces确定一个部分的主要内容,如果未能解决你的问题,请参考以下文章

如何通过休眠访问 pl/sql proc 中的 out 参数

如何通过 PL/SQL 中的 VARRAY 函数中的变量传递字符串值

如何通过 JDBC 调用返回 UDO 并解释该结果的 PL/SQL 函数?

如何编写 PL 以返回通过服务总线中的 DB 适配器自动生成强类型 XSD 的多行? (甲骨文 PL/SQL)

如何通过 PL/SQL 过程和表名作为变量打印动态 SQL 中的所有表行?

如何通过 PL-Sql 获取数字范围内的数字。?