Bom dia,
Em 05-02-2014 11:02, Rafael Fialho Corrêa escreveu:
Em 5 de fevereiro de 2014 11:55, Matheus Saraiva
<matheus.sara...@gmail.com <mailto:matheus.sara...@gmail.com>> escreveu:
Rafael Fialho
Não entendi o que vc quis dizer, o que preciso é que a clausula
WHERE receba um parâmetro. Como:
V = 'matheus'
WHERE nome = V
A variável V receberia o seu valor por parâmetro.
O que quero dizer é o seguinte:
CREATE OR REPLACE VIEW teste AS
select
id_nome
, nome
from
nomes;
GRANT ALL ON TABLE teste TO public;
"select * from teste where nome = 'matheus';"
Simples assim.. hehehe Isso que eu quis dizer.
Acredito que esta não seja uma opção tão 'performática', uma vez que a
view vai gerar todos os dados e só depois é que o planejador realizará a
restrição através do cláusula WHERE e ordenações necessárias.
Minha sugestão é criar uma função que realiza a consulta já adicionando
as restrições necessárias para a triagem inicial dos dados desejados.
Ex (descartando índices, segurança da função, etc)*1*.
/CREATE TABLE lancamentos (id int, conta text, campo1 text, campo2
text);//
//
//INSERT INTO lancamentos VALUES(1,'Produtivo','valor1','valor2');//
//INSERT INTO lancamentos VALUES(2,'Produtivo','valor1','valor2');//
//INSERT INTO lancamentos VALUES(3,'Mecanica','valor1','valor2');//
//INSERT INTO lancamentos VALUES(4,'Mecanica','valor1','valor2');//
....
//
//CREATE OR REPLACE FUNCTION sp_lancamentos(IN CODCONTA varchar)
RETURNS TABLE(i int, c1 text,c2 text, c text)//
//AS $$//
//
// BEGIN//
// RETURN QUERY SELECT id,conta,campo1,campo2 FROM
lancamentos WHERE conta = CODCONTA;//
// END;//
//$$//
//language 'plpgsql';/
Para uma function muito grande e com muitas variáveis para
substituição, vale a pena utilizar a cláusula EXECUTE no RETURN QUERY
(isso já me salvou de vários problemas em functions com mais mais de
1500 linhas e código e dezenas de variáveis)*2*:
/
....
RETURN QUERY EXECUTE 'SELECT id,conta,campo1,campo2 FROM
lancamentos WHERE conta = $1' USING CODCONTA;//
/ ....
Lembrando que estas ações podem dificultar a análise de um problema
futuro, pois o EXPLAIN não vai detalhar o conteúdo interno executado na
função e nem nos logs.
*1* - http://www.postgresql.org/docs/9.3/static/plpgsql-declarations.html
*2* - http://www.postgresql.org/docs/9.3/static/plpgsql-statements.html
Espero ter ajudado.
--
+--------------------------------------------------------------------------+
| Daniel Cordeiro de Morais Neto
| Diretor de TI - Portal de Cotações e-Compras
| Sócio-diretor ADM Soluções em Informática LTDA
| daniel.cordeiro(at)cotacoesecompras.com.br
| dmoraisn(at)gmail.com
| www.cotacoesecompras.com.br
| Fone: (083)8724-4440
| Gentoo User
| http://twitter.com/dmoraisn
+--------------------------------------------------------------------------+
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral