Página 1 de 1

UPDATE com condição em outra tabela

Enviado: Seg, 01 Jul 2019 6:29 pm
por carlynhos77
Ola, boa noite...

Tenho 2 tabelas (CAD_ITENS e CAD_ITENS_PREGAO)

Inicialmente, marquei todos meus ITENS (cad_itens) como ITENS_FRACASSADOS

Em determinado momento, para cada proponente, vou importar os itens com as ofertas deles

Esse itens importados, são gerados inicialmente com base na tabela CAD_ITENS...

agora, eu preciso verificar se todos o itens, constantes na tabela CAD_ITENS, tiveram propostas... se sim, vou quero marcar o determinado item da tabela CAD_ITENS como (fracassado = não(2) )... se no select não for achado nenhuma oferta para aquele item, ele permanecera como fracassado mesmo...

Pensei em um UPDATE,

Selecionar tudo

UPDATE CAD_ITENS 
SET ITEM_FRACASSADO  = 2
WHERE id_cidade = :g_id_cidade and CODIGO_LICITACAO = :G_NR_LICITACAO
and CODIGO_ITEM = ( select CODIGO_ITEM from CAD_ITENS_PREGAO where id_cidade = :g_id_cidade and CODIGO_LICITACAO = :G_NR_LICITACAO) ;

Mas não deu certo, algo ta errado ai

Existe oferta, muda a situação do item para 2(não), so isso q preciso

Re: UPDATE com condição em outra tabela

Enviado: Seg, 01 Jul 2019 7:07 pm
por dr_gori
Como você faz pra saber se um item teve propostas?
Se ele EXISTE na CAD_ITENS_PREGAO significa que teve proposta?
Ou é um campo dessa tabela que indica se houve proposta ou não?

Re: UPDATE com condição em outra tabela

Enviado: Seg, 01 Jul 2019 8:17 pm
por carlynhos77
é assim... montamos o edital que os itens q serão licitados, dai isso ta salvo na tabela CAD_ITENS

os interessados (proponentes) solicitam uma planilha com esses itens para que eles registrem sua oferta incial para cada itens, quando eles devolver essa planilha eu importo esses itens para a tabela CAD_ITENS_PREGAO... essa tabela q tera os registros das rodadas

Porém, ocorrem que alguns itens não terem ofertas, acharam o valor baixo, talvez não tem o item para vender, etc... dai alguns itens ninguém faz proposta inicial, então esse item é considerado fracassado

Quero fazer um loop na tabela CAD_ITENS, verificando na tabela CAD_ITENS_PREGAO se para este item houve alguma oferta, se eu achar alguma oferta, eu já marco ele como não fracassado... se ao pesquisa na tabela CAD_ITENS_PREGOA não for encontrado nenhuma oferta, não faço nada, pois por padrão já deixei todos os itens da tabela CAD_ITENS como fracassados

Então é uma consulta onde, achando um registro correspondente na tabela CAD_ITENS_PREGAO, eu altero a situação do campo fracassado que esta na tabela CAD_ITENS

Re: UPDATE com condição em outra tabela

Enviado: Seg, 01 Jul 2019 8:57 pm
por dr_gori
Tenta assim:

Selecionar tudo

UPDATE CAD_ITENS y
SET y.ITEM_FRACASSADO  = 2
WHERE y.id_cidade = :g_id_cidade 
  and y.CODIGO_LICITACAO = :G_NR_LICITACAO
  and exists ( select 1 
               from CAD_ITENS_PREGAO x
               where x.id_cidade        = y.id_cidade 
                 and x.CODIGO_LICITACAO = y.codigo_licitacao) ;

Re: UPDATE com condição em outra tabela

Enviado: Seg, 01 Jul 2019 9:18 pm
por carlynhos77
é, você é fera, deu certo, so fiz um ajuste, acrescentei o CODIGO_ITEM

Selecionar tudo

UPDATE LIC_LICITACAO_ITENS y
SET y.ITEM_FRACASSADO  = 2
WHERE y.id_cidade = :g_id_cidade 
  and y.CODIGO_LICITACAO = :G_NR_LICITACAO
  and exists ( select 1 
               from LIC_LICITACAO_ITENS_PREGAO x
               where x.id_cidade        = y.id_cidade 
                 and x.CODIGO_LICITACAO = y.codigo_licitacao
                 and x.CODIGO_ITEM = y.CODIGO_ITEM) ;
problema resolvido... muito obrigado

Re: UPDATE com condição em outra tabela

Enviado: Ter, 02 Jul 2019 3:00 pm
por dr_gori
Isso mesmo! Esqueci o código do item :-D
Bom que deu certo.