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)
cette procédure me rempli ma table SOSA avec le numéro sosa(généalogie) des personnes et leurs clef.
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;
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
Partager