(PHP 8.2, PECL OCI8 >= 3.2)
oci_set_prefetch_lob — 設定每個 CLOB 或 BLOB 預先擷取的資料量。
設定用於擷取每個 CLOB 或 BLOB 值的內部緩衝區大小。當執行成功的 oci_execute() 查詢呼叫後,實作從資料庫取得內部 Oracle LOB 定位器時,以及後續每次向資料庫發送內部擷取請求時,都會使用此緩衝區大小。增加此值可以減少 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);
?>