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

Responder a