>Carlos,
>Estou chegando um pouco tarde a essa discussão, mas resumindo o que vc precisa 
>seria 
>uma função com um retorno *variável*, ou seja, com diferentes tipos de dados e 
>valores??
Boa noite, Fabrizio.
Sim.
O sistema ora desenvolvido sera utilizado na web, com conexão 3G, em tablets 
que serão colocados
nas ambulâncias. De acordo com este cenário me preocupou usar recursos 
desnecessários, como por
exemplo, fazer junções LEFT JOIN, conforme script mais abaixo.
Assim, o objetivo da função, seria basicamente pegar somente os atributos das 
tabelas pertinentes, 
dependendo da classificação do servico, e retorná-los à aplicação.
Se o serviço for APH (Atendimento Pré-Hospitalar), as entidades participantes 
do relacionamento são:
    Serviço,               
    Sintomatologia,
    Orientação
Se o servico form REM (Remoção), o relacionamento seria:
    Serviço,               
    Agenda de Remoções
    Quadro Clínico,
    Observações da Remoção
Já havia feito uma solução baseada em junções:  
CREATE OR REPLACE VIEW view_get_servico AS
SELECT 
    -- Registros de serviço
    s.num_servico,
     -- Registros de serviço

    r.contato_destino1, 
    r.setor_destino1, 
    r.telefone_destino1, 
    r.cod_hospital2, 
    r.contato_destino2, 
    r.setor_destino2, 
    r.telefone_destino2, 
    r.medico_responsavel, 
    r.finalidade, 
    r.tipo_exame,
    r.retorno, 
    r.entubado,
    r.oximetro, 
    r.monitor_cardiaco, 
    r.bomba_infusora, 
    r.qtde_bomba_inf, 
    r.incubadora, 
    r.destino2_cod_uf, 
    r.destino2_cod_bairro, 
    r.destino2_cod_cidade, 
    r.destino2_logradouro, 
    r.np, 
    r.usuariovr, 
    r.hverem, 
    r.cpf_profissional, 
    r.cr_profissional, 
    r.ocr_profissional, 
    r.ufcr_profissional, 
    r.sp, 
    r.cnpj_destino1, 
    r.cer,
    -- Sintomatologia, pertinente a atendimentos APH
    st.ocorrencia AS sintomatologia, -- sintomatologia

    -- Orientação, pertinente a atendimentos APH
    o.ocorrencia AS orientacao, -- orientacao

    -- Quadro Clínico, pertinente a Remoções
    qc.ocorrencia AS  quadro_clinico, -- quadro clinico

    -- Observações sobre a Remoção, pertinente a Remoções
    obr.ocorrencia AS obs_remocao, -- observações sobre a remocao

    -- Observaçções sobre o Serviço, pertinente a atendimentos APH
    obs.ocorrencia AS obs_servico, -- observações sobre o servico
    sb.descricao AS bairro, --
    sc.descricao AS cidade,
    sp.descricao as sintoma_principal,
    ss.descricao as sintoma_secundario




FROM servico s

  -- Liga remocao quando existir     
  LEFT JOIN servico_agenda_remocao r
   ON (s.num_servico = r.num_servico)



  --Liga sintomatologia quando existir 
  LEFT JOIN servico_ocorrencias AS st 
   ON (s.num_servico = st.num_servico AND st.referencia = '00')

  --Liga orientacao quando existir 
  LEFT JOIN servico_ocorrencias AS o 
   ON (s.num_servico = o.num_servico AND o.referencia = '01')


  --Liga quadro clinico quando existir 
  LEFT JOIN servico_ocorrencias AS qc 
   ON (s.num_servico = qc.num_servico AND qc.referencia = '04')

  --Liga Observações da remocao quando existir 
  LEFT JOIN servico_ocorrencias AS obr 
   ON (s.num_servico = obr.num_servico AND obr.referencia = '05')

  --Liga Observações do servico 
  LEFT JOIN servico_ocorrencias AS obs 
   ON (s.num_servico = obs.num_servico AND obs.referencia = '56')


  --Liga cidade, quando existir 
  LEFT JOIN cidades AS sc
   ON (s.cod_cidade = sc.cod_cidade and sc.cod_uf = s.cod_uf)

  --Liga bairro quando existir 
  LEFT JOIN bairros AS sb
   ON (s.cod_cidade = sb.cod_cidade and sb.cod_bairro = s.cod_bairro)


  --Liga o sintoma_principal 
  LEFT JOIN servico_sintomas AS sp
   ON (s.sintoma_principal = sp.codigo)

--Liga o sintoma_secundario 
  LEFT JOIN servico_sintomas AS ss
   ON (s.sintoma_secundario = ss.codigo)






A tela inicial do aplicativo é esta:
www.utivida.com.br/mapa_despacho.jpg

Depois que o usuário chega a esta tela, uma das funcionalidades é detalhar 
determinado serviço, conforme tela abaixo:
www.utivida.com.br/servico_detalhes.jpg



Ao clicar no botão Detalhes de Serviço, submete-se um script que retorna um 
objeto JSon da consulta abaixo:

$sql  = "SELECT * from view_get_servico WHERE num_servico = ";
$sql .= $_GET['num_servico'];


Justificativa:
Depois de análise de algumas estastísticas, percebi que o fluxo de serviços da 
empresa é 50% de Remoções. 
Então, executar o script acima nesta ferramenta, vai consumir recursos 
desnecessariamente, em muitos momentos,
já que quando tratar-se de uma remoção, grande parte da consulta terá apenas 
estrutura e valores nulos circulando na
web.

Então, pensei numa função que pudesse avaliar um campo (classif_serviço) e 
dependendo dessa avaliação, me devolver
um ou outro resultado. Seria baseada em RECORD, mais ou menos assim:

Selecionar dados do serviço; (Comum em ambas as consultas)
               
Se classif_servico = ‘APH’,  então
{
    Selecionar dados da Sintomatologia;
    Selecionar dados da Orientação;
    Montar resultado;
}
Senão
{
    Selecionar dados da Agenda de Remoções;
    Selecionar dados do Quadro Clínico;
    Selecionar dados de Observação;
    Montar Resultado;
}

Retornar Resultado;

Então, um dos membros da lista me passou um exemplo usando matrizes que 
acredito que vai funcionar. 


Carlos Antônio Pereira
Gerência de TI
Vida Emergências Médicas

(61) 3051 - 8933
(61) 8131 - 7104
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a