Fórum erro multiple rows in singleton select #222597

26/03/2004

0

Qdo mando executar a procedure aparece o seguinte erro:
erro multiple rows in singleton select?

select a.id_contrato from atu_contrato a
where a.id_contrato in (
select id from contratos c
where (c.status = ´L´) or (c.status = ´T´) and (c.data_atu < ´5/1/2003´))
into :idcontrato;
if ((:idcontrato is not null) and (:idcontrato>0)) then
insert into teste_delete_arq (codatu_contrato) values (:idcontrato);

O que está errado. Ozias


Oziasl

Oziasl

Responder

Posts

26/03/2004

Wtjunior

Ozias,

Quando um select em uma Procedure retornar mais que um registro, é necessário utilizar um CURSOR.

abraço
Wilson


Responder

Gostei + 0

26/03/2004

Oziasl

Desculpe não entendi sobre o CURSOR. Estou migrando recentemente para Firebird. Seria possível você explicar-me. Obrigado Ozias


Responder

Gostei + 0

26/03/2004

Gandalf.nho

Faça assim:

[b:308e84ef8e]for[/b:308e84ef8e] select a.id_contrato from atu_contrato a
where a.id_contrato in (
select id from contratos c
where (c.status = ´L´) or (c.status = ´T´) and (c.data_atu < ´5/1/2003´))
into :idcontrato [b:308e84ef8e]do[/b:308e84ef8e]
[b:308e84ef8e]begin[/b:308e84ef8e]
if ((:idcontrato is not null) and (:idcontrato>0)) then
insert into teste_delete_arq (codatu_contrato) values (:idcontrato);
[b:308e84ef8e]end[/b:308e84ef8e]

Você deve usar a estrutura FOR SELECT.. DO em consultas que retornam mais de um registro.


Responder

Gostei + 0

26/03/2004

Oziasl

gandalf.nho muito obrigado mas muito mesmo é de coração. A sua dica foi de suma importância no dia de hoje. Valeuuuuuuuuuuu. Fuiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii. Ozias :lol:


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar