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

Publicado por Fabio Cerqueira em 06/08/2004

[ Hits: 10.236 ]

 


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

Instalação e configuração do Postgresql + Pgadmin3 LocalHost no Fedora

Função SQL replace: corrigindo inserções equivocadas

Dicas e macetes sobre modelagem de bancos de dados

Mudando encoding do Postgres 8.4 para LATIN1

Documentação online do PostgreSQL

  

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