erro multiple rows in singleton select

Delphi

26/03/2004

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

Curtidas 0

Respostas

Wtjunior

Wtjunior

26/03/2004

Ozias,

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

abraço
Wilson


GOSTEI 0
Oziasl

Oziasl

26/03/2004

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


GOSTEI 0
Gandalf.nho

Gandalf.nho

26/03/2004

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.


GOSTEI 0
Oziasl

Oziasl

26/03/2004

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:


GOSTEI 0
POSTAR