Start · Sprachen · PHP · Referenz · ocisetprefetch

ocisetprefetch

Funktion

Alias von <code>oci_set_prefetch()</code> — legt die Anzahl der vorausgelesenen Zeilen für ein OCI-Statement fest.

seit PHP 4.0.0 Kategorie: db

Signatur

ocisetprefetch(resource $statement, int $rows): bool

Beschreibung

ocisetprefetch() ist ein veralteter Alias der Funktion oci_set_prefetch(). Sie setzt die Anzahl der Zeilen, die Oracle beim Abrufen von Ergebnismengen vorab in den Puffer lädt (Prefetch). Durch einen höheren Prefetch-Wert lässt sich die Anzahl der Roundtrips zwischen PHP und dem Oracle-Datenbankserver reduzieren, was die Performance bei großen Ergebnismengen erheblich verbessern kann.

Der Prefetch-Wert gibt an, wie viele Zeilen Oracle intern puffert, bevor sie tatsächlich durch Funktionen wie oci_fetch_array() abgerufen werden. Der Standardwert ist 1, was bedeutet, dass jede Zeile einzeln übertragen wird. Ein Wert von 100 beispielsweise bewirkt, dass Oracle 100 Zeilen auf einmal über das Netzwerk überträgt.

Diese Funktion sollte in modernem Code nicht mehr verwendet werden. Stattdessen ist oci_set_prefetch() zu bevorzugen. Der Alias ocisetprefetch() wurde mit PHP 8.0 aus der offiziellen Unterstützung entfernt und steht in neueren PHP-Versionen nicht mehr zur Verfügung.

Parameter

Name Typ Default Beschreibung
$statement Pflicht resource Ein gültiges OCI-Statement-Handle, das mit oci_parse() erzeugt und mit oci_execute() ausgeführt wurde.
$rows Pflicht int Anzahl der vorauszuladenden Zeilen. Ein höherer Wert reduziert Netzwerk-Roundtrips, erhöht jedoch den Speicherverbrauch. Typische Werte liegen zwischen 10 und 200.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, andernfalls false.

Beispiele

Prefetch mit ocisetprefetch setzen (Legacy-Code)

<?php
// Verbindung zur Oracle-Datenbank herstellen
$conn = ocilogon('benutzer', 'passwort', 'datenbankhost/XE');

if (!$conn) {
    die('Verbindung fehlgeschlagen');
}

// SQL-Statement vorbereiten
$stmt = ociparse($conn, 'SELECT * FROM mitarbeiter');

// Prefetch auf 50 Zeilen setzen (Legacy-Alias)
ocisetprefetch($stmt, 50);

// Statement ausführen
ociexecute($stmt);

// Ergebnisse abrufen
while ($row = ocifetcharray($stmt, OCI_ASSOC)) {
    echo $row['NAME'] . PHP_EOL;
}

ocifreestatement($stmt);
ocilogoff($conn);

Moderner Ersatz: oci_set_prefetch() verwenden

<?php
// Empfohlene moderne Variante statt ocisetprefetch()
$conn = oci_connect('benutzer', 'passwort', 'datenbankhost/XE');

if (!$conn) {
    $e = oci_error();
    die(htmlspecialchars($e['message']));
}

$stmt = oci_parse($conn, 'SELECT * FROM mitarbeiter');

// Moderner Aufruf mit oci_set_prefetch()
oci_set_prefetch($stmt, 100);

oci_execute($stmt);

while ($row = oci_fetch_array($stmt, OCI_ASSOC + OCI_RETURN_NULLS)) {
    echo htmlspecialchars($row['NAME']) . PHP_EOL;
}

oci_free_statement($stmt);
oci_close($conn);

// Wichtig · Fallstricke

Deprecation-Hinweis: ocisetprefetch() ist ein veralteter Alias und wurde in PHP 8.0 entfernt. Für modernen, zukunftssicheren Code ist ausschließlich oci_set_prefetch() zu verwenden.

Ein zu hoher Prefetch-Wert kann den PHP-Prozess-Speicherverbrauch stark erhöhen, da die vorgepufferten Zeilen im Arbeitsspeicher gehalten werden. Bei sehr großen Ergebnismengen oder breiten Tabellen sollte der Wert sorgfältig gewählt werden.