-
Notifications
You must be signed in to change notification settings - Fork 58
/
Copy pathoci-fetch-all.xml
389 lines (358 loc) · 11 KB
/
oci-fetch-all.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: a48bfbee2a121bdf25ceee2946aa27728e611365 Maintainer: seros Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.oci-fetch-all" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>oci_fetch_all</refname>
<refpurpose>Obtiene múltiples filas de una consulta y las ubica en un array bidimiensional</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>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><constant>OCI_FETCHSTATEMENT_BY_COLUMN</constant> + <constant>OCI_ASSOC</constant></initializer></methodparam>
</methodsynopsis>
<para>
Obtiene múltiples filas de una consulta y las ubica en un array bidimiensional.
Por omisión, se devuelven todas las filas.
</para>
<para>
Esta función puede ser llamada únicamente una vez por cada consulta ejecutada
con <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>
La variable que contiene las filas devueltas.
</para>
<para>
Las columnas LOB son devueltas como cadenas, donde Oracle admite
la conversión.
</para>
<para>
Véase <function>oci_fetch_array</function> para más información
sobre cómo se obtienen los datos y los tipos.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>skip</parameter></term>
<listitem>
<para>
El número de filas iniciales a descartar cuando se obtiene el
resultado. El valor predeterminado es 0, por lo que se devuelve la primera fila
en adelante.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>maxrows</parameter></term>
<listitem>
<para>
El número de filas a devolver. El valor predeterminado es -1, lo que significa que
se devuelven todas las filas desde <parameter>skip</parameter> + 1 en adelante.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>flags</parameter></term>
<listitem>
<para>
El parámetro <parameter>flags</parameter> indica la estructura del
array y si se deberían usar arrays asociativos.
<table>
<title>Modos de estructura del array de <function>oci_fetch_all</function></title>
<tgroup cols="2">
<thead>
<row>
<entry>Constante</entry>
<entry>Descripción</entry>
</row>
</thead>
<tbody>
<row>
<entry><constant>OCI_FETCHSTATEMENT_BY_ROW</constant></entry>
<entry>El array externo contendrá un subarray por cada fila de
la consulta.</entry>
</row>
<row>
<entry><constant>OCI_FETCHSTATEMENT_BY_COLUMN</constant></entry>
<entry>El array externo contendrá un subarray por cada columna de
la consulta. Esto es lo predeterminado.</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
<para>
Los arrays se pueden indexar por encabezado de columna o numéricamente.
Solamente será devuelto un modo de indexación.
<table>
<title>Modos de indexación del array de <function>oci_fetch_all</function></title>
<tgroup cols="2">
<thead>
<row>
<entry>Constante</entry>
<entry>Descripción</entry>
</row>
</thead>
<tbody>
<row>
<entry><constant>OCI_NUM</constant></entry>
<entry>Se utilizan índices numéricos por cada array de columna.</entry>
</row>
<row>
<entry><constant>OCI_ASSOC</constant></entry>
<entry>Se utilizan índices asociativos por cada array de
columna. Esto es lo predeterminado.</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
<para>
Utilice el operador de adición "+" para elegir una combinación de
modos de estructura e índice del array.
</para>
<para>
Los nombres de columna predeterminados de Oracle insensibles al uso de mayúsculas/minúsculas
tendrán claves de array en mayúsculas. Los nombres de columnas sensibles al uso de mayúsculs/minúsculas
tendrán claves de array que usan el nombre exacto de la columna.
Use <function>var_dump</function>
en <parameter>output</parameter> para verificar el uso apropiado
de mayúsculas/minúsculas en cada consulta.
</para>
<para>
Las consultas que tienen más de una columna con el mismo nombre
deberían usar un alias de columna. Si no, aparecerá únicamente una de las
columnas en el array asociativo.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Devuelve el número de filas de <parameter>output</parameter>, el cual
podría ser cero o más, &return.falseforfailure;.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Ejemplo de <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 filas obtenidas<br>\n";
var_dump($res);
// la salida de var_dump es:
// 2 filas obtenidas
// 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"
// }
// }
// Imprimir los resultados de forma legible
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>Ejemplo de <function>oci_fetch_all</function> con <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 filas obtenidas<br>\n";
var_dump($res);
// La salida es:
// 2 filas obtenidas
// 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> con <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 filas obtenidas<br>\n";
var_dump($res);
// La salida es:
// 2 filas obtenidas
// 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>
Usar <parameter>skip</parameter> es muy ineficiente. Todas las
filas que van a omitirse están incluidas en el conjunto de resultados que
es devuelto desde la base de datos a PHP. Luego son excluidas.
Es más eficiente usar SQL para restringir el índice y el rango de
filas de las consultas. Véase <function>oci_fetch_array</function> para
un ejemplo.
</para>
</note>
<note>
<para>
Las consultas que devuelven un número grande de filas pueden usar la memoria
de forma más eficiente si se utiliza una función que obtiene una
sola fila, como <function>oci_fetch_array</function>.
</para>
</note>
<note>
&oci.use.setprefetch;
</note>
<note>
<para>
No se devolverán filas desde Conjuntos de Resultados Implícitos de
Oracle Database 12<emphasis>c</emphasis>. Use <function>oci_fetch_array</function>
en su lugar.
</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
-->