Subject | Stored proc recursion problem |
---|---|
Author | jasajona |
Post date | 2004-07-23T09:31:20Z |
I am using 1.5.1 server. I wrote stored proc that is showing all nodes
of the tree. The problem is that recursion do not work right in normal
mode, but when I try to debug it is working right. Is it a FB 1.5.1 bug?
In normal mode I am getting wrong result:
KLASESID GYLIS
13 1
14 2
23 3
24 4
10111 5
In debug mode I am getting right result:
KLASESID GYLIS
13 1
14 2
23 3
24 4
10111 5
10121 2
10142 3
10124 2
This is my stored proc:
CREATE PROCEDURE KLASESAPACION (
GAUTASKLASESID INTEGER,
GAUTASGYLIS INTEGER)
RETURNS (
KLASESID INTEGER,
GYLIS INTEGER)
AS
DECLARE VARIABLE VAIKINEID INTEGER;
BEGIN
IF (GAUTASKLASESID IS NULL) THEN EXIT;
IF (GAUTASGYLIS IS NULL) THEN GAUTASGYLIS = 0;
KLASESID = :GAUTASKLASESID;
GYLIS = :GAUTASGYLIS + 1;
SUSPEND;
FOR SELECT KlasesID
FROM Klases
WHERE TevinesKlasesID = :KLASESID
INTO :VaikineID DO BEGIN
FOR SELECT KLASESID, GYLIS
FROM KLASESAPACION(:VaikineID, :GAUTASGYLIS + 1)
ORDER BY GYLIS
INTO :KlasesID, :Gylis DO BEGIN
SUSPEND;
END
END
END
This is my table:
create table Klases (
KlasesID integer not null,
TevinesKlasesID integer,
Pavadinimas varchar(50),
Pavadinimas2 varchar(50),
constraint PK_KLASES primary key (KlasesID)
);
alter table Klases
add constraint FK_KLASES_REFERENCE_KLASES foreign key (TevinesKlasesID)
references Klases (KlasesID)
on delete cascade;
This is data that I have:
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (13, NULL, 'Pirma klasë', 'Pervaja klassa');
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (14, 13, 'Pirmo/Antras', 'asdddd');
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (15, NULL, 'trecias', '333333333333');
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (17, NULL, 'penktas', NULL);
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (20, NULL, 'Siastas', 'ffffffffff');
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (23, 14, 'Super turbo', 'sss');
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (24, 23, 'aaaaaaaaaa', NULL);
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (25, NULL, 'zzzzzzzzzz', NULL);
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (22, NULL, 'IT rûðys', 'ruðys');
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (10001, 22, 'Baldai', 'baldai');
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (10002, 22, 'Pastatai', 'pastatai');
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (10111, 24, 'dizel', 'ssdd');
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (10112, 24, 'kazkas', 'ffff');
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (10121, 13, 'liau liau', 'sisbeitas');
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (10124, 13, 'fffff', 'ffff');
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (10142, 10121, 'jkkkkkkkkkkkkkkk', 'fgfghghj');
Please help me with this problem.
of the tree. The problem is that recursion do not work right in normal
mode, but when I try to debug it is working right. Is it a FB 1.5.1 bug?
In normal mode I am getting wrong result:
KLASESID GYLIS
13 1
14 2
23 3
24 4
10111 5
In debug mode I am getting right result:
KLASESID GYLIS
13 1
14 2
23 3
24 4
10111 5
10121 2
10142 3
10124 2
This is my stored proc:
CREATE PROCEDURE KLASESAPACION (
GAUTASKLASESID INTEGER,
GAUTASGYLIS INTEGER)
RETURNS (
KLASESID INTEGER,
GYLIS INTEGER)
AS
DECLARE VARIABLE VAIKINEID INTEGER;
BEGIN
IF (GAUTASKLASESID IS NULL) THEN EXIT;
IF (GAUTASGYLIS IS NULL) THEN GAUTASGYLIS = 0;
KLASESID = :GAUTASKLASESID;
GYLIS = :GAUTASGYLIS + 1;
SUSPEND;
FOR SELECT KlasesID
FROM Klases
WHERE TevinesKlasesID = :KLASESID
INTO :VaikineID DO BEGIN
FOR SELECT KLASESID, GYLIS
FROM KLASESAPACION(:VaikineID, :GAUTASGYLIS + 1)
ORDER BY GYLIS
INTO :KlasesID, :Gylis DO BEGIN
SUSPEND;
END
END
END
This is my table:
create table Klases (
KlasesID integer not null,
TevinesKlasesID integer,
Pavadinimas varchar(50),
Pavadinimas2 varchar(50),
constraint PK_KLASES primary key (KlasesID)
);
alter table Klases
add constraint FK_KLASES_REFERENCE_KLASES foreign key (TevinesKlasesID)
references Klases (KlasesID)
on delete cascade;
This is data that I have:
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (13, NULL, 'Pirma klasë', 'Pervaja klassa');
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (14, 13, 'Pirmo/Antras', 'asdddd');
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (15, NULL, 'trecias', '333333333333');
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (17, NULL, 'penktas', NULL);
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (20, NULL, 'Siastas', 'ffffffffff');
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (23, 14, 'Super turbo', 'sss');
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (24, 23, 'aaaaaaaaaa', NULL);
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (25, NULL, 'zzzzzzzzzz', NULL);
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (22, NULL, 'IT rûðys', 'ruðys');
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (10001, 22, 'Baldai', 'baldai');
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (10002, 22, 'Pastatai', 'pastatai');
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (10111, 24, 'dizel', 'ssdd');
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (10112, 24, 'kazkas', 'ffff');
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (10121, 13, 'liau liau', 'sisbeitas');
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (10124, 13, 'fffff', 'ffff');
INSERT INTO KLASES (KLASESID, TEVINESKLASESID, PAVADINIMAS,
PAVADINIMAS2) VALUES (10142, 10121, 'jkkkkkkkkkkkkkkk', 'fgfghghj');
Please help me with this problem.