Boa noite turma,
Objetivo: Estou desenvolvendo uma função que retorna os dados do Locatario de
contrato de locação, so que
o locatario pode ser um Cliente, um Funcionario ou um Solicitante(que como se
fosse um parceiro da empresa). Nesta função
eu passo o Tipo de locatario e o codigo do mesmo, e de acordo com o tipo do
mesmo, é para a função dar um SELECT na
tabela correspondente e retornar os dados do locatario.
Erro: Não esta aceitando retornar mais de coluna nos sub-selects de cada WHEN...
Por isto que eu estou querendo utilizar uma estrutura de IF...THEN...END
IF...dentro de uma função SQL.
Alguem sabe como escrevo a sintaxe correta. Um colega da comunidade me indicou
para utilizar o CASE...
mais esta dando certo..
O corpo da função esta logo abaixo.
Gabriel.
-------------------------------------------------------------------------------------------------
CREATE OR REPLACE FUNCTION get_dados_locatario( TEXT, INTEGER) RETURNS SETOF
RECORD AS
$$
--Parametros: tipo_locatario (C = Cliente, S = Solicitante ou F = Funcionario);
o ID do mesmo(Codcliente, CodSolicitante, MatriculaFuncionario)
SELECT CASE
WHEN ($1 = 'C') THEN
(SELECT c.codcliente AS codlocatario
, c.razaonome AS locatario
, CASE
WHEN c.tipopessoa = 'F' THEN fmt_cpf(c.cpf)
WHEN c.tipopessoa = 'J' THEN c.cnpj
END AS cnpj_cpf
, CASE
WHEN c.tipopessoa = 'F' THEN c.rg
WHEN c.tipopessoa = 'J' THEN c.ie
END AS ie_rg
, c.tipopessoa, c.endereco, c.bairro, c.num
, fmt_fone(c.tel1) AS tel1, fmt_fone(c.fax) AS tel2
, ci.cidade, ci.uf
, CASE
WHEN c.cep IS NOT NULL THEN fmt_cep(c.cep)
WHEN ci.cep IS NOT NULL THEN fmt_cep(ci.cep)
END AS cep
FROM dscliente c LEFT JOIN dscidade ci
ON (c.codcidade = ci.codcidade)
WHERE c.codcliente = $2)
WHEN ($1 = 'F') THEN
(SELECT f.matricula AS codlocatario
, f.nome AS locatario
, fmt_cpf(f.cpf) AS cnpj_cpf, f.rg AS ie_rg
, 'F', f.endereco, f.bairro, f.num
, fmt_fone(f.telres) AS tel1, fmt(f.cel) AS tel2
, c.cidade, c.uf
, CASE
WHEN c.cep IS NOT NULL THEN fmt_cep(f.cep)
WHEN ci.cep IS NOT NULL THEN fmt_cep(ci.cep)
END AS cep
FROM dsfuncionario f LEFT JOIN dscidade c
ON (f.codcidade = c.codcidade)
WHERE f.matricula = $2)
WHEN ($1 = 'S') THEN
(SELECT s.codsolicitante AS codlocatario
, s.solicitante AS locatario
, CASE
WHEN s.tipopessoa = 'F' THEN fmt_cpf(s.cpf)
WHEN s.tipopessoa = 'J' THEN s.cnpj
END AS cnpj_cpf
, CASE
WHEN s.tipopessoa = 'F' THEN s.rg
WHEN s.tipopessoa = 'J' THEN s.ie
END AS ie_rg
, s.tipopessoa, s.endereco, s.bairro, s.num
, fmt_fone(s.tel1) AS tel1, fmt_fone(s.fax) AS tel2
, c.cidade, c.uf
, CASE
WHEN s.cep IS NOT NULL THEN fmt_cep(s.cep)
WHEN ci.cep IS NOT NULL THEN fmt_cep(ci.cep)
END AS cep
FROM dssolicitante s LEFT JOIN dscidade c ON(s.codcidade =
c.codcidade)
WHERE s.codsolicitante = $2)
END;
$$
LANGUAGE 'SQL';
_________________________________________________________________
Faça transações bancárias de maneira segura. Baixe agora o Novo Internet
Explorer 8.
http://brasil.microsoft.com.br/IE8/mergulhe/?utm_source=MSN%3BHotmail&utm_medium=Tagline&utm_content=Tag2&utm_campaign=IE8_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral