Files
php-doc-ru/reference/oci8/functions/oci-fetch-all.xml
Sergey Panteleev 6d43fd64d7 Исправление форматирования
[skip-spellcheck]
[skip-lint]
2022-12-27 03:42:36 +03:00

387 lines
13 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: d33a6756e7a94bc06164d2a97bb0a3ffa19e3471 Maintainer: bfl Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.oci-fetch-all" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>oci_fetch_all</refname>
<refpurpose>Выбирает все строки из результата запроса в двумерный массив</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>int</type><methodname>oci_fetch_all</methodname>
<methodparam><type>resource</type><parameter>statement</parameter></methodparam>
<methodparam><type>array</type><parameter role="reference">output</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>offset</parameter><initializer>0</initializer></methodparam>
<methodparam choice="opt"><type>int</type><parameter>limit</parameter><initializer>-1</initializer></methodparam>
<methodparam choice="opt"><type>int</type><parameter>flags</parameter><initializer>OCI_FETCHSTATEMENT_BY_COLUMN | OCI_ASSOC</initializer></methodparam>
</methodsynopsis>
<para>
Выбирает все строки из результата запроса в двумерный массив.
По умолчанию возвращает все строки.
</para>
<para>
Эта функция может быть вызваться только один раз для каждого запроса
запущенного с помощью <function>oci_execute</function>.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>statement</parameter></term>
<listitem>
&oci.arg.statement.id;
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>output</parameter></term>
<listitem>
<para>
Переменная, содержащая возвращённые строки.
</para>
<para>
LOB столбцы возвращаются в виде строк, для которых поддерживается
Oracle преобразования.
</para>
<para>
Смотрите <function>oci_fetch_array</function> для более детальной
информации о том, как производится выборка данных и типов.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>offset</parameter></term>
<listitem>
<para>
Число строк, которых необходимо исключить из выборки.
По умолчанию равно 0, выборка возвращается со следующего за
первым ряда.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>limit</parameter></term>
<listitem>
<para>
Число возвращаемых строк. По умолчанию равно -1, что означает
возврат всех строк, начиная с указанных в <parameter>offset</parameter>
+ 1 предыдущая строка.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>flags</parameter></term>
<listitem>
<para>
Параметр <parameter>flags</parameter> содержит структуру
массива отражает необходимость использования ассоциативных массивов.
<table>
<title>Структура массива <function>oci_fetch_all</function></title>
<tgroup cols="2">
<thead>
<row>
<entry>Константа</entry>
<entry>Описание</entry>
</row>
</thead>
<tbody>
<row>
<entry><constant>OCI_FETCHSTATEMENT_BY_ROW</constant></entry>
<entry>Массив будет содержать по одному под-массиву на каждую
строку запроса.</entry>
</row>
<row>
<entry><constant>OCI_FETCHSTATEMENT_BY_COLUMN</constant></entry>
<entry>Массив будет содержать по одному под-массиву на каждый
столбец. Используется по умолчанию.</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
<para>
Массивы могут быть проиндексированы или заголовками столбцов или
пронумерованы. Будет возвращён только один режим индексации.
<table>
<title>Индексация массива <function>oci_fetch_all</function></title>
<tgroup cols="2">
<thead>
<row>
<entry>Константа</entry>
<entry>Описание</entry>
</row>
</thead>
<tbody>
<row>
<entry><constant>OCI_NUM</constant></entry>
<entry>Для массива каждого столбца используются числовые индексы.</entry>
</row>
<row>
<entry><constant>OCI_ASSOC</constant></entry>
<entry>
Для массива каждого столбца используется ассоциативные индексы.
По умолчанию.</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
<para>
Используйте оператор сложения &quot;+&quot; для выбора определённой
комбинации структуры и индексации массива.
</para>
<para>
Регистронезависимые (по умолчанию в Oracle) имена полей в
результирующем массиве будут иметь ассоциативные индексы в
верхнем регистре. Регистрозависимые имена полей будут иметь
индексы с теми же регистрами символов, что и само поле.
Используйте <function>var_dump</function> на <parameter>output</parameter>,
чтобы проверить соответствие регистров символов для каждого запроса.
</para>
<para>
В запросах в которых имеется несколько столбцов с одинаковыми
именами необходимо использовать псевдонимы. Иначе только один из
столбцов появится в ассоциативном массиве.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Возвращает число столбцов в <parameter>output</parameter>, который
может принимать значение 0 или более.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Пример использования <function>oci_fetch_all</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);
}
$stid = oci_parse($conn, 'SELECT POSTAL_CODE, CITY FROM locations WHERE ROWNUM < 3');
oci_execute($stid);
$nrows = oci_fetch_all($stid, $res);
echo "$nrows строк получено<br>\n";
var_dump($res);
// Вывод var_dump:
// 2 строк получено
// array(2) {
// ["POSTAL_CODE"]=>
// array(2) {
// [0]=>
// string(6) "00989x"
// [1]=>
// string(6) "10934x"
// }
// ["CITY"]=>
// array(2) {
// [0]=>
// string(4) "Roma"
// [1]=>
// string(6) "Venice"
// }
// }
// Форматирование результатов
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 "</table>\n";
oci_free_statement($stid);
oci_close($conn);
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>Пример использования <function>oci_fetch_all</function> с <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 строк получено<br>\n";
var_dump($res);
// Выведет:
// 2 строк получено
// array(2) {
// [0]=>
// array(2) {
// ["POSTAL_CODE"]=>
// string(6) "00989x"
// ["CITY"]=>
// string(4) "Roma"
// }
// [1]=>
// array(2) {
// ["POSTAL_CODE"]=>
// string(6) "10934x"
// ["CITY"]=>
// string(6) "Venice"
// }
// }
oci_free_statement($stid);
oci_close($conn);
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>Пример использования <function>oci_fetch_all</function> с <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 строк получено<br>\n";
var_dump($res);
// Выведет:
// 2 строк получено
// array(2) {
// [0]=>
// array(2) {
// [0]=>
// string(6) "00989x"
// [1]=>
// string(4) "Roma"
// }
// [1]=>
// array(2) {
// [0]=>
// string(6) "10934x"
// [1]=>
// string(6) "Venice"
// }
// }
oci_free_statement($stid);
oci_close($conn);
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<note>
<para>
Использование <parameter>offset</parameter> неэффективно. Все
пропускаемые ряды включаются в результат запроса возвращаемый
базой данных к PHP. После этого они исключаются. Более эффективно
использовать SQL для отступа и ограничения рядов в запросе. Смотрите
<function>oci_fetch_array</function> для примеров.
</para>
</note>
<note>
<para>
Запросы, возвращающие большое число рядов, могут быть более
эффективными если используется однорядная функция выборки,
такая как <function>oci_fetch_array</function>.
</para>
</note>
<note>
&oci.use.setprefetch;
</note>
<note>
<para>
Не возвращает ряды для неявных результирующих наборов в Oracle Database 12<emphasis>c</emphasis>.
Используйте вместо данной функции функцию <function>oci_fetch_array</function>.
</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
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->