Criando um tipo específico para retorno de dados no PostgreSQL

Publicado por Fabio Cerqueira em 06/08/2004

[ Hits: 10.237 ]

 


Criando um tipo específico para retorno de dados no PostgreSQL



Existe uma forma fácil de se retornar dados de uma query para o PHP utilizando o PostgreSQL, o que pode ser uma grande dor de cabeça para quem está iniciando. Basta criar um tipo com a estrutura do que será retornado.

Exemplo:

CREATE TYPE tp_dadospessoais AS (nome varchar, data_nasc date, rg varchar);

A função ficaria:

CREATE OR REPLACE FUNCTION f_buscaPessoa(varchar) RETURNS SETOF tp_dadospessoais AS '

SELECT nome, data_nasc, rg FROM pessoas WHERE cpf = $1;

'LANGUAGE 'SQL';


Muito simples neste caso, mas pode ser qualquer outra.

No PHP basta chamar a função passando o id:

$con = // string de conexão com banco;
$sql = "SELECT * FROM f_buscaPessoa('$tf_cpf')";
$res = pg_exec($con,$sql);

if ($res)
{
while($rs = pg_fetch_array($res)){
$nome = $rs["nome"];
$dt_nasc = $rs["data_nasc"];
$rg = $rs["rg"];
}
else
echo "Sem dados para exibir";

// Daqui pra frente tratamento normal da exibição;

Espero ter contribuído;

Um abraço;

Fábio Cerqueira

Outras dicas deste autor

Consultas sem preocupação com maiúsculas ou minúsculas no PostgreSQL

Leitura recomendada

Consultas sem preocupação com maiúsculas ou minúsculas no PostgreSQL

Tradução da documentação da PL/PHP para PostgreSQL

Acessando dois databases no mesmo SELECT (PostgreSQL)

PostgreSQL - Bancos com diferentes encodings

Permitindo conexão ao banco no PostreSQL 8.3

  

Comentários
[1] Comentário enviado por juber em 03/06/2006 - 17:47h

Estou começando com Postgre e sinceramente estou achando complicado este esquema.
Quer dizer que se eu quero retornar duas colunas numa pesquisa eu tenho duas chances:
1-trazer todas as colunas e usar o tipo de retorno setof <tabela> o que iria aumentar o trafego desnecessariamente.
2-criar um tipo de dados para fazer essa pesquisa específica, o que num sistema grande significaria zilhões de tipos criados pra tudo quanto é canto.

É assim mesmo?? :-(



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts