Procédure récursive nb max d'appel
Bonjour,
y a t'il un nombre maximum d'appel pour une procedure récursive?
voici ma procédure:
(ma table SOSA est initialisée, elle contient un enregistrement, qui est (n° = 1, et clef = personne de base pour la numérotation)
(je lui passe la clef de la personne de base)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| CREATE PROCEDURE PROCEDURE_SOSAS(
CLEF INTEGER DEFAULT NULL)
AS
DECLARE VARIABLE V_PERE INTEGER;
DECLARE VARIABLE V_MERE INTEGER;
DECLARE VARIABLE V_NUM BIGINT;
DECLARE VARIABLE V_CLEF INTEGER;
BEGIN
select DISTINCT p.clef_1, m.clef_1, s.numero
from liaisons_pere_enfant p, liaisons_mere_enfant m, SOSAS s
where p.clef_2 = :clef and
m.clef_2 = :clef and
s.ancetre = :clef
INTO :V_pere, :V_MERE, V_NUM;
if (:V_PERE is not null) then
begin
insert into sosas (numero, ancetre)
values(:V_NUM * 2, :V_pere);
EXECUTE PROCEDURE PROCEDURE_SOSAS(:V_PERE);
end
if (:V_MERE is not null) then
begin
insert into sosas (numero, ancetre)
values(:V_NUM * 2 + 1, :V_Mere);
EXECUTE PROCEDURE PROCEDURE_SOSAS(:V_MERE);
end
SUSPEND;
END; |
cette procédure me rempli ma table SOSA avec le numéro sosa(généalogie) des personnes et leurs clef.
elle fonctionne bien lorsque il n'y a pas trop d'ancetres :D
mais lorsque le nombre de génération devient trop grand j'ai le message::evilred:
Citation:
Starting transaction...
Preparing query: EXECUTE PROCEDURE PROCEDURE_SOSAS(2451)
Prepare time: 00:00:00.
Plan not available.
Executing...
*** IBPP::SQLException ***
Context: Statement::Execute( EXECUTE PROCEDURE PROCEDURE_SOSAS(2451) )
Message: isc_dsql_execute2 failed
SQL Message : -811
multiple rows in singleton select
Engine Code : 335544652
Engine Message :
multiple rows in singleton select
At procedure 'PROCEDURE_SOSAS'
At procedure 'PROCEDURE_SOSAS'
At procedure 'PROCEDURE_SOSAS'
At procedure 'PROCEDURE_SOSAS'
At procedure 'PROCEDURE_SOSAS'
At procedure 'PROCEDURE_SOSAS'
At procedure 'PROCEDURE_SOSAS'
At procedure 'PROCEDURE_SOSAS'
At procedure 'PROCEDURE_SOSAS'
At procedure 'PROCEDURE_SOSAS'
Execute time: 00:01:16.
donc y a t il un nombre maximum d'imbrication de procédures, ou une erreur dans ma procédure :oops: ?
car cette méthode d'appel récursif me paraissait la plus simple pour remplire ma table, d'ailleur je ne vois meme pas d'autre méthode.
merci