(PHP 8.2, PECL OCI8 >= 3.2)
oci_set_prefetch_lob — 设置每个 CLOB 或 BLOB 预取的数据量。
设置用于在实现从数据库获取内部 Oracle LOB 定位器(在成功调用 oci_execute() 查询之后)以及每次后续内部获取请求到数据库时获取每个 CLOB 或 BLOB 值的内部缓冲区大小。增加此值可以通过减少 PHP 和数据库之间的往返次数来提高获取较小 LOB 的性能。内存使用量将会改变。
此值会影响作为 OCILob 实例返回的 LOB,以及使用 OCI_RETURN_LOBS
返回的 LOB。
在调用 oci_execute() 之前调用 oci_set_prefetch_lob()。如果未调用,则使用 oci8.prefetch_lob_size 的值。
LOB 预取值应仅与 Oracle Database 12.2 或更高版本一起设置。
statement
由 oci_parse() 创建并由 oci_execute() 执行的有效 OCI8 语句标识符,或 REF CURSOR
语句标识符。
prefetch_lob_size
要预取的每个 LOB 的字节数,>= 0
示例 #1 更改查询的 LOB 预取值
<?php
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
$stid = oci_parse($conn, 'SELECT myclob FROM mytable');
oci_set_prefetch_lob($stid, 100000); // 在调用 oci_execute() 之前设置
oci_execute($stid);
echo "<table border='1'>\n";
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS+OCI_RETURN_LOBS)) {
echo "<tr>\n";
foreach ($row as $item) {
echo " <td>".($item !== null ? htmlentities($item, ENT_QUOTES) : " ")."</td>\n";
}
echo "</tr>\n";
}
echo "</table>\n";
oci_free_statement($stid);
oci_close($conn);
?>