Neste artigo, eu tento demostrar o uso que eu faço dos comandos "Create Type" e do "Execute".
O "Create Type", permite criar um novo tipo de dado. No meu caso, uso ele para as saídas de dados(lista campos e seus conteúdos pertencentes a uma tabela pesquisada) das funções que faço no banco.
O "Execute", é um comando utilizado em funções "plpgsql", para executar sql, contidos dentro de uma variavel do tipo texto. Este procedimento, é interessante, para que possámos unir strings mais complexas, fazendo delas, um sql mais enxuto, e dando a possíbilidade de NÃO usar comandos como: "Case When" ou "If then", que em muitas vezes, não deixa que o banco uses seus índices, necessários para agilizar uma determinada consulta.
Para criar um type faça:
Create type "ListaPessoas_Type" as
("CodigoPessoa" Integer,
"NomePessoa" Varchar(100)) ;
("CodigoPessoa" Integer,
"NomePessoa" Varchar(100)) ;
A função a seguir, lista dois campos de uma tabela, chamada "Pessoas", onde a informações listadas, poderão serem "Clientes" ou "Fornecedores". Vejam, que os types criado, cuja o nome ficou "ListaPessoas_Type", é atrelado a função logo nas primeiras linhas, onde que representa a saída dos dados.
A proposta aqui, é mostrar o uso do create type e do execute. Sei, que consultas como estas, poderiam serem feitas de uma outra forma, de tamanho menor e numa função do tipo "sql" e não "plpgsql".
A proposta aqui, é mostrar o uso do create type e do execute. Sei, que consultas como estas, poderiam serem feitas de uma outra forma, de tamanho menor e numa função do tipo "sql" e não "plpgsql".
Para criar a função faça:
Create or replace function "ListaPessoas"(varchar(15))
Returns setof "ListaPessoas_Type" As
$$
declare
XSQL Text;
XRetorno Record;
begin
/*Montagem do sql em uma variável text*/
if $1 = 'Clientes' then
XSQL = 'Select "CodigoPessoa","NomePessoa"
Returns setof "ListaPessoas_Type" As
$$
declare
XSQL Text;
XRetorno Record;
begin
/*Montagem do sql em uma variável text*/
if $1 = 'Clientes' then
XSQL = 'Select "CodigoPessoa","NomePessoa"
From "Pessoas"
Where "TipoCliente" = ''Clientes''
Order by "NomePessoa"';
else
XSQL = 'Select "CodigoPessoa","NomePessoa"
else
XSQL = 'Select "CodigoPessoa","NomePessoa"
From "Pessoas"
Where "TipoCliente" = ''Clientes''
Order by "NomePessoa"';
end if;
/*Executa o conteúdo da variável XSQL*/
For XRetorno in
Execute XSQL
loop
Return Next XRetorno;
end loop;
end;
$$ Language plpgsql;
Execute XSQL
loop
Return Next XRetorno;
end loop;
end;
$$ Language plpgsql;
Linha de comando para fazer a chamada a função
Select * From "ListaPessoas"('Clientes');
Observações: Em testes passados, consegui comprovar, o ganho em tempo de retorno de dados pesquisado, quando usamos quando criamos os tipos de campos para o retorno de uma função.
Nenhum comentário:
Postar um comentário
Comente sempre por favor.