svn: /phpdoc/de/trunk/reference/oci8/ book.xml functions/oci-bind-array-by-name.xml functions/oci-error.xml functions/oci-fetch-all.xml functions/oci-fetch-array.xml functions/oci-fetch-assoc.xml functions/oci-fetch-object.xml functions/oci-fetch-row.xml functions/oci-fetch.xml
[email protected] (Christoph Michael Becker)
| Newsgroups | php.doc.de |
|---|---|
| Message-ID | <[email protected]> |
cmb Sat, 21 Apr 2018 15:19:04 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=344790
Log:
Sync with EN
Changed paths:
U phpdoc/de/trunk/reference/oci8/book.xml
U phpdoc/de/trunk/reference/oci8/functions/oci-bind-array-by-name.xml
U phpdoc/de/trunk/reference/oci8/functions/oci-error.xml
U phpdoc/de/trunk/reference/oci8/functions/oci-fetch-all.xml
U phpdoc/de/trunk/reference/oci8/functions/oci-fetch-array.xml
U phpdoc/de/trunk/reference/oci8/functions/oci-fetch-assoc.xml
U phpdoc/de/trunk/reference/oci8/functions/oci-fetch-object.xml
U phpdoc/de/trunk/reference/oci8/functions/oci-fetch-row.xml
U phpdoc/de/trunk/reference/oci8/functions/oci-fetch.xml
svn-diffs-344790.txt
(text/x-diff, 68.3 KB)
Modified: phpdoc/de/trunk/reference/oci8/book.xml
===================================================================
--- phpdoc/de/trunk/reference/oci8/book.xml 2018-04-21 14:40:47 UTC (rev 344789)
+++ phpdoc/de/trunk/reference/oci8/book.xml 2018-04-21 15:19:04 UTC (rev 344790)
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 331842 Maintainer: nobody Status: ready -->
+<!-- EN-Revision: 342612 Maintainer: nobody Status: ready -->
<book xml:id="book.oci8" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<?phpdoc extension-membership="bundledexternal" ?>
Modified: phpdoc/de/trunk/reference/oci8/functions/oci-bind-array-by-name.xml
===================================================================
--- phpdoc/de/trunk/reference/oci8/functions/oci-bind-array-by-name.xml 2018-04-21 14:40:47 UTC (rev 344789)
+++ phpdoc/de/trunk/reference/oci8/functions/oci-bind-array-by-name.xml 2018-04-21 15:19:04 UTC (rev 344790)
@@ -1,10 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 297028 Maintainer: sammywg Status: ready -->
+<!-- EN-Revision: 333046 Maintainer: sammywg Status: ready -->
+
<refentry xml:id="function.oci-bind-array-by-name" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>oci_bind_array_by_name</refname>
- <refpurpose>Bindet ein PHP-Array namentlich an ein Oracle-PL/SQL-Array</refpurpose>
+ <refpurpose>Bindet ein PHP-Array an einen Oracle-PL/SQL-Arrayparameter</refpurpose>
</refnamediv>
<refsect1 role="description">
@@ -156,29 +157,34 @@
<programlisting role="php">
<![CDATA[
<?php
+$conn = oci_connect("hr", "hrpwd", "localhost/XE");
+if (!$conn) {
+ $m = oci_error();
+ trigger_error(htmlentities($m['message']), E_USER_ERROR);
+}
-$c = oci_connect("scott", "tiger");
+$create = "CREATE TABLE bind_example(name VARCHAR(20))";
+$stid = oci_parse($conn, $create);
+oci_execute($stid);
-$create = "CREATE TABLE bind_beispiel(name VARCHAR(20))";
-$statement = oci_parse($c, $create);
-oci_execute($statement);
-
$create_pkg = "
CREATE OR REPLACE PACKAGE ARRAYBINDPKG1 AS
TYPE ARRTYPE IS TABLE OF VARCHAR(20) INDEX BY BINARY_INTEGER;
PROCEDURE iobind(c1 IN OUT ARRTYPE);
END ARRAYBINDPKG1;";
-$statement = oci_parse($c, $create_pkg);
-oci_execute($statement);
+$stid = oci_parse($conn, $create_pkg);
+oci_execute($stid);
$create_pkg_body = "
CREATE OR REPLACE PACKAGE BODY ARRAYBINDPKG1 AS
- CURSOR CUR IS SELECT name FROM bind_beispiel;
+ CURSOR CUR IS SELECT name FROM bind_example;
PROCEDURE iobind(c1 IN OUT ARRTYPE) IS
BEGIN
- FOR i IN 1..5 LOOP
- INSERT INTO bind_beispiel VALUES (c1(i));
- END LOOP;
+ -- Masseneinfügung
+ FORALL i IN INDICES OF c1
+ INSERT INTO bind_example VALUES (c1(i));
+
+ -- Abrufen und umkehren
IF NOT CUR%ISOPEN THEN
OPEN CUR;
END IF;
@@ -191,20 +197,17 @@
END LOOP;
END iobind;
END ARRAYBINDPKG1;";
-$statement = oci_parse($c, $create_pkg_body);
-oci_execute($statement);
+$stid = oci_parse($conn, $create_pkg_body);
+oci_execute($stid);
-$statement = oci_parse($c, "BEGIN ARRAYBINDPKG1.iobind(:c1); END;");
+$stid = oci_parse($conn, "BEGIN arraybindpkg1.iobind(:c1); END;");
+$array = array("one", "two", "three", "four", "five");
+oci_bind_array_by_name($stid, ":c1", $array, 5, -1, SQLT_CHR);
+oci_execute($stid);
-$array = array("eins", "zwei", "drei", "vier", "fuenf");
-
-oci_bind_array_by_name($statement, ":c1", $array, 5, -1, SQLT_CHR);
-
-oci_execute($statement);
-
var_dump($array);
- ?>
+?>
]]>
</programlisting>
</example>
@@ -211,15 +214,6 @@
</para>
</refsect1>
- <refsect1 role="notes">
- &reftitle.notes;
- <note>
- <para>
- Diese Funktion is seit dem OCI8-Release 1.2 verfügbar.
- </para>
- </note>
- </refsect1>
-
</refentry>
<!-- Keep this comment at the end of the file
Modified: phpdoc/de/trunk/reference/oci8/functions/oci-error.xml
===================================================================
--- phpdoc/de/trunk/reference/oci8/functions/oci-error.xml 2018-04-21 14:40:47 UTC (rev 344789)
+++ phpdoc/de/trunk/reference/oci8/functions/oci-error.xml 2018-04-21 15:19:04 UTC (rev 344790)
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 288721 Maintainer: sammywg Status: ready -->
+<!-- EN-Revision: 334605 Maintainer: sammywg Status: ready -->
<refentry xml:id="function.oci-error" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
@@ -12,11 +12,15 @@
&reftitle.description;
<methodsynopsis>
<type>array</type><methodname>oci_error</methodname>
- <methodparam choice="opt"><type>resource</type><parameter>source</parameter></methodparam>
+ <methodparam choice="opt"><type>resource</type><parameter>resource</parameter></methodparam>
</methodsynopsis>
<para>
Liefert den zuletzt gefundenen Fehler.
</para>
+ <para>
+ Die Funktion sollte unmittelbar nach dem Auftreten eines Fehlers aufgerufen
+ werden. Fehler werden durch eine erfolgreiche Anweisung gelöscht.
+ </para>
</refsect1>
<refsect1 role="parameters">
@@ -24,13 +28,14 @@
<para>
<variablelist>
<varlistentry>
- <term><parameter>source</parameter></term>
+ <term><parameter>resource</parameter></term>
<listitem>
<para>
- Der Parameter ist, bei den meisten Fehlern, der am besten geeignete
- Ressourcen-Handler. Bei Verbindungsfehlern mit
+ Bei den meisten Fehlern ist <parameter>resource</parameter> die Ressourcen-Kennung,
+ die an den fehlschlagenden Funktionsaufruf übergeben wurde. Bei Verbindungsfehlern mit
<function>oci_connect</function>, <function>oci_new_connect</function>
- oder <function>oci_pconnect</function> keinen Parameter mitgeben.
+ oder <function>oci_pconnect</function> sollte <parameter>resource</parameter>
+ nicht angegeben werden.
</para>
</listitem>
</varlistentry>
@@ -42,36 +47,55 @@
&reftitle.returnvalues;
<para>
Wenn kein Fehler gefunden wurde, liefert
- <function>oci_error</function> &false; zurück. Ein Fehler wird von
- <function>oci_error</function> als assoziatives Array zurückgegeben. In diesem
- Array enthält <literal>code</literal> den Oracle-Errorcode und
- <literal>message</literal> den Oracle-Fehlertext.
+ <function>oci_error</function> &false; zurück. Andernfalls gibt
+ <function>oci_error</function> die Fehlerinformationen als assoziatives Array.
</para>
- </refsect1>
+ <para>
+ <table>
+ <title><function>oci_error</function> Array-Beschreibung</title>
- <refsect1 role="changelog">
- &reftitle.changelog;
- <para>
- <informaltable>
- <tgroup cols="2">
+ <tgroup cols="3">
<thead>
<row>
- <entry>&Version;</entry>
+ <entry>Schlüssel</entry>
+ <entry>Typ</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
- <entry>4.3</entry>
+ <entry><literal>code</literal></entry>
+ <entry><type>integer</type></entry>
<entry>
- Im Rückgabe-Array sind nun <literal>offset</literal> und
- <literal>sqltext</literal> enthalten, die die Fehlerstelle anzeigen und
- den ursprünglichen SQL-Text, der den Fehler verusacht hat, beinhalten.
+ Die Oracle Fehlernummer.
</entry>
</row>
+ <row>
+ <entry><literal>message</literal></entry>
+ <entry><type>string</type></entry>
+ <entry>
+ Die Oracle Fehlermeldung.
+ </entry>
+ </row>
+ <row>
+ <entry><literal>offset</literal></entry>
+ <entry><type>integer</type></entry>
+ <entry>
+ Die Byteposition des Fehlers in einer SQL-Anweisung. Gab es kein Statement,
+ dann ist dies gleich <literal>0</literal>.
+ </entry>
+ </row>
+ <row>
+ <entry><literal>sqltext</literal></entry>
+ <entry><type>string</type></entry>
+ <entry>
+ Der Text der SQL-Anweisung. Gab es kein Statement, dann ist dies eine
+ leere Zeichenkette.
+ </entry>
+ </row>
</tbody>
</tgroup>
- </informaltable>
+ </table>
</para>
</refsect1>
@@ -82,11 +106,13 @@
<title>Zeigt die Oracle-Fehlermeldung nach einem Verbindungsfehler an</title>
<programlisting role="php">
<![CDATA[
-$conn = @oci_connect("scott", "tiger", "mydb");
+<?php
+$conn = oci_connect("hr", "welcome", "localhost/XE");
if (!$conn) {
- $e = oci_error(); // Bei oci_connect-Fehler ohne Handler
- echo htmlentities($e['message']);
+ $e = oci_error(); // bei oci_connect-Fehlern keine Kennung übergeben
+ trigger_error(htmlentities($e['message']), E_USER_ERROR);
}
+?>
]]>
</programlisting>
</example>
@@ -96,11 +122,13 @@
<title>Zeigt die Oracle-Fehlermeldung nach einem Parse-Error an</title>
<programlisting role="php">
<![CDATA[
-$stmt = @oci_parse($conn, "select ' from dual"); // Fehlerhafte Quottierung
-if (!$stmt) {
- $e = oci_error($conn); // Bei oci_parse-Fehler mit Verbindungs-Handler
- echo htmlentities($e['message']);
+<?php
+$stid = oci_parse($conn, "select ' from dual"); // fehlerhaftes Anführungszeichen
+if (!$stid) {
+ $e = oci_error($conn); // bei oci_parse-Fehlern Verbindungskennung übergeben
+ trigger_error(htmlentities($e['message']), E_USER_ERROR);
}
+?>
]]>
</programlisting>
</example>
@@ -108,20 +136,23 @@
<para>
<example>
<title>
- Zeigt die Oracle-Fehlermeldung und das problematische Statement
- nach einem Ausführungsfehler
+ Anzeigen der Oracle-Fehlermeldung, der problematische Anweisung und der Position
+ des Problems nach einem Ausführungsfehler
</title>
<programlisting role="php">
<![CDATA[
-$r = oci_execute($stmt);
+<?php
+$stid = oci_parse($conn, "select does_not_exist from dual");
+$r = oci_execute($stid);
if (!$r) {
- $e = oci_error($stmt); // Bei oci_execute-Fehler mit Statement-Handle
- echo htmlentities($e['message']);
- echo "<pre>";
- echo htmlentities($e['sqltext']);
- printf("\n%".($e['offset']+1)."s", "^");
- echo "</pre>";
+ $e = oci_error($stid); // bei oci_execute-Fehlern die Anweisungskennung übergeben
+ print htmlentities($e['message']);
+ print "\n<pre>\n";
+ print htmlentities($e['sqltext']);
+ printf("\n%".($e['offset']+1)."s", "^");
+ print "\n</pre>\n";
}
+?>
]]>
</programlisting>
</example>
@@ -128,18 +159,6 @@
</para>
</refsect1>
- <refsect1 role="notes">
- &reftitle.notes;
- <note>
- <para>
- In der PHP-Versionen vor 5.0.0 muss man <function>ocierror</function>
- benutzen. Den Namen kann man immer noch nutzen. Er wurde als Alias für
- <function>oci_error</function> für die Abwärtskompatibilität
- erhalten. Dieses ist allerdings veraltet und wird nicht empfohlen.
- </para>
- </note>
- </refsect1>
-
</refentry>
Modified: phpdoc/de/trunk/reference/oci8/functions/oci-fetch-all.xml
===================================================================
--- phpdoc/de/trunk/reference/oci8/functions/oci-fetch-all.xml 2018-04-21 14:40:47 UTC (rev 344789)
+++ phpdoc/de/trunk/reference/oci8/functions/oci-fetch-all.xml 2018-04-21 15:19:04 UTC (rev 344790)
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 288721 Maintainer: sammywg Status: ready -->
+<!-- EN-Revision: 333038 Maintainer: sammywg Status: ready -->
<refentry xml:id="function.oci-fetch-all" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>oci_fetch_all</refname>
- <refpurpose>Holt alle Reihen der Ergebnisdaten in ein Array</refpurpose>
+ <refpurpose>Holt mehrere Reihen einer Abfrage in ein zweidimensionales Array</refpurpose>
</refnamediv>
<refsect1 role="description">
@@ -16,12 +16,16 @@
<methodparam><type>array</type><parameter role="reference">output</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>skip</parameter><initializer>0</initializer></methodparam>
<methodparam choice="opt"><type>int</type><parameter>maxrows</parameter><initializer>-1</initializer></methodparam>
- <methodparam choice="opt"><type>int</type><parameter>flags</parameter><initializer>0</initializer></methodparam>
+ <methodparam choice="opt"><type>int</type><parameter>flags</parameter><initializer><constant>OCI_FETCHSTATEMENT_BY_COLUMN</constant> + <constant>OCI_ASSOC</constant></initializer></methodparam>
</methodsynopsis>
<para>
- Holt alle Reihen eines Ergebnisses in einem benutzerdefinierten Array.
+ Holt mehrere Zeilen einer Abfrage in ein zweidimensionales Array. Standardmäßig
+ werden alle Zeilen zurückgeliefert.
</para>
- &oci.datatypes;
+ <para>
+ Diese Funktion kann nur einmal für jede Abfrage, die mit
+ <function>oci_execute</function> ausgeführt wurde, aufgerufen werden.
+ </para>
</refsect1>
<refsect1 role="parameters">
@@ -31,15 +35,23 @@
<varlistentry>
<term><parameter>statement</parameter></term>
<listitem>
- <para>
- Ein Zeiger auf eine gültige OCI-Anweisung.
- </para>
+ &oci.arg.statement.id;
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>output</parameter></term>
<listitem>
- &database.fetch-null;
+ <para>
+ Die Variable, die die gelieferten Zeilen enthalten wird.
+ </para>
+ <para>
+ LOB-Spalten werden als Zeichenketten zurückgegeben, wo Oracle die
+ Umwandlung unterstützt.
+ </para>
+ <para>
+ Informationen wie Daten und Typen geholt werden, sind der Dokumentation von
+ <function>oci_fetch_array</function> zu entnehmen.
+ </para>
</listitem>
</varlistentry>
<varlistentry>
@@ -46,8 +58,8 @@
<term><parameter>skip</parameter></term>
<listitem>
<para>
- Die Anzahl der zu ignorierenden Anfangszeilen beim Holen des Ergebnisses
- (Standardwert ist 0, um mit der ersten Zeile zu beginnen).
+ Die Anzahl der zu verwerfenden Anfangszeilen beim Holen des Ergebnisses.
+ Standardwert ist 0, so dass von der ersten Zeile an zurückgegeben wird.
</para>
</listitem>
</varlistentry>
@@ -55,8 +67,8 @@
<term><parameter>maxrows</parameter></term>
<listitem>
<para>
- Anzahl der zu lesenden Zeilen ab der <parameter>skip</parameter>ten Zeile
- (Standard ist -1, um alle Zeilen zu holen).
+ Die Anzahl der zurückzugebenden Zeilen. Der Standardwert ist -1, was bedeutet
+ dass alle Zeilen von <parameter>skip</parameter> + 1 an zurückgegeben werden.
</para>
</listitem>
</varlistentry>
@@ -64,23 +76,82 @@
<term><parameter>flags</parameter></term>
<listitem>
<para>
- Der Parameter <parameter>flags</parameter> kann eine beliebige
- Kombination aus dem folgenden Konstanten sein:
- <simplelist>
- <member>
- <constant>OCI_FETCHSTATEMENT_BY_ROW</constant>
- </member>
- <member>
- <constant>OCI_FETCHSTATEMENT_BY_COLUMN</constant> (Standardwert)
- </member>
- <member>
- <constant>OCI_NUM</constant>
- </member>
- <member>
- <constant>OCI_ASSOC</constant>
- </member>
- </simplelist>
+ Der Parameter <parameter>flags</parameter> legt die Array-Struktur fest,
+ und ob assoziative Arrays verwendet werden sollen.
+ <table>
+ <title><function>oci_fetch_all</function> Array-Struktur-Modi</title>
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>Konstante</entry>
+ <entry>Beschreibung</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry><constant>OCI_FETCHSTATEMENT_BY_ROW</constant></entry>
+ <entry>
+ Das äußere Array wird ein Unterarray pro Abfragezeile enthalten.
+ </entry>
+ </row>
+ <row>
+ <entry><constant>OCI_FETCHSTATEMENT_BY_COLUMN</constant></entry>
+ <entry>
+ Das äußere Array wird ein Unterarray pro Abfragespalte enthalten.
+ Das ist der Standardwert.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
</para>
+ <para>
+ Arrays können entweder nach Spaltennamen oder numerisch indexiert werden.
+ Nur ein Index-Modus wird zurückgegeben.
+ <table>
+ <title><function>oci_fetch_all</function> Array-Index-Modi</title>
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>Konstante</entry>
+ <entry>Beschreibung</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry><constant>OCI_NUM</constant></entry>
+ <entry>
+ Numerische Indizes werden für das Array jeder Spalte verwendet.
+ </entry>
+ </row>
+ <row>
+ <entry><constant>OCI_ASSOC</constant></entry>
+ <entry>
+ Assoziative Indizes werden für das Array jeder Spalte verwendet.
+ Das ist der Standardwert.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </para>
+ <para>
+ Der Additionsoperator "+" ist zu verwenden, um eine Kombination
+ von Array-Struktur- und -Index-Modus zu wählen.
+ </para>
+ <para>
+ Für Spaltennamen, die Groß- und Kleinschreibung nicht unterscheiden, was bei
+ Oracle der Standard ist, werden Arrayschlüssel in Großschreibung verwendet.
+ Spalten, die Groß- und Kleinschreibung unterscheiden, verwenden die genaue
+ Schreibweise.
+ <function>var_dump</function> kann auf dem <parameter>output</parameter>
+ angewendet werden, um die richtige Schreibweise für jede Abfrage zu prüfen.
+ </para>
+ <para>
+ Abfragen, die mehr als eine Spalte mit demselben Namen haben, sollten
+ Spaltenaliase verwenden. Andernfalls wird nur einer der Spalten in einem
+ assoziativen Array auftauchen.
+ </para>
</listitem>
</varlistentry>
</variablelist>
@@ -90,7 +161,8 @@
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
- Liefert die Anzahl der abgerufenen Zeilen oder &false; bei einem Fehler.
+ Gibt die Anzahl der Zeile in <parameter>output</parameter> zurück, die 0 oder
+ mehr sein kann. &return.falseforfailure;
</para>
</refsect1>
@@ -102,43 +174,155 @@
<programlisting role="php">
<![CDATA[
<?php
-/* oci_fetch_all example mbritton at verinet dot com (990624) */
-$conn = oci_connect("scott", "tiger");
+$conn = oci_connect('hr', 'welcome', 'localhost/XE');
+if (!$conn) {
+ $e = oci_error();
+ trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
+}
-$stmt = oci_parse($conn, "select * from emp");
+$stid = oci_parse($conn, 'SELECT POSTAL_CODE, CITY FROM locations WHERE ROWNUM < 3');
+oci_execute($stid);
-oci_execute($stmt);
+$nrows = oci_fetch_all($stid, $res);
-$nrows = oci_fetch_all($stmt, $results);
-if ($nrows > 0) {
- echo "<table border=\"1\">\n";
- echo "<tr>\n";
- foreach ($results as $key => $val) {
- echo "<th>$key</th>\n";
- }
- echo "</tr>\n";
+echo "$nrows Zeilen geholt<br>\n";
+var_dump($res);
- for ($i = 0; $i < $nrows; $i++) {
- echo "<tr>\n";
- foreach ($results as $data) {
- echo "<td>$data[$i]</td>\n";
- }
- echo "</tr>\n";
- }
- echo "</table>\n";
-} else {
- echo "Keine Daten gefunden<br />\n";
+// die var_dump Ausgabe ist:
+// 2 Zeilen geholt
+// array(2) {
+// ["POSTAL_CODE"]=>
+// array(2) {
+// [0]=>
+// string(6) "00989x"
+// [1]=>
+// string(6) "10934x"
+// }
+// ["CITY"]=>
+// array(2) {
+// [0]=>
+// string(4) "Rom"
+// [1]=>
+// string(6) "Venedig"
+// }
+// }
+
+// ordentliche Ausgabe der Ergebnisse
+echo "<table border='1'>\n";
+foreach ($res as $col) {
+ echo "<tr>\n";
+ foreach ($col as $item) {
+ echo " <td>".($item !== null ? htmlentities($item, ENT_QUOTES) : "")."</td>\n";
+ }
+ echo "</tr>\n";
}
-echo "$nrows Einträge selektiert<br />\n";
+echo "</table>\n";
-oci_free_statement($stmt);
+oci_free_statement($stid);
oci_close($conn);
+
?>
]]>
</programlisting>
</example>
</para>
+ <para>
+ <example>
+ <title><function>oci_fetch_all</function> Beispiel mit <constant>OCI_FETCHSTATEMENT_BY_ROW</constant></title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+
+$conn = oci_connect('hr', 'welcome', 'localhost/XE');
+if (!$conn) {
+ $e = oci_error();
+ trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
+}
+
+$stid = oci_parse($conn, 'SELECT POSTAL_CODE, CITY FROM locations WHERE ROWNUM < 3');
+oci_execute($stid);
+
+$nrows = oci_fetch_all($stid, $res, null, null, OCI_FETCHSTATEMENT_BY_ROW);
+
+echo "$nrows Zeilen geholt<br>\n";
+var_dump($res);
+
+// die Ausgabe ist:
+// 2 Zeilen geholt
+// array(2) {
+// [0]=>
+// array(2) {
+// ["POSTAL_CODE"]=>
+// string(6) "00989x"
+// ["CITY"]=>
+// string(4) "Rom"
+// }
+// [1]=>
+// array(2) {
+// ["POSTAL_CODE"]=>
+// string(6) "10934x"
+// ["CITY"]=>
+// string(6) "Venedig"
+// }
+// }
+
+oci_free_statement($stid);
+oci_close($conn);
+
+?>
+]]>
+ </programlisting>
+ </example>
+ </para>
+ <para>
+ <example>
+ <title><function>oci_fetch_all</function> mit <constant>OCI_NUM</constant></title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+
+$conn = oci_connect('hr', 'welcome', 'localhost/XE');
+if (!$conn) {
+ $e = oci_error();
+ trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
+}
+
+$stid = oci_parse($conn, 'SELECT POSTAL_CODE, CITY FROM locations WHERE ROWNUM < 3');
+oci_execute($stid);
+
+$nrows = oci_fetch_all($stid, $res, null, null, OCI_FETCHSTATEMENT_BY_ROW + OCI_NUM);
+
+echo "$nrows Zeilen geholt<br>\n";
+var_dump($res);
+
+// die Ausgabe ist:
+// 2 Zeilen geholt
+// array(2) {
+// [0]=>
+// array(2) {
+// [0]=>
+// string(6) "00989x"
+// [1]=>
+// string(4) "Rom"
+// }
+// [1]=>
+// array(2) {
+// [0]=>
+// string(6) "10934x"
+// [1]=>
+// string(6) "Venedig"
+// }
+// }
+
+oci_free_statement($stid);
+oci_close($conn);
+
+?>
+]]>
+ </programlisting>
+ </example>
+ </para>
</refsect1>
<refsect1 role="notes">
@@ -145,14 +329,47 @@
&reftitle.notes;
<note>
<para>
- In der PHP-Versionen vor 5.0.0 muss man <function>ocifetchstatement</function>
- benutzen. Den Namen kann man immer noch nutzen. Er wurde als Alias für
- <function>oci_fetch_all</function> für die Abwärtskompatibilität
- erhalten. Dieses ist allerdings veraltet und wird nicht empfohlen.
+ Die Verwendung von <parameter>skip</parameter> ist sehr ineffizient. All die
+ zu überspringenden Zeilen sind in der Ergebnismenge, die von der Datenbank an
+ PHP zurückgegeben wird. Dann werden sie verworfen. Es ist effizienter SQL zu
+ nutzen, um Offset und Bereich der Zeilen in der Abfrage zu beschränken.
+ Ein Beispiel kann der Dokumentation von <function>oci_fetch_array</function>
+ entnommen werden.
</para>
</note>
+ <note>
+ <para>
+ Abfragen, die eine große Anzahl von Zeilen liefern, sind speichereffizienter,
+ wenn eine Funktion wie <function>oci_fetch_array</function>, die nur einzelne
+ Zeilen holt, verwendet wird.
+ </para>
+ </note>
+ <note>
+ &oci.use.setprefetch;
+ </note>
+ <note>
+ <para>
+ Dies gibt keine Zeilen von "Implizeten Ergebnismengen" von Oracle Database
+ 12<emphasis>c</emphasis> zurück.
+ Statt dessen ist <function>oci_fetch_array</function> zu verwenden.
+ </para>
+ </note>
</refsect1>
+ <refsect1 role="seealso">
+ &reftitle.seealso;
+ <para>
+ <simplelist>
+ <member><function>oci_fetch</function></member>
+ <member><function>oci_fetch_array</function></member>
+ <member><function>oci_fetch_assoc</function></member>
+ <member><function>oci_fetch_object</function></member>
+ <member><function>oci_fetch_row</function></member>
+ <member><function>oci_set_prefetch</function></member>
+ </simplelist>
+ </para>
+ </refsect1>
+
</refentry>
<!-- Keep this comment at the end of the file
Modified: phpdoc/de/trunk/reference/oci8/functions/oci-fetch-array.xml
===================================================================
--- phpdoc/de/trunk/reference/oci8/functions/oci-fetch-array.xml 2018-04-21 14:40:47 UTC (rev 344789)
+++ phpdoc/de/trunk/reference/oci8/functions/oci-fetch-array.xml 2018-04-21 15:19:04 UTC (rev 344790)
@@ -1,13 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 288721 Maintainer: sammywg Status: ready -->
+<!-- EN-Revision: 333047 Maintainer: sammywg Status: ready -->
<refentry xml:id="function.oci-fetch-array" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>oci_fetch_array</refname>
- <refpurpose>Liefert die nächste Zeile der Ergebnisdaten als
- assoziatives und/oder numerisches Array
- </refpurpose>
+ <refpurpose>Liefert die nächste Zeile einer Abfrage als assoziatives oder numerisches Array</refpurpose>
</refnamediv>
<refsect1 role="description">
@@ -18,14 +16,19 @@
<methodparam choice="opt"><type>int</type><parameter>mode</parameter></methodparam>
</methodsynopsis>
<para>
- Liefert ein Array, welches mit der nächsten Ergebniszeile übereinstimmt.
+ Gibt ein Array zurück, das die nächste Zeile der Ergebnismenge einer Abfrage
+ enthält. Jedes Array-Element entspricht einer Spalte der Zeile. Diese Funktion
+ wird üblicherweise in einer Schleife aufgerufen, bis sie &false; zurückgibt,
+ was anzeigt, dass es keine weiteren Zeilen gibt.
</para>
- &oci.datatypes;
<para>
- Es sollte hier noch erwähnt sein, das <function>oci_fetch_array</function>
- nur <emphasis>unwesentlich</emphasis> langsamer als
- <function>oci_fetch_row</function>, dafür aber viel handlicher ist.
+ Bezieht sich <parameter>statement</parameter> auf einen PL/SQL-Block, der
+ "Implizite Ergebnismengen" von Oracle Database 12c zurückgibt, dann werden Zeilen
+ aller Mengen nacheinander geholt. Wurde <parameter>statement</parameter> von
+ <function>oci_get_implicit_resultset</function> zurückgegeben, dann wird nur
+ die Untermenge der Zeilen für eine Kindabfrage zurückgegeben.
</para>
+ &oci.datatypes;
</refsect1>
<refsect1 role="parameters">
@@ -35,8 +38,10 @@
<varlistentry>
<term><parameter>statement</parameter></term>
<listitem>
+ &oci.arg.statement.id;
<para>
- Ein Zeiger auf eine gültige OCI-Anweisung.
+ Kann ebenfalls eine Anweisungskennung sein, die von
+ <function>oci_get_implicit_resultset</function> zurückgegeben wurde.
</para>
</listitem>
</varlistentry>
@@ -46,30 +51,61 @@
<para>
Der optionale zweite Parameter kann eine beliebige
Kombination aus dem folgenden Konstanten sein:
- <simplelist>
- <member>
- <constant>OCI_BOTH</constant> - liefert ein Array sowohl mit assoziativen
- als auch numerischem Index (gleichzusetzen mit <constant>OCI_ASSOC</constant>
- + <constant>OCI_NUM</constant>). Dieses ist das Standardverhalten.
- </member>
- <member>
- <constant>OCI_ASSOC</constant> - liefert ein assiziatives Array
- (funktioniert wie <function>oci_fetch_assoc</function>).
- </member>
- <member>
- <constant>OCI_NUM</constant> - liefert ein indiziertes Array
- (funktioniert wie <function>oci_fetch_row</function>).
- </member>
- <member>
- <constant>OCI_RETURN_NULLS</constant> - erstellt leere Elemente
- für &null;-Felder.
- </member>
- <member>
- <constant>OCI_RETURN_LOBS</constant> - liefert den Wert eines LOB-Deskriptors.
- </member>
- </simplelist>
- Standard für <parameter>mode</parameter> ist <constant>OCI_BOTH</constant>.
+ <table>
+ <title><function>oci_fetch_array</function> Modi</title>
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>Konstante</entry>
+ <entry>Beschreibung</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry><constant>OCI_BOTH</constant></entry>
+ <entry>
+ Gibt ein Array mit sowohl assoziativen als auch numerischen Indizes
+ zurück. Das ist dasselbe wie <constant>OCI_ASSOC</constant> +
+ <constant>OCI_NUM</constant>, und ist das Standardverhalten.
+ </entry>
+ </row>
+ <row>
+ <entry><constant>OCI_ASSOC</constant></entry>
+ <entry>
+ Gibt ein assoziatives Array zurück.
+ </entry>
+ </row>
+ <row>
+ <entry><constant>OCI_NUM</constant></entry>
+ <entry>
+ Gibt ein numerisches Array zurück.
+ </entry>
+ </row>
+ <row>
+ <entry><constant>OCI_RETURN_NULLS</constant></entry>
+ <entry>
+ Erzeugt Elemente für &null;-Felder. Die Elementwerte sind PHP
+ &null;-Werte.
+ </entry>
+ </row>
+ <row>
+ <entry><constant>OCI_RETURN_LOBS</constant></entry>
+ <entry>
+ Gibt den Inhalt von LOBs statt den LOB-Kennungen zurück.
+ descriptors.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
</para>
+ <para>
+ Der Standard <parameter>mode</parameter> ist <constant>OCI_BOTH</constant>.
+ </para>
+ <para>
+ Der Additionsoperator "+" ist zu verwenden, um mehr als
+ einen Modus auf einmal anzugeben.
+ </para>
</listitem>
</varlistentry>
</variablelist>
@@ -79,16 +115,34 @@
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
- Liefert ein Array sowohl mit assoziativem wie numerischem Index oder &false;,
- wenn es keine weiteren Zeilen für das <parameter>statement</parameter> gibt.
+ Liefert ein Array mit assoziativem und/oder numerischem Index.
+ Gibt es keine weiteren Zeilen in <parameter>statement</parameter>,
+ wird &false; zurückgegeben.
</para>
- &database.fetch-null;
- <note>
- <simpara>
- Oracle liefert alle Feldnamen in Großschrift zurück, daher sind auch
- die assoziativen Indizes im Ergebnisarray in Großschrift.
- </simpara>
- </note>
+ <para>
+ Standardmäßig werden <literal>LOB</literal>-Spalten als LOB-Kennungen zurückgegeben.
+ </para>
+ <para>
+ <literal>DATE</literal>-Spalten werden als gemäß des aktuellen Datumsformats
+ formatierte Zeichenketten zurückgegeben. Das Standardformat kann mit Oracle
+ Umgebungsvariablen wie <literal>NLS_LANG</literal> geändert werden, oder auch
+ durch einen zuvor ausgeführten <literal>ALTER SESSION SET NLS_DATE_FORMAT</literal>
+ Befehl.
+ </para>
+ <para>
+ Die standardmäßigen Oracle Spaltennamen, die nicht zwischen Groß- und Kleinschreibung
+ unterscheiden, erzeugen Arrayschlüssel in Großbuchstaben. Spaltennamen, die
+ zwischen Groß- und Kleinschreibung unterscheiden, verwenden die genaue Schreibweise.
+ <function>var_dump</function> kann auf das Ergebnisarray angewendet werden,
+ um die richtige Schreibweise für jede Abfrage zu prüfen.
+ </para>
+ <para>
+ Der Tabellenname ist nicht im Arrayschlüssel enthalten. Enthält die Abfrage
+ zwei unterschiedliche Spalten mit demselben Namen ist <constant>OCI_NUM</constant>
+ zu verwenden, oder ein Spaltenalias sollte in der Abfrage definiert werden,
+ um die Eindeutigkeit der Namen sicherzustellen; siehe Beispiel #7. Andernfalls
+ wird nur eine der Spalten von PHP zurückgegeben.
+ </para>
</refsect1>
<refsect1 role="examples">
@@ -95,21 +149,29 @@
&reftitle.examples;
<para>
<example>
- <title><function>oci_fetch_array</function> mit <constant>OCI_BOTH</constant>-Beispiel</title>
+ <title><function>oci_fetch_array</function> mit <constant>OCI_BOTH</constant></title>
<programlisting role="php">
<![CDATA[
<?php
-$connection = oci_connect("apelsin", "kanistra");
-$query = "SELECT id, name FROM fruechte";
+$conn = oci_connect('hr', 'welcome', 'localhost/XE');
+if (!$conn) {
+ $e = oci_error();
+ trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
+}
-$statement = oci_parse ($connection, $query);
-oci_execute ($statement);
+$stid = oci_parse($conn, 'SELECT department_id, department_name FROM departments');
+oci_execute($stid);
-while ($row = oci_fetch_array ($statement, OCI_BOTH)) {
- echo $row[0]." und ".$row['ID']." ist gleich<br>";
- echo $row[1]." und ".$row['NAME']." ist gleich<br>";
+while (($row = oci_fetch_array($stid, OCI_BOTH)) != false) {
+ // verwende Spaltennamen in Großschreibung für die assoziativen Arrayschlüssel
+ echo $row[0] . " und " . $row['DEPARTMENT_ID'] . " sind dasselbe<br>\n";
+ echo $row[1] . " und " . $row['DEPARTMENT_NAME'] . " sind dasselbe<br>\n";
}
+
+oci_free_statement($stid);
+oci_close($conn);
+
?>
]]>
</programlisting>
@@ -117,23 +179,39 @@
</para>
<para>
<example>
- <title><function>oci_fetch_array</function> mit
- <constant>OCI_NUM</constant>-Beispiel</title>
+ <title><function>oci_fetch_array</function> mit <constant>OCI_NUM</constant></title>
<programlisting role="php">
<![CDATA[
<?php
-$connection = oci_connect("user", "password");
-$query = "SELECT id, name, lob_field FROM fruechte";
+/*
+ Vor der Ausführung ist die Tabelle zu erstellen:
+ CREATE TABLE mytab (id NUMBER, description CLOB);
+ INSERT INTO mytab (id, description) values (1, 'Eine sehr lange Zeichenkette');
+ COMMIT;
+*/
-$statement = oci_parse ($connection, $query);
-oci_execute ($statement);
+$conn = oci_connect('hr', 'welcome', 'localhost/XE');
+if (!$conn) {
+ $e = oci_error();
+ trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
+}
-while ($row = oci_fetch_array ($statement, OCI_NUM)) {
- echo $row[0]."<br>";
- echo $row[1]."<br>";
- echo $row[2]->read(100)."<br>"; // dies gibt die ersten 100 Bytes des LOBs aus
+$stid = oci_parse($conn, 'SELECT id, description FROM mytab');
+oci_execute($stid);
+
+while (($row = oci_fetch_array($stid, OCI_NUM)) != false) {
+ echo $row[0] . "<br>\n";
+ echo $row[1]->read(15) . "<br>\n"; // dies gibt die ersten 15 Bytes von DESCRIPTION aus
}
+
+// die Ausgabe ist:
+// 1
+// Eine sehr lange
+
+oci_free_statement($stid);
+oci_close($conn);
+
?>
]]>
</programlisting>
@@ -141,23 +219,38 @@
</para>
<para>
<example>
- <title><function>oci_fetch_array</function> mit
- <constant>OCI_ASSOC</constant>-Beispiel</title>
+ <title><function>oci_fetch_array</function> mit <constant>OCI_ASSOC</constant></title>
<programlisting role="php">
<![CDATA[
<?php
-$connection = oci_connect("user", "password");
+/*
+ Vor der Ausführung ist die Tabelle zu erstellen:
+ CREATE TABLE mytab (id NUMBER, description CLOB);
+ INSERT INTO mytab (id, description) values (1, 'Eine sehr lange Zeichenkette');
+ COMMIT;
+*/
-$query = "SELECT id, name, lob_field FROM fruechte";
+$conn = oci_connect('hr', 'welcome', 'localhost/XE');
+if (!$conn) {
+ $e = oci_error();
+ trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
+}
-$statement = oci_parse ($connection, $query);
-oci_execute ($statement);
+$stid = oci_parse($conn, 'SELECT id, description FROM mytab');
+oci_execute($stid);
-while ($row = oci_fetch_array ($statement, OCI_ASSOC)) {
- echo $row['ID']."<br>";
- echo $row['NAME']."<br>";
- echo $row['LOB_FIELD']."<br>"; // dies gibt "Object id #1" aus
+while (($row = oci_fetch_array($stid, OCI_ASSOC)) != false) {
+ echo $row['ID'] . "<br>\n";
+ echo $row['DESCRIPTION']->read(15) . "<br>\n"; // dies gibt die ersten 15 Bytes von DESCRIPTION aus
}
+
+// die Ausgabe ist:
+// 1
+// Eine sehr lange
+
+oci_free_statement($stid);
+oci_close($conn);
+
?>
]]>
</programlisting>
@@ -165,38 +258,426 @@
</para>
<para>
<example>
- <title><function>oci_fetch_array</function> mit
- <constant>OCI_RETURN_LOBS</constant>-Beispiel</title>
+ <title><function>oci_fetch_array</function> mit <constant>OCI_RETURN_NULLS</constant></title>
<programlisting role="php">
<![CDATA[
<?php
-$connection = oci_connect("user", "password");
-$query = "SELECT id, name, lob_field FROM fruechte";
+$conn = oci_connect('hr', 'welcome', 'localhost/XE');
+if (!$conn) {
+ $e = oci_error();
+ trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
+}
-$statement = oci_parse ($connection, $query);
-oci_execute ($statement);
+$stid = oci_parse($conn, 'SELECT 1, null FROM dual');
+oci_execute($stid);
+while (($row = oci_fetch_array ($stid, OCI_ASSOC)) != false) { // ignoriere NULL-Werte
+ var_dump($row);
+}
-while ($row = oci_fetch_array ($statement, (OCI_NUM+OCI_RETURN_LOBS))) {
- echo $row[0]."<br>";
- echo $row[1]."<br>";
- echo $row['LOB_FIELD']."<br>"; // dies gibt den Inhalt des LOBs aus
+/*
+Der obige Code gibt aus:
+ array(1) {
+ [1]=>
+ string(1) "1"
+ }
+*/
+
+$stid = oci_parse($conn, 'SELECT 1, null FROM dual');
+oci_execute($stid);
+while (($row = oci_fetch_array ($stid, OCI_ASSOC+OCI_RETURN_NULLS)) != false) { // hole NULL-Werte
+ var_dump($row);
}
+
+/*
+Der obige Code gibt aus:
+ array(2) {
+ [1]=>
+ string(1) "1"
+ ["NULL"]=>
+ NULL
+ }
+*/
+
?>
]]>
</programlisting>
</example>
</para>
+ <para>
+ <example>
+ <title><function>oci_fetch_array</function> mit <constant>OCI_RETURN_LOBS</constant></title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+
+/*
+ Vor der Ausführung ist die Tabelle zu erstellen:
+ CREATE TABLE mytab (id NUMBER, description CLOB);
+ INSERT INTO mytab (id, description) values (1, 'Eine sehr lange Zeichenkette');
+ COMMIT;
+*/
+
+$conn = oci_connect('hr', 'welcome', 'localhost/XE');
+if (!$conn) {
+ $e = oci_error();
+ trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
+}
+
+$stid = oci_parse($conn, 'SELECT id, description FROM mytab');
+oci_execute($stid);
+
+while (($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_LOBS)) != false) {
+ echo $row['ID'] . "<br>\n";
+ echo $row['DESCRIPTION'] . "<br>\n"; // dies enthält die gesamte DESCRIPTION
+ // das Freigeben der großen Variable in einer Schleife vor dem zweiten Fetch
+ // verringert die Spitzenspeicherbelegung von PHP
+ unset($row);
+}
+
+// die Ausgabe ist:
+// 1
+// Eine sehr lange Zeichenkette
+
+oci_free_statement($stid);
+oci_close($conn);
+
+?>
+]]>
+ </programlisting>
+ </example>
+ </para>
+ <para>
+ <example>
+ <title><function>oci_fetch_array</function> mit Spaltennamen, die zwischen Groß- und Kleinschreibung unterscheiden</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+
+/*
+ Vor der Ausführung ist die Tabelle zu erstellen:
+ CREATE TABLE mytab ("Name" VARCHAR2(20), city VARCHAR2(20));
+ INSERT INTO mytab ("Name", city) values ('Chris', 'Melbourne');
+ COMMIT;
+*/
+
+$conn = oci_connect('hr', 'welcome', 'localhost/XE');
+if (!$conn) {
+ $e = oci_error();
+ trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
+}
+
+$stid = oci_parse($conn, 'select * from mytab');
+oci_execute($stid);
+$row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS);
+
+// Da 'Name' als Spalte erstellt wurde, die zwischen Groß- und Kleinschreibung
+// unterscheidet, muss genau dieselbe Schreibweise für den Arrayschlüssel
+// verwendet werden. Allerding muss das groß geschriebene 'CITY' für den Spaltenschlüssel
+// verwendet werden, der nicht zwischen Groß- und Kleinschreibung unterscheidet.
+print $row['Name'] . "<br>\n"; // gibt Chris aus
+print $row['CITY'] . "<br>\n"; // gibt Melbourne aus
+
+oci_free_statement($stid);
+oci_close($conn);
+
+?>
+]]>
+ </programlisting>
+ </example>
+ </para>
+ <para>
+ <example>
+ <title><function>oci_fetch_array</function> mit Spalten, die doppelte Namen haben</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+
+/*
+ Vor der Ausführung ist die Tabelle zu erstellen:
+ CREATE TABLE mycity (id NUMBER, name VARCHAR2(20));
+ INSERT INTO mycity (id, name) values (1, 'Melbourne');
+ CREATE TABLE mycountry (id NUMBER, name VARCHAR2(20));
+ INSERT INTO mycountry (id, name) values (1, 'Australien');
+ COMMIT;
+*/
+
+$conn = oci_connect('hr', 'welcome', 'localhost/XE');
+if (!$conn) {
+ $e = oci_error();
+ trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
+}
+
+$sql = 'SELECT mycity.name, mycountry.name
+ FROM mycity, mycountry
+ WHERE mycity.id = mycountry.id';
+$stid = oci_parse($conn, $sql);
+oci_execute($stid);
+$row = oci_fetch_array($stid, OCI_ASSOC);
+var_dump($row);
+
+// die Ausgabe enthält nur ein "NAME"-Element:
+// array(1) {
+// ["NAME"]=>
+// string(9) "Australien"
+// }
+
+// um einen sich wiederholenden Spaltennamen abzufragen, ist ein SQL-Spaltenalias
+// wie "AS ctnm" zu verwenden:
+$sql = 'SELECT mycity.name AS ctnm, mycountry.name
+ FROM mycity, mycountry
+ WHERE mycity.id = mycountry.id';
+$stid = oci_parse($conn, $sql);
+oci_execute($stid);
+$row = oci_fetch_array($stid, OCI_ASSOC);
+var_dump($row);
+
+// die Ausgabe enthält nun die beiden gewählten Spalten:
+// array(2) {
+// ["CTNM"]=>
+// string(9) "Melbourne"
+// ["NAME"]=>
+// string(9) "Australien"
+// }
+
+
+oci_free_statement($stid);
+oci_close($conn);
+
+?>
+]]>
+ </programlisting>
+ </example>
+ </para>
+ <para>
+ <example>
+ <title><function>oci_fetch_array</function> mit <literal>DATE</literal>-Spalten</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+
+$conn = oci_connect('hr', 'welcome', 'localhost/XE');
+if (!$conn) {
+ $e = oci_error();
+ trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
+}
+
+// Lege das Datumsformat für diese Verbindung fest.
+// Aus Effizienzgründen ist zu erwägen, das Format statt dessen in einem Trigger
+// oder mit Umgebungsvariablen zu ändern.
+$stid = oci_parse($conn, "ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD'");
+oci_execute($stid);
+
+$stid = oci_parse($conn, 'SELECT hire_date FROM employees WHERE employee_id = 188');
+oci_execute($stid);
+$row = oci_fetch_array($stid, OCI_ASSOC);
+echo $row['HIRE_DATE'] . "<br>\n"; // gibt 1997-06-14 aus
+
+oci_free_statement($stid);
+oci_close($conn);
+
+?>
+]]>
+ </programlisting>
+ </example>
+ </para>
+ <para>
+ <example>
+ <title><function>oci_fetch_array</function> mit <literal>REF CURSOR</literal></title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+/*
+ Erzeuge die PL/SQL gespeicherte Prozedur mit:
+
+ CREATE OR REPLACE PROCEDURE myproc(p1 OUT SYS_REFCURSOR) AS
+ BEGIN
+ OPEN p1 FOR SELECT * FROM all_objects WHERE ROWNUM < 5000;
+ END;
+*/
+
+$conn = oci_connect('hr', 'welcome', 'localhost/XE');
+if (!$conn) {
+ $e = oci_error();
+ trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
+}
+
+$stid = oci_parse($conn, 'BEGIN myproc(:rc); END;');
+$refcur = oci_new_cursor($conn);
+oci_bind_by_name($stid, ':rc', $refcur, -1, OCI_B_CURSOR);
+oci_execute($stid);
+
+// führe den zurückgegebenen REF CURSOR aus, und lies
+// von ihm wie mit einer Anweisungskennung
+oci_execute($refcur);
+echo "<table border='1'>\n";
+while (($row = oci_fetch_array($refcur, OCI_ASSOC+OCI_RETURN_NULLS)) != false) {
+ 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($refcur);
+oci_free_statement($stid);
+oci_close($conn);
+
+?>
+]]>
+ </programlisting>
+ </example>
+ </para>
+ <para>
+ <example>
+ <title>Paginierung mit <function>oci_fetch_array</function> unter Verwendung einer <literal>LIMIT</literal>-Klausel</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+
+$conn = oci_connect('hr', 'welcome', 'localhost/XE');
+if (!$conn) {
+ $e = oci_error();
+ trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
+}
+
+// ermittle die Datenbankversion
+preg_match('/Release ([0-9]+)\./', oci_server_version($conn), $matches);
+$oracleversion = $matches[1];
+
+// dies ist die Abfrage, durch die seitenweise "geblättert" werden soll
+$sql = 'SELECT city, postal_code FROM locations ORDER BY city';
+
+if ($oracleversion >= 12) {
+ // verwende die OFFSET / FETCH NEXT Syntax von Oracle 12c
+ $sql = $sql . ' OFFSET :offset ROWS FETCH NEXT :numrows ROWS ONLY';
+} else {
+ // Ältere Oracle-Versionen benötigten eine verschachtelte Abfrage, die eine
+ // Untermenge von $sql auswählt. Oder, wenn die SQL-Anweisung während der
+ // Programmentwicklung bekannt ist, ist die Verwendung einer row_number()
+ // Funktion in Betracht zu ziehen. In Produktionsumgebungen ist Sorge zu
+ // tragen, dass SQL-Injection-Probleme durch Zeichenkettenverknüpfung
+ // vermieden werden.
+ $sql = "SELECT * FROM (SELECT a.*, ROWNUM AS my_rnum
+ FROM ($sql) a
+ WHERE ROWNUM <= :offset + :numrows)
+ WHERE my_rnum > :offset";
+}
+
+$offset = 0; // lasse so viele Zeilen aus
+$numrows = 5; // gib 5 Zeilen zurück
+$stid = oci_parse($conn, $sql);
+oci_bind_by_name($stid, ':numrows', $numrows);
+oci_bind_by_name($stid, ':offset', $offset);
+oci_execute($stid);
+
+while (($row = oci_fetch_array($stid, OCI_ASSOC + OCI_RETURN_NULLS)) != false) {
+ echo $row['CITY'] . " " . $row['POSTAL_CODE'] . "<br>\n";
+}
+
+// die Ausgabe ist:
+// Beijing 190518
+// Bern 3095
+// Bombay 490231
+// Geneva 1730
+// Hiroshima 6823
+
+oci_free_statement($stid);
+oci_close($conn);
+
+?>
+]]>
+ </programlisting>
+ </example>
+ </para>
+ <para>
+ <example>
+ <title><function>oci_fetch_array</function> mit "Impliziten Ergebnismengen" von Oracle Database 12<emphasis>c</emphasis></title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+
+$conn = oci_connect('hr', 'welcome', 'localhost/pdborcl');
+if (!$conn) {
+ $e = oci_error();
+ trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
+}
+
+// Benötigt OCI8 2.0 und Oracle Database 12c
+// siehe auch oci_get_implicit_resultset()
+$sql = 'DECLARE
+ c1 SYS_REFCURSOR;
+ BEGIN
+ OPEN c1 FOR SELECT city, postal_code FROM locations WHERE ROWNUM < 4 ORDER BY city;
+ DBMS_SQL.RETURN_RESULT(c1);
+ OPEN c1 FOR SELECT country_id FROM locations WHERE ROWNUM < 4 ORDER BY city;
+ DBMS_SQL.RETURN_RESULT(c1);
+ END;';
+
+$stid = oci_parse($conn, $sql);
+oci_execute($stid);
+
+// Beachte: oci_fetch_all und oci_fetch() können so nicht verwendet werden
+echo "<table>\n";
+while (($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) != false) {
+ echo "<tr>\n";
+ foreach ($row as $item) {
+ echo " <td>".($item!==null?htmlentities($item, ENT_QUOTES|ENT_SUBSTITUTE):" ")."</td>\n";
+ }
+ echo "</tr>\n";
+}
+echo "</table>\n";
+
+// die Ausgabe ist:
+// Beijing 190518
+// Bern 3095
+// Bombay 490231
+// CN
+// CH
+// IN
+
+oci_free_statement($stid);
+oci_close($conn);
+
+?>
+]]>
+ </programlisting>
+ </example>
+ </para>
</refsect1>
+ <refsect1 role="notes">
+ &reftitle.notes;
+ <note>
+ <para>
+ Assoziative Arrayschlüssel müssen für standard Oracle Spalten, die mit Namen
+ erstellt wurden, die Groß- und Kleinschreibung nicht unterscheiden, in Großschreibung
+ angegeben werden.
+ </para>
+ </note>
+ <note>
+ &oci.use.setprefetch;
+ </note>
+ <note>
+ <para>
+ Die Funktion <function>oci_fetch_array</function> ist
+ <emphasis>unwesentlich</emphasis> langsamer als <function>oci_fetch_assoc</function>
+ oder <function>oci_fetch_row</function>, aber ist flexibler.
+ </para>
+ </note>
+ </refsect1>
+
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
+ <member><function>oci_fetch</function></member>
+ <member><function>oci_fetch_all</function></member>
<member><function>oci_fetch_assoc</function></member>
<member><function>oci_fetch_object</function></member>
<member><function>oci_fetch_row</function></member>
- <member><function>oci_fetch_all</function></member>
+ <member><function>oci_set_prefetch</function></member>
</simplelist>
</para>
</refsect1>
Modified: phpdoc/de/trunk/reference/oci8/functions/oci-fetch-assoc.xml
===================================================================
--- phpdoc/de/trunk/reference/oci8/functions/oci-fetch-assoc.xml 2018-04-21 14:40:47 UTC (rev 344789)
+++ phpdoc/de/trunk/reference/oci8/functions/oci-fetch-assoc.xml 2018-04-21 15:19:04 UTC (rev 344790)
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 288721 Maintainer: sammywg Status: ready -->
+<!-- EN-Revision: 332343 Maintainer: sammywg Status: ready -->
<refentry xml:id="function.oci-fetch-assoc" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>oci_fetch_assoc</refname>
- <refpurpose>Liefert die nächste Zeile der Ergebnisdaten als assoziatives Array</refpurpose>
+ <refpurpose>Liefert die nächste Zeile einer Abfrage als assoziatives Array</refpurpose>
</refnamediv>
<refsect1 role="description">
@@ -15,17 +15,16 @@
<methodparam><type>resource</type><parameter>statement</parameter></methodparam>
</methodsynopsis>
<para>
- Liefert die nächste Zeile der Ergebnisdaten als assoziatives Array.
+ Gibt ein assoziatives Array zurück, das die nächste Zeile der Ergebnismenge
+ einer Abfrage enthält. Jedes Array-Element entspricht einer Spalte der Zeile.
+ Diese Funktion wird üblicherweise in einer Schleife aufgerufen bis sie &false;
+ zurückgibt, was anzeigt, dass es keine weitere Zeilen gibt.
</para>
<para>
Ein <function>oci_fetch_assoc</function>-Aufruf ist identisch mit einem
- <function>oci_fetch_array</function>-Aufruf und <constant>OCI_ASSOC</constant>.
+ <function>oci_fetch_array</function>-Aufruf und <constant>OCI_ASSOC</constant>
+ + <constant>OCI_RETURN_NULLS</constant>.
</para>
- <para>
- Ein nachfolgender Aufruf von <function>oci_fetch_assoc</function> liefert
- die nächste Zeile oder &false;, wenn es keine weiteren Zeilen gibt.
- </para>
- &oci.datatypes;
</refsect1>
<refsect1 role="parameters">
@@ -35,9 +34,7 @@
<varlistentry>
<term><parameter>statement</parameter></term>
<listitem>
- <para>
- Ein gültiger Zeiger auf ein OCI-Statement.
- </para>
+ &oci.arg.statement.id;
</listitem>
</varlistentry>
</variablelist>
@@ -47,15 +44,50 @@
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
- Liefert ein assoziatives Array oder &false;, wenn es keine weiteren Zeilen
- für das <parameter>statement</parameter> gibt.
+ Liefert ein assoziatives Array. Gibt es keine weiteren Zeilen
+ für das <parameter>statement</parameter>, dann wird &false; zurückgegeben.
</para>
- &database.fetch-null;
+ </refsect1>
+
+ <refsect1 role="examples">
+ &reftitle.examples;
+ <para>
+ <example>
+ <title><function>oci_fetch_assoc</function> Beispiel</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+
+$conn = oci_connect('hr', 'welcome', 'localhost/XE');
+if (!$conn) {
+ $e = oci_error();
+ trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
+}
+
+$stid = oci_parse($conn, 'SELECT department_id, department_name FROM departments');
+oci_execute($stid);
+
+while (($row = oci_fetch_assoc($stid)) != false) {
+ echo $row['DEPARTMENT_ID'] . " " . $row['DEPARTMENT_NAME'] . "<br>\n";
+}
+
+oci_free_statement($stid);
+oci_close($conn);
+
+?>
+]]>
+ </programlisting>
+ </example>
+ </para>
+ </refsect1>
+
+ <refsect1 role="notes">
+ &reftitle.notes;
<note>
- <simpara>
- Oracle liefert alle Feldnamen in Großschrift zurück und deswegen sind auch
- die assoziativen Indizes im Ergebnisarray in Großschrift.
- </simpara>
+ <para>
+ Weitere Beispiele für das Holen von Zeilen sind der Dokumentation von
+ <function>oci_fetch_array</function> zu entnehmen.
+ </para>
</note>
</refsect1>
@@ -63,10 +95,11 @@
&reftitle.seealso;
<para>
<simplelist>
+ <member><function>oci_fetch</function></member>
+ <member><function>oci_fetch_all</function></member>
<member><function>oci_fetch_array</function></member>
<member><function>oci_fetch_object</function></member>
<member><function>oci_fetch_row</function></member>
- <member><function>oci_fetch_all</function></member>
</simplelist>
</para>
</refsect1>
Modified: phpdoc/de/trunk/reference/oci8/functions/oci-fetch-object.xml
===================================================================
--- phpdoc/de/trunk/reference/oci8/functions/oci-fetch-object.xml 2018-04-21 14:40:47 UTC (rev 344789)
+++ phpdoc/de/trunk/reference/oci8/functions/oci-fetch-object.xml 2018-04-21 15:19:04 UTC (rev 344790)
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 288721 Maintainer: sammywg Status: ready -->
+<!-- EN-Revision: 332343 Maintainer: sammywg Status: ready -->
<refentry xml:id="function.oci-fetch-object" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>oci_fetch_object</refname>
- <refpurpose>Liefert die nächste Zeile der Ergebnisdaten als Objekt</refpurpose>
+ <refpurpose>Liefert die nächste Zeile einer Abfrage als Objekt</refpurpose>
</refnamediv>
<refsect1 role="description">
@@ -15,12 +15,11 @@
<methodparam><type>resource</type><parameter>statement</parameter></methodparam>
</methodsynopsis>
<para>
- Liefert die nächste Zeile der Ergebnisdaten als Objekt.
+ Gibt ein Objekt zurück, das die nächste Ergebnismengenzeile einer Abfrage enthält.
+ Jede Eigenschaft des Objekts entspricht einer Spalte der Zeile.
+ Diese Funktion wird üblicherweise in einer Schleife aufgerufen bis sie &false;
+ zurückgibt, was anzeigt, dass es keine weitere Zeilen gibt.
</para>
- <para>
- Ein nachfolgender Aufruf von <function>oci_fetch_object</function> liefert
- die nächste Zeile des Ergebnisses oder &false;, wenn es keine weiteren Zeilen gibt.
- </para>
&oci.datatypes;
</refsect1>
@@ -31,9 +30,7 @@
<varlistentry>
<term><parameter>statement</parameter></term>
<listitem>
- <para>
- Ein gültiger Zeiger auf ein OCI-Statement.
- </para>
+ &oci.arg.statement.id;
</listitem>
</varlistentry>
</variablelist>
@@ -43,27 +40,174 @@
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
- Liefert ein Objekt, dessen Attribute mit den Feldern der Anweisung übereinstimmen,
- oder &false;, wenn es keine weiteren Zeilen für das <parameter>statement</parameter>
- gibt.
+ Gibt ein Objekt zurück. Jede Eigenschaft des Objekts entspricht einer Spalte
+ der Zeile. Gibt es keine weiteren Zeilen in <parameter>statement</parameter>,
+ dann wird &false; zurückgegeben.
</para>
- &database.fetch-null;
- <note>
- <simpara>
- Oracle liefert alle Feldnamen in Großschrift zurück und deswegen sind auch
- die Attribute im Ergebnisobjekt in Großschrift.
- </simpara>
- </note>
+ <para>
+ Jegliche <literal>LOB</literal>-Spalten werden als LOB-Kennungen zurückgegeben.
+ </para>
+ <para>
+ <literal>DATE</literal>-Spalten werden als gemäß des aktuellen Datumsformats
+ formatierte Zeichenketten zurückgegeben. Das Standardformat kann mit Oracle
+ Umgebungsvariablen wie <literal>NLS_LANG</literal> geändert werden, oder auch
+ durch einen zuvor ausgeführten <literal>ALTER SESSION SET NLS_DATE_FORMAT</literal>
+ Befehl.
+ </para>
+ <para>
+ Die standardmäßigen Oracle Spaltennamen, die nicht zwischen Groß- und Kleinschreibung
+ unterscheiden, erzeugen Eigenschaftsnamen in Großbuchstaben. Spaltennamen, die
+ zwischen Groß- und Kleinschreibung unterscheiden, verwenden die genaue Schreibweise.
+ <function>var_dump</function> kann auf das Ergebnisobjekt angewendet werden,
+ um die richtige Schreibweise für den Eigenschaftszugriff zu prüfen.
+ </para>
+ <para>
+ Die Eigenschaftswerte sind &null; für jeglche <literal>NULL</literal> Datenfelder.
+ </para>
</refsect1>
+ <refsect1 role="examples">
+ &reftitle.examples;
+ <para>
+ <example>
+ <title><function>oci_fetch_object</function> Beispiel</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+
+/*
+ Vor der Ausführung ist die Tabelle zu erstellen:
+ CREATE TABLE mytab (id NUMBER, description VARCHAR2(30));
+ INSERT INTO mytab (id, description) values (1, 'Currywurst mit Pommes');
+ COMMIT;
+*/
+
+$conn = oci_connect('hr', 'welcome', 'localhost/XE');
+if (!$conn) {
+ $e = oci_error();
+ trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
+}
+
+$stid = oci_parse($conn, 'SELECT id, description FROM mytab');
+oci_execute($stid);
+
+while (($row = oci_fetch_object($stid)) != false) {
+ // verwende Eigenschaftsnamen in Großschrift für jede Standard Oracle Spalte
+ echo $row->ID . "<br>\n";
+ echo $row->DESCRIPTION . "<br>\n";
+}
+
+// Output is:
+// 1
+// Currywurst mit Pommes
+
+oci_free_statement($stid);
+oci_close($conn);
+
+?>
+]]>
+ </programlisting>
+ </example>
+ </para>
+ <para>
+ <example>
+ <title>
+ <function>oci_fetch_object</function> mit Spaltennamen, die zwischen Groß-
+ und Kleinschreibung unterscheiden
+ </title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+
+/*
+ Vor der Ausführung ist die Tabelle mit Spaltennamen, die zwischen Groß- und
+ Kleinschreibung unterscheiden, zu erstellen:
+ CREATE TABLE mytab (id NUMBER, "MyDescription" VARCHAR2(30));
+ INSERT INTO mytab (id, "MyDescription") values (1, 'Eiskaffee');
+ COMMIT;
+*/
+
+$conn = oci_connect('hr', 'welcome', 'localhost/XE');
+if (!$conn) {
+ $e = oci_error();
+ trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
+}
+
+$stid = oci_parse($conn, 'SELECT id, "MyDescription" FROM mytab');
+oci_execute($stid);
+
+while (($row = oci_fetch_object($stid)) != false) {
+ // verwende Eigenschaftsnamen in Großschrift für jede Standard Oracle Spalte
+ echo $row->ID . "<br>\n";
+ // verwende die genaue Schreibweise für Spatennamen, die zwischen Groß-
+ // und Kleinschrift unterscheiden
+ echo $row->MyDescription . "<br>\n";
+}
+
+// Output is:
+// 1
+// Eiskaffee
+
+oci_free_statement($stid);
+oci_close($conn);
+
+?>
+]]>
+ </programlisting>
+ </example>
+ </para>
+ <para>
+ <example>
+ <title><function>oci_fetch_object</function> mit LOBs</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+
+/*
+ Vor der Ausführung ist die Tabelle zu erstellen:
+ CREATE TABLE mytab (id NUMBER, description CLOB);
+ INSERT INTO mytab (id, description) values (1, 'Eine sehr lange Zeichenkette');
+ COMMIT;
+*/
+
+$conn = oci_connect('hr', 'welcome', 'localhost/XE');
+if (!$conn) {
+ $e = oci_error();
+ trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
+}
+
+$stid = oci_parse($conn, 'SELECT id, description FROM mytab');
+oci_execute($stid);
+
+while (($row = oci_fetch_object($stid)) != false) {
+ echo $row->ID . "<br>\n";
+ // das folgende gibt die ersten 15 Bytes von DESCRIPTION aus
+ echo $row->DESCRIPTION->read(15) . "<br>\n";
+}
+
+// Output is:
+// 1
+// Eine sehr lange
+
+oci_free_statement($stid);
+oci_close($conn);
+
+?>
+]]>
+ </programlisting>
+ </example>
+ </para>
+ </refsect1>
+
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
+ <member><function>oci_fetch</function></member>
+ <member><function>oci_fetch_all</function></member>
+ <member><function>oci_fetch_assoc</function></member>
<member><function>oci_fetch_array</function></member>
- <member><function>oci_fetch_assoc</function></member>
<member><function>oci_fetch_row</function></member>
- <member><function>oci_fetch_all</function></member>
</simplelist>
</para>
</refsect1>
Modified: phpdoc/de/trunk/reference/oci8/functions/oci-fetch-row.xml
===================================================================
--- phpdoc/de/trunk/reference/oci8/functions/oci-fetch-row.xml 2018-04-21 14:40:47 UTC (rev 344789)
+++ phpdoc/de/trunk/reference/oci8/functions/oci-fetch-row.xml 2018-04-21 15:19:04 UTC (rev 344790)
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 288721 Maintainer: sammywg Status: ready -->
+<!-- EN-Revision: 332343 Maintainer: sammywg Status: ready -->
<refentry xml:id="function.oci-fetch-row" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>oci_fetch_row</refname>
- <refpurpose>Liefert die nächste Zeile der Ergebnisdaten als numerisches Array</refpurpose>
+ <refpurpose>Liefert die nächste Zeile einer Abfrage als numerisches Array</refpurpose>
</refnamediv>
<refsect1 role="description">
@@ -15,17 +15,16 @@
<methodparam><type>resource</type><parameter>statement</parameter></methodparam>
</methodsynopsis>
<para>
- Liefert die nächste Zeile der Ergebnisdaten als numerisches Array.
+ Gibt ein numerische indexiertes Array zurück, das die nächste Zeile der Ergebnismenge einer
+ Abfrage enthält. Jedes Array-Element entspricht einer Spalte der Zeile.
+ Diese Funktion wird üblicherweise in einer Schleife aufgerufen bis sie &false;
+ zurückgibt, was anzeigt, dass es keine weitere Zeilen gibt.
</para>
<para>
Ein <function>oci_fetch_row</function>-Aufruf ist identisch mit einem
- <function>oci_fetch_array</function>-Aufruf und <constant>OCI_NUM</constant>.
+ <function>oci_fetch_array</function>-Aufruf und <constant>OCI_NUM</constant>
+ + <constant>OCI_RETURN_NULLS</constant>.
</para>
- <para>
- Ein nachfolgender Aufruf von <function>oci_fetch_row</function> liefert
- die nächste Zeile oder &false;, wenn es keine weiteren Zeilen gibt.
- </para>
- &oci.datatypes;
</refsect1>
<refsect1 role="parameters">
@@ -35,9 +34,7 @@
<varlistentry>
<term><parameter>statement</parameter></term>
<listitem>
- <para>
- Ein gültiger Zeiger auf ein OCI-Statement.
- </para>
+ &oci.arg.statement.id;
</listitem>
</varlistentry>
</variablelist>
@@ -47,20 +44,63 @@
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
- Liefert ein indiziertes Array oder &false;, wenn es keine weiteren Zeilen
- für das <parameter>statement</parameter> gibt.
+ Liefert ein numerisch indexiertes Array. Gibt es keine weiteren Zeilen
+ für das <parameter>statement</parameter>, dann wird &false; zurückgegeben.
</para>
&database.fetch-null;
</refsect1>
+ <refsect1 role="examples">
+ &reftitle.examples;
+ <para>
+ <example>
+ <title><function>oci_fetch_row</function> Example</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+
+$conn = oci_connect('hr', 'welcome', 'localhost/XE');
+if (!$conn) {
+ $e = oci_error();
+ trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
+}
+
+$stid = oci_parse($conn, 'SELECT department_id, department_name FROM departments');
+oci_execute($stid);
+
+while (($row = oci_fetch_row($stid)) != false) {
+ echo $row[0] . " " . $row[1] . "<br>\n";
+}
+
+oci_free_statement($stid);
+oci_close($conn);
+
+?>
+]]>
+ </programlisting>
+ </example>
+ </para>
+ </refsect1>
+
+ <refsect1 role="notes">
+ &reftitle.notes;
+ <note>
+ <para>
+ Weitere Beispiele für das Holen von Zeilen sind der Dokumentation von
+ <function>oci_fetch_array</function> zu entnehmen.
+ </para>
+ </note>
+ </refsect1>
+
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
+ <member><function>oci_fetch</function></member>
+ <member><function>oci_fetch_all</function></member>
<member><function>oci_fetch_array</function></member>
<member><function>oci_fetch_assoc</function></member>
<member><function>oci_fetch_object</function></member>
- <member><function>oci_fetch_all</function></member>
</simplelist>
</para>
</refsect1>
Modified: phpdoc/de/trunk/reference/oci8/functions/oci-fetch.xml
===================================================================
--- phpdoc/de/trunk/reference/oci8/functions/oci-fetch.xml 2018-04-21 14:40:47 UTC (rev 344789)
+++ phpdoc/de/trunk/reference/oci8/functions/oci-fetch.xml 2018-04-21 15:19:04 UTC (rev 344790)
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 288721 Maintainer: sammywg Status: ready -->
+<!-- EN-Revision: 331842 Maintainer: sammywg Status: ready -->
<refentry xml:id="function.oci-fetch" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>oci_fetch</refname>
- <refpurpose>Holt die nächste Reihe in den Ergebnispuffer</refpurpose>
+ <refpurpose>Holt die nächste Zeile einer Abfrage in interne Puffer</refpurpose>
</refnamediv>
<refsect1 role="description">
@@ -15,10 +15,15 @@
<methodparam><type>resource</type><parameter>statement</parameter></methodparam>
</methodsynopsis>
<para>
- Holt die nächste Reihe (bei SELECT-Anweisungen) in den internen
- Ergebnispuffer.
+ Holt die nächste Zeile einer Abfrage in interne Puffer, auf die entweder mit
+ <function>oci_result</function>, oder unter Verwendung zuvor mit
+ <function>oci_define_by_name</function> definierter Variablen, zugegriffen
+ werden kann.
</para>
- &oci.datatypes;
+ <para>
+ Allgemeine Information zum Holen von Daten sind der Dokumentation von
+ <function>oci_fetch_array</function> zu entnehmen.
+ </para>
</refsect1>
<refsect1 role="parameters">
@@ -28,9 +33,7 @@
<varlistentry>
<term><parameter>statement</parameter></term>
<listitem>
- <para>
- Ein Zeiger auf eine gültige OCI-Anweisung.
- </para>
+ &oci.arg.statement.id;
</listitem>
</varlistentry>
</variablelist>
@@ -45,18 +48,109 @@
</para>
</refsect1>
+ <refsect1 role="examples">
+ &reftitle.examples;
+ <para>
+ <example>
+ <title><function>oci_fetch</function> with defined variables</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+
+$conn = oci_connect('hr', 'welcome', 'localhost/XE');
+if (!$conn) {
+ $e = oci_error();
+ trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
+}
+
+$sql = 'SELECT location_id, city FROM locations WHERE location_id < 1200';
+$stid = oci_parse($conn, $sql);
+
+// The defines MUST be done before executing
+oci_define_by_name($stid, 'LOCATION_ID', $locid);
+oci_define_by_name($stid, 'CITY', $city);
+
+oci_execute($stid);
+
+// Each fetch populates the previously defined variables with the next row's data
+while (oci_fetch($stid)) {
+ echo "Location id $locid is $city<br>\n";
+}
+
+// Displays:
+// Location id 1000 is Roma
+// Location id 1100 is Venice
+
+oci_free_statement($stid);
+oci_close($conn);
+
+?>
+]]>
+ </programlisting>
+ </example>
+ </para>
+ <para>
+ <example>
+ <title><function>oci_fetch</function> mit <function>oci_result</function></title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+
+$conn = oci_connect('hr', 'welcome', 'localhost/XE');
+if (!$conn) {
+ $e = oci_error();
+ trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
+}
+
+$sql = 'SELECT location_id, city FROM locations WHERE location_id < 1200';
+$stid = oci_parse($conn, $sql);
+oci_execute($stid);
+
+while (oci_fetch($stid)) {
+ echo oci_result($stid, 'LOCATION_ID') . " ist ";
+ echo oci_result($stid, 'CITY') . "<br>\n";
+}
+
+// Displays:
+// 1000 ist Rom
+// 1100 ist Venedig
+
+oci_free_statement($stid);
+oci_close($conn);
+
+?>
+]]>
+ </programlisting>
+ </example>
+ </para>
+ </refsect1>
+
<refsect1 role="notes">
&reftitle.notes;
<note>
<para>
- In PHP-Versionen vor 5.0.0 muss man <function>ocifetch</function>
- benutzen. Den Namen kann man immer noch nutzen. Er wurde als Alias für
- <function>oci_fetch</function> für die Abwärtskompatibilität
- erhalten. Dieses ist allerdings veraltet und wird nicht empfohlen.
+ Diese Funktion liefert keine Zeilen von "Impliziten Ergebnismengen" der Oracle
+ Database 12<emphasis>c</emphasis>. Statt dessen ist <function>oci_fetch_array</function>
+ zu verwenden.
</para>
</note>
</refsect1>
+ <refsect1 role="seealso">
+ &reftitle.seealso;
+ <para>
+ <simplelist>
+ <member><function>oci_define_by_name</function></member>
+ <member><function>oci_fetch_all</function></member>
+ <member><function>oci_fetch_array</function></member>
+ <member><function>oci_fetch_assoc</function></member>
+ <member><function>oci_fetch_object</function></member>
+ <member><function>oci_fetch_row</function></member>
+ <member><function>oci_result</function></member>
+ </simplelist>
+ </para>
+ </refsect1>
+
</refentry>