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 &quot;+&quot; 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 &quot;+&quot; 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) : "&nbsp;")."</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):"&nbsp;")."</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>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.