Paginação de Resultados em Oracle
Como pouco se fala sobre Oracle com PHP e basicamente o trabalho que desenvolvo consiste nisso, estarei documentando aqui como criar uma paginação que funciona de uma forma similar às varias já existentes para MySQL e PostgreSQL.
Infelizmente o Oracle não possui suporte para a cláusula LIMIT do MySQL, e tive que lutar para implementar uma alternativa com sub-selects.
conecta.php:
Agora vamos fazer uma consulta dos dados existentes nesse banco de dados.
consulta.php:
Infelizmente o Oracle não possui suporte para a cláusula LIMIT do MySQL, e tive que lutar para implementar uma alternativa com sub-selects.
conecta.php:
<?php function conecta() { $usuario = 'Eu'; $senha = 'MINHA_SENHA'; // caso o Banco esteja em outro servidor utilize a string do local do Banco Ex.: $banco = 'LOCAL_DO_BANCO'; OCILogon($usuario, $senha, $banco); } ?>
Agora vamos fazer uma consulta dos dados existentes nesse banco de dados.
consulta.php:
<?php
include("conecta.php");
$pagina = $HTTP_GET_VARS['pagina'];
$maior = $HTTP_GET_VARS['maior'];
// faz a conexão com o banco de dados através do 'conecta.php' e da função 'conecta()'
$conexao = conecta();
$sql = "SELECT * FROM banco";
// cria um statement do meu sql, ou seja, passa o
// meu sql para o banco e não retorna nada por enquanto
$sql = OCIParse($conexao, $sql);
// executa esse sql e retorna seu valor para o PHP, para
// que possamos criar uma matriz com os resultados do sql
// devemos utilizar outra função
OCIExecute($sql, OCI_DEFAULT);
// cria resultados, identico ao mysql_fetch_array.
while (OCIFetch($sql)) {
$variavel = OCIResult($sql, 'CAMPO_TABELA');
// estou passando o nome $variavel ao campo da tabela que estou
// trazendo para o meu PHP utilizando o mysql, daríamos um nome de
// variável para o meu mysql_fetch_array, e dele faríamos um
// resultado para que pudessemos mostrar na tela, aqui podemos dar
// o valor do resultado diretamente dentro do meu loop
echo $variavel;
}
?>
Fizemos uma consulta simples e agora podemos paginar esse consulta utilizando algumas artimanhas do banco de dados. Abaixo é a versão necessária para realmente paginar os resultados do banco.
consulta.php:
<?php
include("conecta.php");
// caso $pagina não exista...
if (!$pagina) {
$maior = 10; // estou pegando 10 posições no meu SQL
$menor = 1;
$pagina = 1;
} else {
$maior = $maior + 10;
$menor = $maior - 9;
}
$conexao = conecta();
$sql = "SELECT * FROM banco";
$sql = "SELECT * FROM (SELECT rownum AS numero, CAMPO_TABELA FROM ($sql) WHERE numero
<= $maior ) where rownum >= $menor";
// nessa parte utilizamos um sub-select (select dentro
// de select) não suportado no MySQL na versão 3.23
$sql = OCIParse($conexao, $sql);
OCIExecute($sql, OCI_DEFAULT);
$sql2 = "SELECT COUNT(*) as CONTADOR FROM banco";
$sql2 = OCIParse($conexao, $sql2);
OCIExecute($sql2, OCI_DEFAULT);
while (OCIFetch($sql2)) {
$conta = OCIResult($sql2, 'CONTADOR');
}
while (OCIFetch($sql)) {
$variavel = OCIResult($sql, 'CAMPO_TABELA');
echo $variavel;
}
// agora vamos criar os links da paginação
for ($i = 0; $i < $conta; $i++) {
$vai = $pagina +1;
$vaimaior = $vai * 10;
// quando a página for igual a variável $i então
// não imprimo o link somente o número da página
if ($pagina == $i) {
echo $vai;
} else {
echo "<a href='?pagina=$i&maior=$vaimaior'>$vai</a>";
}
}
?>
Da mesma forma que o Microsoft SQL Server, o Oracle não tem suporte para a cláusula LIMIT, e precisamos utilizar artifícios do banco para que possamos além de não perder performance, manter todo o controle do processo de paginação, caso queiramos que nossa paginação seja de 20 em vinte apenas com a troca de algumas variáveis podemos fazê-lo.
Sei que é bem parecido com as paginações que já existem no site, mas quando precisei saber de um exemplo para Oracle, levei um bom tempo tendo que encontrar onde fazê-la, por isso estou compartilhando com vocês, e espero poder compartilhar mais coisas em breve.
Boa sorte,
Diego
Caros, só aproveitando, esse Script foi feito para Oracle 8 e PHP 4.x.
Hoje utilizamos na empresa Oracle 9 e PHP 5.x.
A Oracle vem melhorando e muito sua "ligação" com o PHP, a versão 5.x do PHP já tem uma integração muito melhor.
Ainda é necessária a utilização de artifícios para algumas funções.
O BD Oracle vem melhorando muito em Performance, não é um banco ainda utilizado e difundido para sistemas Web, mas será.
Hoje para quem gosta ou quer estudar, existe a versão Express, que é free e tem suporte a conexões "externas" a máquina, o que não ocorria em versões para testes, além de suportar 4 Gigas de Dados sem necessidade de uma versão "superior".
Qualquer coisas, estamos por aí.
Hoje utilizamos na empresa Oracle 9 e PHP 5.x.
A Oracle vem melhorando e muito sua "ligação" com o PHP, a versão 5.x do PHP já tem uma integração muito melhor.
Ainda é necessária a utilização de artifícios para algumas funções.
O BD Oracle vem melhorando muito em Performance, não é um banco ainda utilizado e difundido para sistemas Web, mas será.
Hoje para quem gosta ou quer estudar, existe a versão Express, que é free e tem suporte a conexões "externas" a máquina, o que não ocorria em versões para testes, além de suportar 4 Gigas de Dados sem necessidade de uma versão "superior".
Qualquer coisas, estamos por aí.
28/03/2006 6:51am
(~18 anos atrás)
Ta ele eh veloZ e tudo mas.. o ki faz ele ser melhor q os outros...
vale dizer q tem banco Oracle rodanod com mais d 120 mil insercoes por minuto...
isso basta nao sei o mysql eh bom +++ ta longe de suprir a necessidade d uma grande empresa tipo um banco...
tipo a vivo se nao me engano usa oracle pensa quantas mil pessoas estao ligando enviando mensagens nesse exato momento... isso tudo registrando no banco e tals e o banco nao pode parar entao eh isso :D q faz o oracle ser melhor robusto e ta sempre d pé
vale dizer q tem banco Oracle rodanod com mais d 120 mil insercoes por minuto...
isso basta nao sei o mysql eh bom +++ ta longe de suprir a necessidade d uma grande empresa tipo um banco...
tipo a vivo se nao me engano usa oracle pensa quantas mil pessoas estao ligando enviando mensagens nesse exato momento... isso tudo registrando no banco e tals e o banco nao pode parar entao eh isso :D q faz o oracle ser melhor robusto e ta sempre d pé
28/03/2006 6:38am
(~18 anos atrás)
pessoal instalei o apache e o php em uma estação com win2k o apache e o php estaum funcionando corretamente porem segui alguns scripts para conexção do php com o oracle mas naum funcionou li aqui q deveria instalar o cliente do oracle na estação mas isso tbem naum adiantou hu q devo fazer para fazer o php conversar com o oracle.
aproposito a versão do php he 7.5 e do Oracle he 8i
Desde já agradeço
aproposito a versão do php he 7.5 e do Oracle he 8i
Desde já agradeço
09/03/2005 3:50pm
(~20 anos atrás)
pessoal, fiz uma pequena adaptacao no sql do Diego e deu certo... ta ae pra quem quiser...
SELECT *
FROM (SELECT ROWNUM as numlinha, codusuario, nome
FROM (SELECT *
FROM usuario
ORDER BY nome)
WHERE ROWNUM <= :superior)
WHERE numlinha >= :inferior;
renomeie o rownum do segundo sql pra num linha e usei no where do primeiro sql....
SELECT *
FROM (SELECT ROWNUM as numlinha, codusuario, nome
FROM (SELECT *
FROM usuario
ORDER BY nome)
WHERE ROWNUM <= :superior)
WHERE numlinha >= :inferior;
renomeie o rownum do segundo sql pra num linha e usei no where do primeiro sql....
11/12/2003 8:13am
(~21 anos atrás)
Databasejournal:
http://www.databasejournal.com
Artigo sobre o db Intersystems Caché um sistema além do relacional:
http://www.intersystems.com.br/downloads/WhitepaperIDC_portugues.pdf
Pagina da intersystems
http://www.intersystems.com.br
http://www.databasejournal.com
Artigo sobre o db Intersystems Caché um sistema além do relacional:
http://www.intersystems.com.br/downloads/WhitepaperIDC_portugues.pdf
Pagina da intersystems
http://www.intersystems.com.br
27/09/2003 4:47pm
(~21 anos atrás)
Caro Christopher Moura,
Pelo que sei você deverá instalar a versão Client do Oracle para conseguir a conexão com o servidor...
Abraço
Pelo que sei você deverá instalar a versão Client do Oracle para conseguir a conexão com o servidor...
Abraço
23/09/2003 9:32am
(~21 anos atrás)
Pessoal, estou procurando informações sobre como configurar um banco de dados Oracle para trabalhar com PHP. Já tenho o servidor web configurado (Apache + PHP > Red Hat 9) e gostaria de saber quais "drivers" do Oracle devo instalar nessa máquina para efetuar a conexão no meu banco Oracle que está na rede?
17/09/2003 7:59am
(~21 anos atrás)
Recentemente, li na INFO (on line) que o Oracle superou em velocidade o MySQL para operações web. Concordo que o MySQL é supri nossas principais necessidades no desenvolvimento, mas em uma operação mais robusta, o Oracle poderia proporcionar mais segurança e diferentes formas de manipulação de dados.
Soube de uma intranet em um hospital que trabalhou muito bem com PHP+Oracle...
Soube de uma intranet em um hospital que trabalhou muito bem com PHP+Oracle...
16/09/2003 5:03pm
(~21 anos atrás)
Warning: ociparse() expects parameter 1 to be resource, null given in C:\Inetpub\wwwroot\TCC\gr037n2s2005\greice\consulta.php on line 12
Warning: ociexecute() expects parameter 1 to be resource, null given in C:\Inetpub\wwwroot\TCC\gr037n2s2005\greice\consulta.php on line 17
Warning: ocifetch() expects parameter 1 to be resource, null given in C:\Inetpub\wwwroot\TCC\gr037n2s2005\greice\consulta.php on line 20