oci_set_prefetch_lob

(PHP 8.2, PECL OCI8 >= 3.2)

oci_set_prefetch_lobCLOB や BLOB ごとにプリフェッチするデータサイズを設定する

説明

oci_set_prefetch_lob(resource $statement, int $prefetch_lob_size): bool

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以上の値として設定します。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン 説明
PECL OCI8 3.2

例1 LOB のプリフェッチサイズをクエリ毎に変更する

<?php

$conn 
oci_connect('hr''welcome''localhost/XE');

$stid oci_parse($conn'SELECT myclob FROM mytable');
oci_set_prefetch_lob($stid100000);  // Set before calling oci_execute()
oci_execute($stid);

echo 
"<table border='1'>\n";
while (
$row oci_fetch_array($stidOCI_ASSOC+OCI_RETURN_NULLS+OCI_RETURN_LOBS)) {
    echo 
"<tr>\n";
    foreach (
$row as $item) {
        echo 
"    <td>".($item !== null htmlentities($itemENT_QUOTES) : "&nbsp;")."</td>\n";
    }
    echo 
"</tr>\n";
}
echo 
"</table>\n";

oci_free_statement($stid);
oci_close($conn);

?>

参考

関連キーワード:  oci, サイズ, 設定, prefetch, CLOB, BLOB, lob, データ, LOB, size