powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / IDS 11.10.FC2TL: нерабочая рекурсия ХП
7 сообщений из 7, страница 1 из 1
IDS 11.10.FC2TL: нерабочая рекурсия ХП
    #35218432
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBM Informix Dynamic Server Version 11.10.FC2TL
Проверяем работоспособность рекурсивного вызова ХП:
(предупреждаю заранее: некоторые вариации эксперимента ложили сервер - особенно при попытках TRACE ON)

(с)
CREATE TEMP TABLE tmp_tb_check_recurs(
id SERIAL
, p_cycle_num INTEGER,
, i INTEGER,
, v VARCHAR(30)
) WITH NO LOG;

CREATE PROCEDURE "informix".tmp_sp_check_recurs(
p_cycle_num INT -- текущий счетчик
, p_max_count INT -- ограничитель рекурсии
) RETURNING
INT;

DEFINE v_res INT;

LET v_res = 0;

LET p_cycle_num = p_cycle_num + 1;

INSERT INTO tmp_tb_check_recurs (p_cycle_num, i, v) VALUES (p_cycle_num, 1, 'старт');

IF (p_cycle_num > p_max_count) THEN
INSERT INTO tmp_tb_check_recurs (p_cycle_num, i, v) VALUES (p_cycle_num, 2, 'if - before return');
RETURN -1;
END IF;

FOREACH
EXECUTE PROCEDURE tmp_sp_check_recurs(p_cycle_num, p_max_count)
INTO v_res

INSERT INTO tmp_tb_check_recurs (p_cycle_num, i, v)
VALUES (p_cycle_num, 5, 'EXECUTE PROCEDURE');
EXIT FOREACH;
END FOREACH;

INSERT INTO tmp_tb_check_recurs (p_cycle_num, i, v) VALUES (p_cycle_num, 8, 'END');
RETURN v_res;

END PROCEDURE

EXECUTE PROCEDURE tmp_sp_check_recurs(1, 200);

SELECT * FROM tmp_tb_check_recurs;

ХП должна вернуть -1, а во временной таблице должны были бы получить результат в стиле

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
id	p_cycle_num	i	v
 1 	 1 	 1 	старт
 2 	 2 	 1 	старт
...
 100 	 200 	 1 	старт
 101 	 201 	 1 	старт
 102 	 201 	 2 	if - before return
 103 	 200 	 5 	EXECUTE PROCEDURE
 104 	 200 	 8 	END
..
 599 	 2 	 5 	EXECUTE PROCEDURE
 600 	 2 	 8 	END
 601 	 1 	 5 	EXECUTE PROCEDURE
 602 	 1 	 8 	END

А получаем NULL, никаких сообщений об ошибке, и во временной

авторid p_cycle_num i v
1 1 1 старт
2 2 1 старт
..
177 177 1 старт
178 178 1 старт


П.С.: для тех, кто по окончанию экспериментов чистит за собой хвосты:

(с)DROP TABLE tmp_tb_check_recurs;
DROP PROCEDURE "informix".tmp_sp_check_recurs(INT, INT);
...
Рейтинг: 0 / 0
IDS 11.10.FC2TL: нерабочая рекурсия ХП
    #35230057
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнатоЛой

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
  FOREACH
    EXECUTE PROCEDURE tmp_sp_check_recurs(p_cycle_num, p_max_count)
      INTO v_res

    INSERT INTO tmp_tb_check_recurs (p_cycle_num, i, v) 
       VALUES (p_cycle_num,  5 , 'EXECUTE PROCEDURE');
    EXIT FOREACH;
  END FOREACH;


а зачем FOREACH?
Код: plaintext
1.
2.
 EXECUTE PROCEDURE tmp_sp_check_recurs(p_cycle_num, p_max_count) INTO v_res;
 INSERT INTO tmp_tb_check_recurs (p_cycle_num, i, v) VALUES (p_cycle_num,  5 , 'EXECUTE PROCEDURE');
