Como fazer um select que me resolva isto?

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
lopes_andre
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 49
Registrado em: Seg, 13 Out 2008 9:01 am
Localização: Lisboa

Viva,

Preciso de fazer uma coisa, mas não sei bem como o fazer...

Tenho uma TABELA1 com os seguintes dados:

Cod::Prof1::Prof2::Prof3::Prof4
1::True::NULL::NULL::NULL
2::NULL::True::NULL::NULL

E tenho outra TABELA2 com os seguintes dados:

NIF::Cod::Prof1::Prof2::Prof3::Prof4
123::1::True::False::False::False
124::2::False::True::False::False

Estou a fazer um procedimento que verifica com um select o que eu coloco na TABELA1. Neste exemplo queria obter com um select os NIF da TABELA2 onde o Prof1 é True, independentemente dos outros valores na TABELA2.

SELECT * FROM TABELA2
WHERE
AND Prof1 = TABELA1.Prof1
AND Prof2 = TABELA1.Prof2
AND Prof3 = TABELA1.Prof3
AND Prof4 = TABELA1.Prof4;

A questão, como é que eu consigo fazer um select deste tipo, mesmo quando os campos na TABELA1 estão a NULL.

Desde já obrigado.
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,

Não sei o relacionamento entre estas tabelas,mas, se desejas PROF1 = True tanto na tabela 1 quanto na tabela 2, um Union talvez resolva o teu caso.

Selecionar tudo

SELECT CAMPO1,CAMPO2,CAMPO3
FROM TABELA1
WHERE CAMPO1='True'

UNION

SELECT CAMPO1,CAMPO2,CAMPO3
FROM TABELA2
WHERE CAMPO1='True'

Veja se é isto que precisa e, qualquer coisa, manda pra gente.
lopes_andre
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 49
Registrado em: Seg, 13 Out 2008 9:01 am
Localização: Lisboa

Viva,

Não me expliquei bem neste problema. Vou tentar explicar melhor a situação.

Tenho uma tabela1 com

ITEM_FUNC::PROFI_A P::ROF_B::PROF_C::PROF_D
XXX1::TRUE::__::__::__
XXX2::__::TRUE::__::__
XXX3::TRUE::__::__::__

* __ são campos a NULL


e uma tabela2 com

NIF::ITEM_FUNC::PROFI_A::PROFI_B::PROFI_C::PROFI_D
XXXXX1::XXX1::TRUE::FALSE::FALSE::FALSE
XXXXX1::XXX2::TRUE::TRUE::TRUE::TRUE
XXXXX1::XXX3::TRUE::FALSE::FALSE::TRUE

A tabela1 é uma tabela em que eu coloco os dados. Eu quero pesquisar NIF's que preencham os requisitos dispostos na tabela1. No exemplo da tabela2 o NIF XXXXX1 preenche os requisitos definidos na tabela1. O que eu queria fazer era enviar para uma linha o XXXXX1.

A minha questão. Como conseguirei fazer isto em procedimento?

Cumps
Avatar do usuário
Toad
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 253
Registrado em: Sex, 18 Nov 2005 2:14 pm
Localização: Seattle, WA
Contato:
Matheus Gonçalves
matheus.dev
twitter.com/developer__c

E aí lopes_andre, tudo bem?

Cara, você precisa de um procedimento que verifique se, quando um atributo estiver como true [PROFI_A por exemplo], na tabela 1 esse mesmo atributo não é nulo, certo??

Você pode fazer um cursor percorrendo os dados da tabela2.
Para cara uma das linhas, você compara os atributos com os valores dos atributos da tabela1.

Os nomes das colunas são iguais em ambas as tabelas?
lopes_andre
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 49
Registrado em: Seg, 13 Out 2008 9:01 am
Localização: Lisboa

Viva, sim os nomes são iguais nas duas tabelas.

O meu problema é na forma de verificar se as linhas da tabela1 batem com as da tabela2. Nunca fiz nenhum cursor assim.

Desde já obrigado.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Majestic-12 [Bot] e 5 visitantes