firebird 2.1.3
Ciao a tutti,
ho questo problemuccio che mi sta mettendo a tappeto da oltre 10giorni!
all'origine doveva essere una Stored Procedure ricorsiva, che ho ridotto ad una stored procedure che effettua 4/5 volte lo stesso tipo di ricerca.
il problema è che non riesco ad ottenere il risultato che ''dovrei''. mi spiego:
la stored che attinge dati da 1 sola tabella,
se la eseguo con il debug ottengo (correttamente) un risultato di 9 righe,
se invece la eseguo normalmente ottengo (erroneamente) un risultato di 7 righe.
per eseguire la stored in modalità debug ho scaricato la versione free di EMS sql firebird...
non so dove sbaglio e non so se sbaglio.... e non capisco perchè la stessa stored restituisce un dataresoult diverso.
spero in Voi!
grazie
questa è la mia tabella:
codice:
CREATE TABLE DISTINTABASE (
ID INTEGER NOT NULL,
IDARTICOLO INTEGER NOT NULL,
IDARTICOLODISTINTA INTEGER NOT NULL);
questi i dati
codice:
INSERT INTO DISTINTABASE (ID, IDARTICOLO, IDARTICOLODISTINTA) VALUES (9906, 4, 3);
INSERT INTO DISTINTABASE (ID, IDARTICOLO, IDARTICOLODISTINTA) VALUES (6, 4, 2);
INSERT INTO DISTINTABASE (ID, IDARTICOLO, IDARTICOLODISTINTA) VALUES (4, 4, 1);
INSERT INTO DISTINTABASE (ID, IDARTICOLO, IDARTICOLODISTINTA) VALUES (9908, 1, 6);
INSERT INTO DISTINTABASE (ID, IDARTICOLO, IDARTICOLODISTINTA) VALUES (7, 2, 3);
INSERT INTO DISTINTABASE (ID, IDARTICOLO, IDARTICOLODISTINTA) VALUES (9909, 1, 7);
INSERT INTO DISTINTABASE (ID, IDARTICOLO, IDARTICOLODISTINTA) VALUES (12, 3, 6);
INSERT INTO DISTINTABASE (ID, IDARTICOLO, IDARTICOLODISTINTA) VALUES (9901, 1, 2);
INSERT INTO DISTINTABASE (ID, IDARTICOLO, IDARTICOLODISTINTA) VALUES (9902, 1, 3);
INSERT INTO DISTINTABASE (ID, IDARTICOLO, IDARTICOLODISTINTA) VALUES (19, 3, 5);
questa la stored procedure:
codice:
CREATE PROCEDURE ARTICOLIFIGLI (
idpadrein integer,
idarticoloin integer)
returns (
out_id integer,
out_idarticolopadre integer,
out_idpadre integer,
out_idarticolo integer)
as
begin
/* Procedure Text */
for select
:idpadrein,
distintabase.idarticolo,
distintabase.idarticolodistinta
from distintabase where
distintabase.idarticolo=:idarticoloin
into
out_idpadre,
out_idarticolopadre,
out_idarticolo
do
begin
if (out_id is null) then out_id=1; else out_id=out_id+1;
suspend;
for select
:out_id,
distintabase.idarticolo,
distintabase.idarticolodistinta
from distintabase where
distintabase.idarticolo=:out_idarticolo
into
out_idpadre,
out_idarticolopadre,
out_idarticolo
do
begin
if (out_id is null) then out_id=1; else out_id=out_id+1;
suspend;
for select
:out_id,
distintabase.idarticolo,
distintabase.idarticolodistinta
from distintabase where
distintabase.idarticolo=:out_idarticolo
into
out_idpadre,
out_idarticolopadre,
out_idarticolo
do
begin
if (out_id is null) then out_id=1; else out_id=out_id+1;
suspend;
for select
:out_id,
distintabase.idarticolodistinta
from distintabase where
distintabase.idarticolo=:out_idarticolo
order by distintabase.idarticolodistinta
into
out_idpadre,
out_idarticolo
do
begin
if (out_id is null) then out_id=1; else out_id=out_id+1;
suspend;
end
end
end
end
end