- Este tópico contém 5 respostas, 3 vozes e foi atualizado pela última vez 15 anos, 4 meses atrás por
maykoncma.
-
AutorPosts
-
4 de novembro de 2010 às 12:02 am #96714
maykoncma
ParticipanteOlá pessoal, sou novo aqui e estou tentando atualizar um campo em uma tabela cujo a condição obedeça um select. Porem ao rodar o script me é retornado “0 rows updated”. Quando consulto o select que está entre parenteses há retorno de mais de 1.600 registros. Como proceder? Segue o código abaixo:
UPDATE CBACD SET PRACA = 'X' where praca in (SELECT cbacd.praca
FROM CBACD, ACMOV WHERE CBACD.D_ACORDO >= '01-OCT-10' AND CBACD.GRUPO = ACMOV.GRUPO
AND CBACD.SEQ = ACMOV.SEQ AND CBACD.COTA = ACMOV.COTA and CBACD.AVISO = ACMOV.AVISO)4 de novembro de 2010 às 9:41 pm #96749Peterson
ParticipanteQuando você está comparando com ’01-OCT-10′ você não devia usar uma função TO_DATE para isso?
5 de novembro de 2010 às 1:44 am #96757burga
ParticipanteTeste com áliases nos nomes das tabelas, pois não temos como saber se no SELECT está sendo considerado colunas da tabela CBACD do comando UPDATE ou se estão sendo consideradas as colunas da tabela CBACD da própria subconsulta…
UPDATE CBACD T
SET T.PRACA = 'X'
WHERE T.PRACA IN (
SELECT T1.PRACA
FROM CBACD T1, ACMOV T2
WHERE T1.D_ACORDO >= '01-OCT-10'
AND T1.GRUPO = T2.GRUPO
AND T1.SEQ = T2.SEQ
AND T1.COTA = T2.COTA
AND T1.AVISO = T2.AVISO);5 de novembro de 2010 às 3:56 am #96761maykoncma
Participante[quote=”Peterson”:ddhri1h5]Quando você está comparando com ’01-OCT-10′ você não devia usar uma função TO_DATE para isso?[/quote]
Peterson, na realidade estou considerando D_Acordo sendo maior ou igual a data informada. Apesar de não saber como funciona o TO_Date, creio que ele aponta para a data informada.
5 de novembro de 2010 às 3:58 am #96762maykoncma
Participante[quote=”burga”:qpv9u29o]Teste com áliases nos nomes das tabelas, pois não temos como saber se no SELECT está sendo considerado colunas da tabela CBACD do comando UPDATE ou se estão sendo consideradas as colunas da tabela CBACD da própria subconsulta…
UPDATE CBACD T[/quote]
SET T.PRACA = 'X'
WHERE T.PRACA IN (
SELECT T1.PRACA
FROM CBACD T1, ACMOV T2
WHERE T1.D_ACORDO >= '01-OCT-10'
AND T1.GRUPO = T2.GRUPO
AND T1.SEQ = T2.SEQ
AND T1.COTA = T2.COTA
AND T1.AVISO = T2.AVISO);burga, obrigado pelo interesse em ajudar. Vamos la, tentei executar o script e não retornou nada atualizado. (0 rows updated). Ou seja, a mesma resposta do codigo que montei. Teria mais alguma sugestão?
5 de novembro de 2010 às 4:24 am #96763maykoncma
ParticipanteBurga, veja bem. Consegui resultados com o código abaixo porém ainda tenho problemas:
UPDATE CBACD
SET cbacd.PRACA = 'X'
WHERE cbacd.aviso IN (
SELECT cbacd.aviso
FROM CBACD, ACMOV
WHERE CBACD.D_ACORDO >= '01-jan-10'
AND CBACD.GRUPO = ACMOV.GRUPO
AND CBACD.SEQ = ACMOV.SEQ
AND CBACD.COTA = ACMOV.COTA
AND CBACD.AVISO = ACMOV.AVISO);O problema é que a quantidade de updates que o oracle me mostra é o mesmo que se eu consultar toda a tabela com o script
SELECT COUNT(AVISO) FROM CBACD WHERE D_ACORDO >= '01-jan-10';Ou seja, minha consulta não está tratando a condiçao
CBACD.AVISO = ACMOV.AVISO[/code] -
AutorPosts
- Você deve fazer login para responder a este tópico.