Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
O update abaixo apresenta o erro ORA-01427: a subconsulta de uma única linha retorna mais de uma linha.
UPDATE SIGA.SE2010 SET E2_DECRESC = (E2_VALOR*(SELECT A2_FIDE
from SIGA.SE2010 B, SIGA.SA2010 A
WHERE
A.A2_COD = B.E2_FORNECE and
A.A2_LOJA = B.E2_LOJA and
A.A2_FIDE <> 0.00 and
B.E2_SALDO = B.E2_VALOR and
B.E2_PREFIXO <> 'FID' and
B.E2_VENCTO BETWEEN '20120101' and '20131231' and
B.E2_DECRESC <> ((B.E2_VALOR * A.A2_FIDE)/100)))
Não estou sabendo corrigir... Preciso de ajuda.
Motta,
O intuito é preencher o campo E2_DECRESC com o resultado da formula (E2_VALOR * A2_FIDE).
Atualmente o campo da preenchido com um valor errado, gerado através de uma customização.
Minha query está correta?
Agradeço a sua preocupação, contudo, realmente é necessário.
Obs.: Já tenho um backup da tabela.
1º Veja o que a query (select) retorna executado separadamente.
2º Se retornar mais de um registro certifique-se de que é isto mesmo.
corrigindo o bloco passado
begin
for r in ((SELECT A2_FIDE , b.r_e_c_n_o_ recno
from SIGA.SE2010 B, SIGA.SA2010 A
WHERE
A.A2_COD = B.E2_FORNECE and
A.A2_LOJA = B.E2_LOJA and
A.A2_FIDE <> 0.00 and
B.E2_SALDO = B.E2_VALOR and
B.E2_PREFIXO <> 'FID' and
B.E2_VENCTO BETWEEN '20120101' and '20131231' and
B.E2_DECRESC <> ((B.E2_VALOR * A.A2_FIDE)/100))))
LOOP
update SIGA.SE2010 set E2_DECRESC = (E2_VALOR * R.A2_FIDE)
where r_e_c_n_o_ = r.recno;
end LOOP;
end;
O sql retorna um cursor, o update é feito para cada registro retornado.
Não entrei no mérito (nem tenho como) de saber se a query resolve o problema.
Obrigado Motta, funcionou!
Com o "=" a query
SELECT A2_FIDE ... /100))
só pode retornar no máximo uma linha.
Veja se esta deve mesmo retornar mais de uma linha, senão a corriga, se ela estiver correta faça
um bloco plsql para a atualização.
begin
2) Faça duas salvas antes de fazer isto.