Pular para o conteúdo

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

Dica publicada em Banco de Dados / Postgres
Fabio Cerqueira fabiocerqueira
Hits: 10.862 Categoria: Banco de Dados Subcategoria: Postgres
  • Indicar
  • Impressora
  • Denunciar

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

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

Permitindo conexão ao banco no PostreSQL 8.3

PostgreSQL no Fedora 18

Função dblink()

Exportando dados do PostgreSQL para HTML

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

#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

Entre na sua conta para comentar.