(PHP 8.2, PECL OCI8 >= 3.2)
oci_set_prefetch_lob — CLOB や BLOB ごとにプリフェッチするデータサイズを設定する
oci_execute() を使って成功したクエリや、 その後に実行されるデータベースへの内部的なフェッチリクエストによって、 内部的な Oracle LOB ロケータを取得する際に、 CLOB や BLOB ごとにフェッチする内部バッファサイズを設定します。 この値を増やすと、LOB のサイズが小さい場合に、 PHP と データベース間の問い合わせの数を減らすことができ、パフォーマンスを向上させることができます。 メモリ消費量は増加します。
ここで設定する値は、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 ステートメント ID、
あるいは REF
CURSOR
ステートメント ID。
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); // Set before calling 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);
?>