Jump to content

igor.js167

Members
  • Content count

    7
  • Joined

  • Last visited

Community Reputation

0 Comum

About igor.js167

  1. igor.js167

    [Resolvido] Retornar resultados de case em um novo atributo

    Obrigado Motta! Na verdade, eu descobri que o problema foi que eu não tinha fechado o primeiro case e resolvi. Tentei colocar tudo com if, mas alguns estavam dando alguns problemas no elsif, mas vou tentar novamente depois... Muito obrigado pelo suporte! Eu estava receoso de tentar algo novo, como functions, mas agora evolui um pouco nos meus conhecimentos de DB e vou praticar mais! Valeu!
  2. igor.js167

    [Resolvido] Retornar resultados de case em um novo atributo

    Estou tentando criar minha primeira function, já fucei em muito fórum e vídeo aula de ontem pra hoje, mas por algum motivo parece que está sempre faltando alguma coisa pra compilar certinho. No caso, agora, ele está dando erro no fim do código. ele diz que espera um 'case' depois do end. Mas eu só quero terminar o código e acredito que já dei fim em todos os cases e ifs. Abaixo o código (um pouco extenso, mas é repetitivo): create or replace function calcular_bolus_rate(nr_seq_tecnica number, qt_dose number, qt_hora_min_sessao varchar2, qt_volume number, valor_opcao varchar2) return varchar2 is valor_bolus varchar2(5); -- Se valor_opcao = 'b' ou 'B' valor_rate varchar2(5); -- Se valor opcao = 'r' ou 'R' valor varchar2(5); BEGIN case when nr_seq_tecnica in (4,5,6,8) then -- se dose prescrita = 2.500UI if qt_dose = ',5' then valor_bolus := to_char(qt_volume, '999'); valor_rate := '-'; end if; -- se dose prescrita = 5.000UI if qt_dose = '1' then case when qt_hora_min_sessao in ('02:00','02:05','02:30','02:35') then valor_bolus := to_char(qt_volume, '999'); valor_rate := '-'; when qt_hora_min_sessao in ('03:00','03:05') then valor_bolus := '6,0'; valor_rate := '1,6'; when qt_hora_min_sessao in ('03:30','03:35') then valor_bolus := '6,0'; valor_rate := '1,3'; when qt_hora_min_sessao in ('04:00','04:05') then valor_bolus := '6,0'; valor_rate := '1,1'; else return null; end case; end if; -- se dose prescrita = 7.500UI if qt_dose = '1,5' then case when qt_hora_min_sessao in ('02:00','02:05','02:30','02:35') then valor_bolus := to_char(qt_volume, '999'); valor_rate := '-'; when qt_hora_min_sessao in ('03:00','03:05') then valor_bolus := '8,0'; valor_rate := '2,8'; when qt_hora_min_sessao in ('03:30','03:35') then valor_bolus := '8,0'; valor_rate := '2,3'; when qt_hora_min_sessao in ('04:00','04:05') then valor_bolus := '8,0'; valor_rate := '2,0'; else return null; end case; end if; -- se dose prescrita = 10.00UI if qt_dose = '2' then case when qt_hora_min_sessao in ('02:00','02:05','02:30','02:35') then valor_bolus := to_char(qt_volume, '999'); valor_rate := '-'; when qt_hora_min_sessao in ('03:00','03:05') then valor_bolus := '10,0'; valor_rate := '4,0'; when qt_hora_min_sessao in ('03:30','03:35') then valor_bolus := '10,0'; valor_rate := '3,3'; when qt_hora_min_sessao in ('04:00','04:05') then valor_bolus := '10,0'; valor_rate := '2,9'; else return null; end case; end if; -- se dose prescrita = 12.500UI if qt_dose = '2,5' then case when qt_hora_min_sessao in ('02:00','02:05','02:30','02:35') then valor_bolus := to_char(qt_volume, '999'); valor_rate := '-'; when qt_hora_min_sessao in ('03:00','03:05') then valor_bolus := '11,0'; valor_rate := '5,6'; when qt_hora_min_sessao in ('03:30','03:35') then valor_bolus := '11,0'; valor_rate := '4,7'; when qt_hora_min_sessao in ('04:00','04:05') then valor_bolus := '11,0'; valor_rate := '4,0'; else return null; end case; end if; -- se dose prescrita = 15.000UI if qt_dose = 3 then case when qt_hora_min_sessao in ('02:00','02:05','02:30','02:35') then valor_bolus := to_char(qt_volume, '999'); valor_rate := '-'; when qt_hora_min_sessao in ('03:00','03:05') then valor_bolus := '13,0'; valor_rate := '6,8'; when qt_hora_min_sessao in ('03:30','03:35') then valor_bolus := '13,0'; valor_rate := '5,7'; when qt_hora_min_sessao in ('04:00','04:05') then valor_bolus := '13,0'; valor_rate := '4,9'; else return null; end case; end if; -- se dose prescrita = 30.000UI if qt_dose = '6' then case when qt_hora_min_sessao in ('02:00','02:05','02:30','02:35') then valor_bolus := to_char(qt_volume, '999'); valor_rate := '-'; when qt_hora_min_sessao in ('03:00','03:05') then valor_bolus := '23,0'; valor_rate := '14,8'; when qt_hora_min_sessao in ('03:30','03:35') then valor_bolus := '23,0'; valor_rate := '12,3'; when qt_hora_min_sessao in ('04:00','04:05') then valor_bolus := '23,0'; valor_rate := '10,6'; else return null; end case; end if; -- Se opção = 'B' ou 'b' case when valor_opcao = 'b' or valor_opcao = 'B' then valor := valor_bolus; return valor; when valor_opcao = 'r' or valor_opcao = 'R' then valor := valor_rate; return valor; else return null; end case; return valor; end;
  3. igor.js167

    [Resolvido] Retornar resultados de case em um novo atributo

    Isso, são padronizados... 2500, 5000, 7500, 10.000 e 12.5000. Vou ter que pesquisar como funciona a criação de função, nunca fiz uma antes
  4. Boa tarde, No banco de dados tenho as informações a seguir, em diferentes tabelas: Acesso, Dose prescrita, tempo e volume. Preciso, de acordo com essas informações, calcular dois valores chamados bolus e rate seguindo uma condicional. O problema é como vou retornar estes dois valores, se não tem atributo onde eu possa inseri-los? Eu deveria criar uma nova tabela pra eles? Existe como retornar estes atributos sem ter de mexer em nenhuma tabela? O código atual que tenho, é: select a.nr_atendimento ATENDIMENTO, obter_nome_pf_atend(a.nr_atendimento) NOME, obter_data_nascto_pac_atend(a.nr_atendimento) NASCIMENTO, 'DOSE: ' || decode(a.qt_dose,',5','2.500 UI','1','5.000 UI','1,5','7.500 UI','2','10.000 UI','2,5','12.500 UI','3','15.000 UI','3,5','17.500 UI', '4','20.000 UI','4,5','22.500 UI','5','25.000 UI','5,5','27.500 UI','6','30.000 UI') DOSE, 'VOLUME: ' || a.qt_volume || ' ml' VOLUME, obter_desc_material(a.cd_material) MEDICAMENTO, d.qt_hora_min_sessao TEMPO, e.nr_seq_tecnica ACESSO -- Inserir aqui condicionais para cálculo de BOLUS e RATE from CPOE_material a, atend_paciente_unidade b, hd_escala_dialise c, cpoe_dialise d, hd_acesso e where a.cd_material = 49749 and a.nr_atendimento = b.nr_atendimento and d.nr_atendimento = b.nr_atendimento and obter_cd_pes_fis_atend(b.nr_atendimento) = c.cd_pessoa_fisica and b.dt_saida_unidade is null and a.dt_liberacao is not null and a.dt_suspensao is null and d.dt_liberacao is not null and d.dt_suspensao is null and c.dt_fim is null and e.cd_pessoa_fisica = obter_pessoa_atendimento(b.nr_atendimento,'C') and e.ie_adequado = 'S' and e.dt_perda_retirada is null and c.nr_seq_turno = :turno and c.nr_seq_escala = :escala E as condicionais que quero inserir é mais ou menos assim: SE acesso arteriovenoso então: se dose_prescrita = 2500 então bolus = volume e rate = '-' se dose_prescrita = 5000 então: se tempo = 2:00h, 2:05h, 2:30h ou 2:35h então Bolus = volume e rate = '-' se tempo = 3:00h ou 3:05 então Bolus = 6,0 e rate = 1,6 se tempo = 3:30h ou 3:35 então Bolus = 6,0 e rate = 1,3 se tempo = 4:00 ou 4:05h então bolus = 6,0 e rate = 1,1 se dose_prescrita = 7500 então se tempo = 2:00h, 2:05h, 2:30h ou 2:35h então Bolus = volume e rate = '-' se tempo = 3:00h ou 3:05 então Bolus = 8,0 e rate = 2,8 se tempo = 3:30h ou 3:35 então Bolus = 8,0 e rate = 2,3 se tempo = 4:00 ou 4:05h então bolus = 8,0 e rate = 2,0 se dose_prescrita = 10000 então se tempo = 2:00h, 2:05h, 2:30h ou 2:35h então Bolus = volume e rate = '-' se tempo = 3:00h ou 3:05 então Bolus = 10,0 e rate = 4,0 se tempo = 3:30h ou 3:35 então Bolus = 10,0 e rate = 3,3 se tempo = 4:00 ou 4:05h então bolus = 10,0 e rate = 2,9 se dose_prescrita = 12500 então se tempo = 2:00h, 2:05h, 2:30h ou 2:35h então Bolus = volume e rate = '-' se tempo = 3:00h ou 3:05 então Bolus = 11,0 e rate = 5,6 se tempo = 3:30h ou 3:35 então Bolus = 11,0 e rate = 4,7 se tempo = 4:00 ou 4:05h então bolus = 11,0 e rate = 4,0 se dose_prescrita = 15000 então se tempo = 2:00h, 2:05h, 2:30h ou 2:35h então Bolus = volume e rate = '-' se tempo = 3:00h ou 3:05 então Bolus = 13,0 e rate = 6,8 se tempo = 3:30h ou 3:35 então Bolus = 13,0 e rate = 5,7 se tempo = 4:00 ou 4:05h então bolus = 13,0 e rate = 4,9 se dose_prescrita = 30000 então se tempo = 2:00h, 2:05h, 2:30h ou 2:35h então Bolus = volume e rate = '-' se tempo = 3:00h ou 3:05 então Bolus = 23,0 e rate = 14,8 se tempo = 3:30h ou 3:35 então Bolus = 23,0 e rate = 12,3 se tempo = 4:00 ou 4:05h então bolus = 23,0 e rate = 10,6 se não então null SE acesso cateter então: se dose_prescrita = 2500 então bolus = volume e rate = '-' se dose_prescrita = 5000 então: se tempo = 2:00h, 2:05h, 2:30h ou 2:35h então Bolus = volume e rate = '-' se tempo = 3:00h ou 3:05 então Bolus = 6,0 e rate = 1,3 se tempo = 3:30h ou 3:35 então Bolus = 6,0 e rate = 1,1 se tempo = 4:00 ou 4:05h então bolus = 6,0 e rate = 1,0 se dose_prescrita = 7500 então se tempo = 2:00h, 2:05h, 2:30h ou 2:35h então Bolus = volume e rate = '-' se tempo = 3:00h ou 3:05 então Bolus = 8,0 e rate = 2,3 se tempo = 3:30h ou 3:35 então Bolus = 8,0 e rate = 2,0 se tempo = 4:00 ou 4:05h então bolus = 8,0 e rate = 1,8 se dose_prescrita = 10000 então se tempo = 2:00h, 2:05h, 2:30h ou 2:35h então Bolus = volume e rate = '-' se tempo = 3:00h ou 3:05 então Bolus = 10,0 e rate = 3,3 se tempo = 3:30h ou 3:35 então Bolus = 10,0 e rate = 2,9 se tempo = 4:00 ou 4:05h então bolus = 10,0 e rate = 2,5 se dose_prescrita = 12500 então se tempo = 2:00h, 2:05h, 2:30h ou 2:35h então Bolus = volume e rate = '-' se tempo = 3:00h ou 3:05 então Bolus = 11,0 e rate = 4,7 se tempo = 3:30h ou 3:35 então Bolus = 11,0 e rate = 4,0 se tempo = 4:00 ou 4:05h então bolus = 11,0 e rate = 3,5 se dose_prescrita = 15000 então se tempo = 2:00h, 2:05h, 2:30h ou 2:35h então Bolus = volume e rate = '-' se tempo = 3:00h ou 3:05 então Bolus = 13,0 e rate = 5,7 se tempo = 3:30h ou 3:35 então Bolus = 13,0 e rate = 4,9 se tempo = 4:00 ou 4:05h então bolus = 13,0 e rate = 4,3 se dose_prescrita = 30000 então se tempo = 2:00h, 2:05h, 2:30h ou 2:35h então Bolus = volume e rate = '-' se tempo = 3:00h ou 3:05 então Bolus = 23,0 e rate = 12,3 se tempo = 3:30h ou 3:35 então Bolus = 23,0 e rate = 10,6 se tempo = 4:00 ou 4:05h então bolus = 23,0 e rate = 9,3 Atenciosamente, Igor
  5. igor.js167

    restringir select a apenas uma linha de data por pessoa?

    Esse dado vem da tabela 'med_avaliacao_result', uma tabela onde tem o resultado de todos os itens de todas as avaliações do sistema. Estou restringido para o item 1266, que é o campo "Diagnóstico Nutricional" da avaliação 49, "Avaliação Nutricional". Esse select é um select resumido, o completo se encontra abaixo, perceba que tenho de fazer várias joins da mesma tabela, puxando apenas itens distintos: select nome.nm_pessoa_fisica NOME_PCT, decode(asg.qt_resultado,21,'Bem nutrido',22,'Risco nutricional',23,'Desnutrição leve', 24,'Desnutrição moderada',25,'Desnutrição grave') ASG_7P, decode(an.qt_resultado,61,'Primário',62,'Secundário',63,'Terciário') NIVEL_AN, decode(eat.qt_resultado,181,'< ou = 3 (Sem risco de broncoaspiração)',182,'> 3 (Com risco de broncoaspiração)') EAT10, decode(mis.qt_resultado,501,'< 6 (Nutrido)',502,'> 6 (Desnutrição e Inflamação)'), decode(diag.qt_resultado,871,'Desnutrição grave',872,'Desnutrição moderada',873,'Desnutrição leve', 874,'Eutrofia',875,'Sobrepeso',876,'Obesidade') from med_avaliacao_paciente codnome, pessoa_fisica nome, med_avaliacao_result asg, med_avaliacao_result an, med_avaliacao_result eat, med_avaliacao_result mis, med_avaliacao_result diag where asg.nr_seq_item = 1162 and an.nr_seq_item = 1166 and diag.nr_seq_item = 1266 and eat.nr_seq_item = 1180 and mis.nr_seq_item = 1218 and diag.nr_seq_avaliacao = asg.nr_seq_avaliacao and asg.nr_seq_avaliacao = an.nr_seq_avaliacao and an.nr_seq_avaliacao = eat.nr_seq_avaliacao and eat.nr_seq_avaliacao = mis.nr_seq_avaliacao and mis.nr_seq_avaliacao = codnome.nr_sequencia and codnome.cd_pessoa_fisica = nome.cd_pessoa_fisica and codnome.dt_liberacao is not null; O resultado é (por exemplo): Quando adiciono no código and codnome.dt_liberacao = (select max(codnome2.dt_liberacao) from med_avaliacao_paciente codnome2 where codnome.cd_pessoa_fisica = codnome2.cd_pessoa_fisica) O resultado é apenas os nomes que estão repetidos (com mais de uma avaliação), quando na verdade quero trazer todos, e aqueles que tiverem mais de uma avaliação, nesse caso, trazer apenas a última liberada (dt_liberacao). Desde já, agradeço muito a ajuda!
  6. Boa tarde, Estou enfrentando um problema recorrente nas minhas queries, já tentei algumas alternativas encontradas aqui, sem sucesso. Tenho o seguinte select: select avaliacao.dt_liberacao, avaliacao.cd_pessoa_fisica, nome.nm_pessoa_fisica NOME_PCT, decode(diag.qt_resultado,871,'Desnutrição grave',872,'Desnutrição moderada',873,'Desnutrição leve', 874,'Eutrofia',875,'Sobrepeso',876,'Obesidade') from med_avaliacao_paciente avaliacao, pessoa_fisica nome, med_avaliacao_result diag where diag.nr_seq_item = 1266 and diag.nr_seq_avaliacao = avaliacao.nr_sequencia and avaliacao.cd_pessoa_fisica = nome.cd_pessoa_fisica and avaliacao.dt_liberacao is not null and ie_situacao = 'A' O que quero é trazer apenas o último registro por pessoa, um das alternativas que tentei foi dada em outro tópico pelo moderador Motta, incluindo no where o código: and avaliacao.dt_liberacao = (select max(avaliacao2.dt_liberacao) from med_avaliacao_paciente avaliacao2 where avaliacao.cd_pessoa_fisica = avaliacao2.cd_pessoa_fisica) Porém esse select só retorna um resultado... Realmente preciso entender como funciona essa lógico, porque tenho vários selects semelhantes que preciso retirar os resultados "repetidos"
  7. Boa tarde, Estou enfrentando um problema recorrente nas minhas queries, já tentei algumas alternativas encontradas aqui, sem sucesso. Tenho o seguinte select: select avaliacao.dt_liberacao, avaliacao.cd_pessoa_fisica, nome.nm_pessoa_fisica NOME_PCT, decode(diag.qt_resultado,871,'Desnutrição grave',872,'Desnutrição moderada',873,'Desnutrição leve', 874,'Eutrofia',875,'Sobrepeso',876,'Obesidade') from med_avaliacao_paciente avaliacao, pessoa_fisica nome, med_avaliacao_result diag where diag.nr_seq_item = 1266 and diag.nr_seq_avaliacao = avaliacao.nr_sequencia and avaliacao.cd_pessoa_fisica = nome.cd_pessoa_fisica and avaliacao.dt_liberacao is not null and ie_situacao = 'A' O que quero é trazer apenas o último registro por pessoa, um das alternativas que tentei foi dada em outro tópico pelo moderador Motta, incluindo no where o código: and avaliacao.dt_liberacao = (select max(avaliacao2.dt_liberacao) from med_avaliacao_paciente avaliacao2 where avaliacao.cd_pessoa_fisica = avaliacao2.cd_pessoa_fisica) Porém esse select só retorna um resultado... Realmente preciso entender como funciona essa lógico, porque tenho vários selects semelhantes que preciso retirar os resultados "repetidos"
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.