powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / Магия курсоров - помогите разобраться
3 сообщений из 3, страница 1 из 1
Магия курсоров - помогите разобраться
    #36563130
heavenmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В связи с необходимостью использования конструкции в которой ForEach используется в качестве цикла за счет изменяемой внутри цикла переменной, использованной в WHERE секции, я провел серию экспериментов (IDS 11.10.TC3 и IDS 9.40.TC4) и выявил очень интересные эффекты:

Код: 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.
DROP PROCEDURE test1();

Create DBA Procedure "informix".test1() returning integer;
  define ftest, fr, ft, tt integer;
  let ftest =  10020 ;
  let ft =  0 ;
  
  foreach
     select pserno into tt
       from test_table
      where  pserno > ftest  
     let ft = ft +  1 ;

     let ftest =  1000000 ;

     return tt with resume;
  end foreach;
End Procedure;


DROP PROCEDURE test2();

Create DBA Procedure "informix".test2() returning integer;

  define ftest, fr, ft integer;

  let ftest =  1 ;
  let ft =  0 ;

  foreach
     select  1  into fr
       from test_table
      where  ftest =  1   

     let ft = ft + fr;
     let ftest =  2 ;
  end foreach;

return ft;
End Procedure;

execute procedure test1();
execute procedure test2();


Вот две процедуры. В качестве test_table выбираю таблицу, содержащую 29 строк, причем pserno > 10020 для 13 из них.

В первая процедуре цикл выполняется 1 раз, а во второй 11. Почему?

Я меняю таблицу на вновь созданную с 12 строками. И получаю 12 выполнений цикла в обоих процедурах.


Вопрос: сколько раз должен исполняться цикл в каждом случае и почему?

Модератор: Пожалуйста, пользуйтесь тегами. Есть тег [ src ] код программы [ /src ] (без пробелов у скобок)
...
Рейтинг: 0 / 0
Магия курсоров - помогите разобраться
    #36564228
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Не хватает структуры test_table
2. "Чем" выполняете ХП?
...
Рейтинг: 0 / 0
Магия курсоров - помогите разобраться
    #36564711
Выбегалло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ничерта не понял.
В одном случае RETURN WITH RESUME, во втором - просто RETURN.

Сделайте нормальный test case, с CREATE TABLE / INSERT.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / Магия курсоров - помогите разобраться
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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