(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)
oci_fetch_all — Busca várias linhas de uma consulta em um array bidimensional
$statement
,&$output
,$offset
= 0,$limit
= -1,$flags
= OCI_FETCHSTATEMENT_BY_COLUMN | OCI_ASSOCBusca várias linhas de uma consulta em um array bidimensional. Por padrão, todas as linhas são retornadas.
Esta função pode ser chamada apenas uma vez para cada consulta executada com oci_execute().
statement
Um identificador de declaração OCI8
válida criada por oci_parse() e executada
por oci_execute() ou um identificador de declaração REF
CURSOR
.
output
A variável para conter as linhas retornadas.
As colunas LOB são retornadas como strings, onde o Oracle suporta conversão.
Veja oci_fetch_array() para mais informações sobre como dados e tipos são obtidos.
offset
O número de linhas iniciais a serem descartadas ao buscar o resultado. O valor padrão é 0, então a primeira linha em diante é retornada.
limit
O número de linhas a serem retornadas. O padrão é -1, o que significa que retorna
todas as linhas a partir de offset
+ 1.
flags
O parâmetro flags
indica a estrutura
do array e se arrays associativos devem ser usados.
Constante | Descrição |
---|---|
OCI_FETCHSTATEMENT_BY_ROW |
O array externo conterá um sub-array por linha de consulta. |
OCI_FETCHSTATEMENT_BY_COLUMN |
O array externo conterá um sub-array por coluna de consulta. Este é o padrão. |
Os arrays podem ser indexados por título de coluna ou numericamente. Apenas um modo de indexação será retornado.
Constante | Descrição |
---|---|
OCI_NUM |
Índices numéricos são usados para cada array de coluna. |
OCI_ASSOC |
Índices associativos são usados para cada array de coluna. Este é o padrão. |
Use o operador de adição "+" para escolher uma combinação de estrutura de array e modos de índice.
Os nomes de colunas padrão do Oracle não diferenciam maiúsculas de minúsculas e terão
chaves de array em letras maiúsculas. Os nomes de colunas que diferenciam maiúsculas de minúsculas terão
chaves de array usando a capitalização exata da coluna.
Use var_dump()
em output
para verificar a capitalização apropriada
a ser usada em cada consulta.
Consultas que tenham mais de uma coluna com o mesmo nome devem usar apelidos de coluna. Caso contrário, apenas uma das colunas aparecerá em um array associativo.
Retorna o número de linhas em output
, que
pode ser 0 ou mais.
Exemplo #1 Exemplo de oci_fetch_all()
<?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 linhas buscadas<br>\n";
var_dump($res);
// O resultado será:
// 2 linhas buscadas
// 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"
// }
// }
// Tabelando os resultados
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);
?>
Exemplo #2 Exemplo de oci_fetch_all() com OCI_FETCHSTATEMENT_BY_ROW
<?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 linhas buscadas<br>\n";
var_dump($res);
// O resultado será:
// 2 linhas buscadas
// 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);
?>
Exemplo #3 oci_fetch_all() com OCI_NUM
<?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 linhas buscadas<br>\n";
var_dump($res);
// O resultado será:
// 2 linhas buscadas
// 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);
?>
Nota:
Usar
offset
é muito ineficiente. Todas as linhas a serem ignoradas são incluídas no conjunto de resultados que é retornado do banco de dados para o PHP. Elas são então descartadas. É mais eficiente usar SQL para restringir o deslocamento e o intervalo de linhas na consulta. Veja oci_fetch_array() para um exemplo.
Nota:
Consultas que retornam um grande número de linhas podem ser mais eficientes em termos de memória se uma função de busca de linha única como oci_fetch_array() for usada.
Nota:
Para consultas que retornam um grande número de linhas, o desempenho pode ser melhorado significativamente aumentando oci8.default_prefetch ou usando oci_set_prefetch().
Nota:
Esta função não retornará linhas do Conjuntos de Resultados Implícitos do Oracle Database 12c. Use oci_fetch_array() em vez disso.