Problema com Replace no PL/SQL

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
NeoWolfer
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 5
Registrado em: Ter, 27 Mai 2008 11:34 am
Localização: Juara - muito

O problema é o seguinte, tenho um db com varias tabela que uma depende da outra pra poder complementar os dados...

O que preciso é pegar a data de internação de um paciênte, tendo como referência o numero de prontuário...

o que acontece... talver esteja usando o comando errado, porem a idéia é a seguinte, ele pega o numero de prontuário de uma tabela "B", procura na outra tabela "A" o mesmo numero de prontuário e imprime na tela a data de internação que esta na tabela "A"...

Selecionar tudo

select 
       D.NM_CONVENIO,
       REPLACE(B.NRO_PRONTUAR,A.NRO_PRONTUAR,A.dthr_intern)DATA_INTERNAÇÃO,
       B.NM_PACIENTE,
       B.DT_NASC_PAC,
       C.END_PACIENTE
from 
       sih.reg_intern A, 
       sih.prontuario B,
       sih.Compl_Pront C,
       SIH.CONVEN_HOSP  D
ORDER BY
       A.DTHR_INTERN
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother, beleza?

Então, cara... no caso, faltou a ligação das tabelas utilizadas no teu From e, isso causa produto cartesiano.

Você precisa fazer a ligação das tuas tabelas (no caso as 4), ligando a PK de uma com a FK da outra.

Uma dica: O número de ligações, deve ser, no mínimo, o nro de tabelas menos um, ou seja, você deve ter, no mínimo (dependendo da montagem de tua PK etc), 3 ligações, como no exemplo *:

Selecionar tudo

FROM 
       sih.reg_intern A, 
       sih.prontuario B, 
       sih.Compl_Pront C, 
       SIH.CONVEN_HOSP  D 
WHERE a.cod_intern = b.cod_intern 
    AND b.cod_pront  = c.cod_pront
    AND c.compl_pront = d.compl_pront   
*Nota: Os campos do Where são fictícios por não concecer tua modelagem, ok?

qualquer coisa, manda pra gente.
Julian Campagnoli
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 82
Registrado em: Ter, 26 Fev 2008 11:33 am
Localização: MG e SP
Julian de A. Campagnoli
Treinee, Desenvolvedor Oracle PL-SQL

Brother, beleza ?????


De uma olhada nesse link referente ao comando REPLACE:
http://glufke.net/oracle/viewtopic.php?t=3106


Abraço
Julian Campagnoli
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 82
Registrado em: Ter, 26 Fev 2008 11:33 am
Localização: MG e SP
Julian de A. Campagnoli
Treinee, Desenvolvedor Oracle PL-SQL

Coloquei o link de exemplo como utilizar o REPLACE pra você ver como ele funciona.

Seguindo o exemplo do nosso amigo Trevisolli você consegue obter o que precisa.

Abraço
NeoWolfer
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 5
Registrado em: Ter, 27 Mai 2008 11:34 am
Localização: Juara - muito

@ Julian Campagnoli

nem é tão simples assim, por que no meu caso eu num trabalho com alterção de caracteres em um mesmo texto, e sim com subistituição de variavel em tabelas diferentes....

@ Trevisolli

fiz a ligação, quando peço pro PL/SQL executar, ele não mostra nada na tela...., porem não mostra nenhuma mensagem de erro tb, deve ser por que a tabela é gigantesca, certa de 30.000 pacientes...
NeoWolfer
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 5
Registrado em: Ter, 27 Mai 2008 11:34 am
Localização: Juara - muito

Não esta dando muito certo ...

Codigo:

Selecionar tudo

SELECT
       A.dthr_intern DATA_INTERNAÇÃO,
       B.nm_Paciente Paciênte,
       B.dt_Nasc_Pac Data_Nascimento,
       C.end_Paciente Endereço_Paciente,
       A.Nro_Prontuar Pront
FROM
       sih.reg_intern A, 
       sih.prontuario B,
       sih.compl_pront C,
       sih.conven_hosp D
WHERE
       A.Nro_Prontuar = B.nro_prontuar and B.Nro_Prontuar = C.nro_prontuar and A.Nro_Prontuar = C.nro_prontuar and D.cod_convenio = 5
ORDER BY
       A.DTHR_INTERN
Resultado:

Selecionar tudo

linha	Data/hora_inter		Pacieente				Data nasc..	ende	prontuário
1	07/05/2007 10:53:10	MARIA DO AMPARO PEREIRA	08/11/1946	RUALUIZ GATE	15515
2	07/05/2007 10:53:10	MARIA DO AMPARO PEREIRA	08/11/1946	RUALUIZ GATE	15515
3	07/05/2007 10:53:10	MARIA DO AMPARO PEREIRA	08/11/1946	RUALUIZ GATE	15515
4	07/05/2007 10:53:10	MARIA DO AMPARO PEREIRA	08/11/1946	RUALUIZ GATE	15515
5	07/05/2007 10:53:10	MARIA DO AMPARO PEREIRA	08/11/1946	RUALUIZ GATE	15515
esta retornando a mesma pessoa em vez de ir pra proxima... =/
Porem os dados estão corretos, só que deveria aparecer somente 1x e não 5
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Fala brother, beleza?

Então, faltou uma Join nesta tua query.
Faltou a tabela "D".
Dá uma olhada e veja se este meu exemplo dá certo:

Selecionar tudo

SELECT 
       A.dthr_intern DATA_INTERNAÇÃO, 
       B.nm_Paciente Paciênte, 
       B.dt_Nasc_Pac Data_Nascimento, 
       C.end_Paciente Endereço_Paciente, 
       A.Nro_Prontuar Pront 
FROM 
       sih.reg_intern A, 
       sih.prontuario B, 
       sih.compl_pront C, 
       sih.conven_hosp D 
WHERE 
       A.Nro_Prontuar = B.nro_prontuar and B.Nro_Prontuar = C.nro_prontuar and A.Nro_Prontuar = D.nro_prontuar and D.cod_convenio = 5 
ORDER BY 
       A.DTHR_INTERN
Se não for esse, verifique tua modelagem pras tabelas C e D, e, associe-as, beleza?

qualquer coisa, manda ai.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 21 visitantes