...
Рейтинг: 0 / 0
IDS 11.10.FC2TL: нерабочая рекурсия ХП
    #35230235
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Журавлев Денис
а зачем FOREACH?
Код: plaintext
1.
2.
 EXECUTE PROCEDURE tmp_sp_check_recurs(p_cycle_num, p_max_count) INTO v_res;
 INSERT INTO tmp_tb_check_recurs (p_cycle_num, i, v) VALUES (p_cycle_num,  5 , 'EXECUTE PROCEDURE');

Остался от оригинальной процедуры, которая возвращала данные WITH RESUME'ом...
Расклада с рекурсией это менять не дожно... Но я, конечно же, проверю :)
...
Рейтинг: 0 / 0
IDS 11.10.FC2TL: нерабочая рекурсия ХП
    #35230410
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
без foreach, везде разный результат 10.00.UC3 11.10.UC1 11.10.UC2
Код: plaintext
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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
onstat -
IBM Informix Dynamic Server Version 10.00.UC3     -- On-Line -- Up 00:02:30 -- 85096 Kbytes

(expression)
          -1

         id p_cycle_num           i v
          1           2           1 start
          2           3           1 start
          3           4           1 start
...
        201         201           2 if - before return
        202         200           5 EXECUTE PROCEDURE
        203         200           8 END
        204         199           5 EXECUTE PROCEDURE
        205         199           8 END
...
        595           4           8 END
        596           3           5 EXECUTE PROCEDURE
        597           3           8 END
        598           2           5 EXECUTE PROCEDURE
        599           2           8 END

-------------------------------------------------------------------------------
onstat -
IBM Informix Dynamic Server Version 11.10.UC1     -- On-Line -- Up 00:03:31 -- 47188 Kbytes

(expression)


         id p_cycle_num           i v

          1           2           1 start
          2           3           1 start
          3           4           1 start
          4           5           1 start
          5           5           5 EXECUTE PROCEDURE
          6           5           8 END
          7           4           5 EXECUTE PROCEDURE
          8           4           8 END
          9           3           5 EXECUTE PROCEDURE
         10           3           8 END
         11           2           5 EXECUTE PROCEDURE
         12           2           8 END

-------------------------------------------------------------------------------
onstat -
IBM Informix Dynamic Server Version 11.10.UC2     -- On-Line -- Up 00:00:14 -- 47188 Kbytes

         id p_cycle_num           i v

          1           2           1 start
          2           3           1 start
          3           4           1 start
          4           5           1 start
          5           6           1 start
          6           7           1 start
          7           8           1 start
          8           9           1 start                         
          9          10           1 start
         10          11           1 start
         11          12           1 start
         12          13           1 start                         
         13          14           1 start
         14          15           1 start
         15          16           1 start
         16          17           1 start
         17          18           1 start                         
         18          18           5 EXECUTE PROCEDURE             
         19          18           8 END
         20          17           5 EXECUTE PROCEDURE             
         21          17           8 END
         22          16           5 EXECUTE PROCEDURE
         23          16           8 END
         24          15           5 EXECUTE PROCEDURE
         25          15           8 END
...
         36           9           5 EXECUTE PROCEDURE
         37           9           8 END
         38           8           5 EXECUTE PROCEDURE
         39           8           8 END
         40           7           5 EXECUTE PROCEDURE
...
         49           3           8 END  
         50           2           5 EXECUTE PROCEDURE
         51           2           8 END

...
Рейтинг: 0 / 0
IDS 11.10.FC2TL: нерабочая рекурсия ХП
    #35230780
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то испортили с рекурсивными процедурами имеющими RETURNING
...
Рейтинг: 0 / 0
IDS 11.10.FC2TL: нерабочая рекурсия ХП
    #35313172
GVF112GVF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уже исправили в IDS 11.50 !!!

С уважением,
Вадим.
...
Рейтинг: 0 / 0
IDS 11.10.FC2TL: нерабочая рекурсия ХП
    #35315163
zaiets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И не только там исправлено.
В 11.10.FC2W1 тоже исправлено.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / IDS 11.10.FC2TL: нерабочая рекурсия ХП
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]