Criando um tipo específico para retorno de dados no PostgreSQL
Dica publicada em Banco de Dados / Postgres
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:
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;
$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
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?? :-(