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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
mais lorsque le nombre de génération devient trop grand j'ai le message:

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 ?

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