erro multiple rows in singleton select
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
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
Curtidas 0
Respostas
Wtjunior
26/03/2004
Ozias,
Quando um select em uma Procedure retornar mais que um registro, é necessário utilizar um CURSOR.
abraço
Wilson
Quando um select em uma Procedure retornar mais que um registro, é necessário utilizar um CURSOR.
abraço
Wilson
GOSTEI 0
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
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.
[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
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