>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