powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Динамическое количество вовращаемых курсоров...
9 сообщений из 9, страница 1 из 1
Динамическое количество вовращаемых курсоров...
    #33065233
Akimushkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне нужно что-то подобное:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CREATE PROCEDURE CLT.SP_GET_LIST_ID
(
    IN  v_login     VARCHAR( 255 ),
    IN  v_req_id    INTEGER
)
    --DYNAMIC RESULT SETS N
    SPECIFIC CLT.SP_GET_LIST_ID
    LANGUAGE SQL
P1: BEGIN
     FOR t1 AS 
        SELECT t1_id
        FROM Table1        
    DO
        DECLARE List CURSOR WITH RETURN FOR
        SELECT name
        FROM Table2 t2
        WHERE t2.t1_id=t1.t1_id;

        -- Cursor left open for client application.
        OPEN List;
    END FOR;
END P1

Это возможно? если да, то как?
...
Рейтинг: 0 / 0
Динамическое количество вовращаемых курсоров...
    #33065259
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лично я не пробовал, но у вас возможно получится,
DECLARE CURSOR...WITH RETURN TO CALLER или CLIENT

Если в процедуре в процессе обработки логики вызывать несколько ХП (разное в зависимости от условий), и прописать что RETURN TO CLIENT, то возможно такой эффект будет достигнут.
...
Рейтинг: 0 / 0
Динамическое количество вовращаемых курсоров...
    #33065272
Akimushkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gardenmanлично я не пробовал, но у вас возможно получится,
DECLARE CURSOR...WITH RETURN TO CALLER или CLIENT

Если в процедуре в процессе обработки логики вызывать несколько ХП (разное в зависимости от условий), и прописать что RETURN TO CLIENT, то возможно такой эффект будет достигнут.

Не проходит :(
...
Рейтинг: 0 / 0
Динамическое количество вовращаемых курсоров...
    #33065294
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
connect to test@

create procedure rs(in cnt int) 
language sql
result sets  2 
begin
	declare c1 cursor with return for 
		select * from pdata fetch first  10   rows only;
	declare c2 cursor with return for 
		select * from pdata fetch first  20   rows only;
	open c1;
	if cnt< 2  then
		return;
	end if;
	open c2;
end@

call rs( 1 )@


Код: 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.
connect to test

   Database Connection Information

 Database server        = DB2/NT  8 . 2 . 0 
 SQL authorization ID   = DB2ADMIN
 Local database alias   = TEST


create procedure rs(in cnt int) 
language sql
result sets  2 
begin
	declare c1 cursor with return for 
		select * from pdata fetch first  10   rows only;
	declare c2 cursor with return for 
		select * from pdata fetch first  20   rows only;
	open c1;
	if cnt< 2  then
		return;
	end if;
	open c2;
end
DB20000I  The SQL command completed successfully.

call rs( 1 )


  Result set  1 
  --------------

  POLICY_ID      POLICY_PREV    POLICY_MAIN    DTBEGIN    DTEND      DTSTATUSEND DTWRITTEN  BASE_PREM          
  -------------- -------------- -------------- ---------- ---------- ----------- ---------- -------------------
    101000019618 ,   101000019618 ,   101000019618 ,  28 . 08 . 2003   27 . 08 . 2004   28 . 08 . 2003    28 . 08 . 2003               3243 , 24 
    101000061303 ,   101000024587 ,   101000057140 ,  01 . 03 . 2004   28 . 02 . 2005   28 . 02 . 2005   -                       5832 , 00 
    101000075861 ,   101000063666 ,   101000063666 ,  26 . 02 . 2004   25 . 02 . 2005   25 . 02 . 2005   -                       4633 , 20 
    101000077966 ,   101000059500 ,   101000072966 ,  12 . 01 . 2004   11 . 01 . 2005   11 . 01 . 2005   -                       3564 , 00 
    101000115396 ,   101000101465 ,   101000101465 ,  05 . 07 . 2004   04 . 07 . 2005  -           -                       2049 , 30 
    101000086519 ,   101000044335 ,   101000086299 ,  30 . 12 . 2003   29 . 12 . 2004   01 . 06 . 2004   -                       2494 , 80 
    101000092024 ,              0 ,   101000092024 ,  24 . 05 . 2004   23 . 05 . 2005  -           -                       6771 , 60 
    101000092073 ,   101000092024 ,   101000010583 ,  24 . 05 . 2004   23 . 05 . 2005  -           -                       6771 , 60 
    101000097947 ,   101000086519 ,   101000074753 ,  30 . 12 . 2003   29 . 12 . 2004   04 . 06 . 2004    01 . 06 . 2004               2494 , 80 
    101000099889 ,   101000049179 ,   101000049179 ,  03 . 01 . 2004   02 . 01 . 2005   02 . 01 . 2005   -                       4633 , 20 

   10  record(s) selected.

  Return Status =  0 

...
Рейтинг: 0 / 0
Динамическое количество вовращаемых курсоров...
    #33065298
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
конечно нельзя открыть курсор с одним именем дважы.
открывайте в цикле по очереди курсоры q1, q2, q3 ....

p.s
как это пишется на spl не знаю.

p.p.s
ну и извращенец вы, батенька...

Код: 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.
-------------------------------- Script --------------------------------
declare q1 cursor for select * from sysibm.sysdummy1;
declare q2 cursor for select * from sysibm.sysdummy1;
declare q3 cursor for select * from sysibm.sysdummy1;

open q1;
open q2;
open q3;

fetch q1;
fetch q2;
fetch q3;

------------------------------------------------------------------------
DB20000I  The SQL command completed successfully.

DB20000I  The SQL command completed successfully.

DB20000I  The SQL command completed successfully.

DB20000I  The SQL command completed successfully.

DB20000I  The SQL command completed successfully.

DB20000I  The SQL command completed successfully.


IBMREQD
-------
Y      

  1 record(s) selected.



IBMREQD
-------
Y      

  1 record(s) selected.



IBMREQD
-------
Y      

  1 record(s) selected.

...
Рейтинг: 0 / 0
Динамическое количество вовращаемых курсоров...
    #33065301
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
опс, уже ответили.
...
Рейтинг: 0 / 0
Динамическое количество вовращаемых курсоров...
    #33065304
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня почему-то все работает...
Код: 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.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
connect to test

   Database Connection Information

 Database server        = DB2/NT  8 . 2 . 0 
 SQL authorization ID   = DB2ADMIN
 Local database alias   = TEST


create procedure rsinner() 
language sql
result sets  2 
begin
	declare c1 cursor with return to client for
		select * from pdata fetch first  10   rows only;
	open c1;
end
DB20000I  The SQL command completed successfully.

create procedure rs(in cnt int) 
language sql
result sets  2 
begin
	declare c1 cursor with return for 
		select * from pdata fetch first  10   rows only;
	open c1;
	if cnt< 2  then
		return;
	end if;
	call rsinner();
end
DB20000I  The SQL command completed successfully.

call rs( 2 )


  Result set  1 
  --------------

  POLICY_ID      POLICY_PREV    POLICY_MAIN    DTBEGIN    DTEND      DTSTATUSEND DTWRITTEN  BASE_PREM          
  -------------- -------------- -------------- ---------- ---------- ----------- ---------- -------------------
    101000019618 ,   101000019618 ,   101000019618 ,  28 . 08 . 2003   27 . 08 . 2004   28 . 08 . 2003    28 . 08 . 2003               3243 , 24 
    101000061303 ,   101000024587 ,   101000057140 ,  01 . 03 . 2004   28 . 02 . 2005   28 . 02 . 2005   -                       5832 , 00 
    101000075861 ,   101000063666 ,   101000063666 ,  26 . 02 . 2004   25 . 02 . 2005   25 . 02 . 2005   -                       4633 , 20 
    101000077966 ,   101000059500 ,   101000072966 ,  12 . 01 . 2004   11 . 01 . 2005   11 . 01 . 2005   -                       3564 , 00 
    101000115396 ,   101000101465 ,   101000101465 ,  05 . 07 . 2004   04 . 07 . 2005  -           -                       2049 , 30 
    101000086519 ,   101000044335 ,   101000086299 ,  30 . 12 . 2003   29 . 12 . 2004   01 . 06 . 2004   -                       2494 , 80 
    101000092024 ,              0 ,   101000092024 ,  24 . 05 . 2004   23 . 05 . 2005  -           -                       6771 , 60 
    101000092073 ,   101000092024 ,   101000010583 ,  24 . 05 . 2004   23 . 05 . 2005  -           -                       6771 , 60 
    101000097947 ,   101000086519 ,   101000074753 ,  30 . 12 . 2003   29 . 12 . 2004   04 . 06 . 2004    01 . 06 . 2004               2494 , 80 
    101000099889 ,   101000049179 ,   101000049179 ,  03 . 01 . 2004   02 . 01 . 2005   02 . 01 . 2005   -                       4633 , 20 

   10  record(s) selected.


  Result set  2 
  --------------

  POLICY_ID      POLICY_PREV    POLICY_MAIN    DTBEGIN    DTEND      DTSTATUSEND DTWRITTEN  BASE_PREM          
  -------------- -------------- -------------- ---------- ---------- ----------- ---------- -------------------
    101000019618 ,   101000019618 ,   101000019618 ,  28 . 08 . 2003   27 . 08 . 2004   28 . 08 . 2003    28 . 08 . 2003               3243 , 24 
    101000061303 ,   101000024587 ,   101000057140 ,  01 . 03 . 2004   28 . 02 . 2005   28 . 02 . 2005   -                       5832 , 00 
    101000075861 ,   101000063666 ,   101000063666 ,  26 . 02 . 2004   25 . 02 . 2005   25 . 02 . 2005   -                       4633 , 20 
    101000077966 ,   101000059500 ,   101000072966 ,  12 . 01 . 2004   11 . 01 . 2005   11 . 01 . 2005   -                       3564 , 00 
    101000115396 ,   101000101465 ,   101000101465 ,  05 . 07 . 2004   04 . 07 . 2005  -           -                       2049 , 30 
    101000086519 ,   101000044335 ,   101000086299 ,  30 . 12 . 2003   29 . 12 . 2004   01 . 06 . 2004   -                       2494 , 80 
    101000092024 ,              0 ,   101000092024 ,  24 . 05 . 2004   23 . 05 . 2005  -           -                       6771 , 60 
    101000092073 ,   101000092024 ,   101000010583 ,  24 . 05 . 2004   23 . 05 . 2005  -           -                       6771 , 60 
    101000097947 ,   101000086519 ,   101000074753 ,  30 . 12 . 2003   29 . 12 . 2004   04 . 06 . 2004    01 . 06 . 2004               2494 , 80 
    101000099889 ,   101000049179 ,   101000049179 ,  03 . 01 . 2004   02 . 01 . 2005   02 . 01 . 2005   -                       4633 , 20 

   10  record(s) selected.

  Return Status =  0 


call rs( 1 )


  Result set  1 
  --------------

  POLICY_ID      POLICY_PREV    POLICY_MAIN    DTBEGIN    DTEND      DTSTATUSEND DTWRITTEN  BASE_PREM          
  -------------- -------------- -------------- ---------- ---------- ----------- ---------- -------------------
    101000019618 ,   101000019618 ,   101000019618 ,  28 . 08 . 2003   27 . 08 . 2004   28 . 08 . 2003    28 . 08 . 2003               3243 , 24 
    101000061303 ,   101000024587 ,   101000057140 ,  01 . 03 . 2004   28 . 02 . 2005   28 . 02 . 2005   -                       5832 , 00 
    101000075861 ,   101000063666 ,   101000063666 ,  26 . 02 . 2004   25 . 02 . 2005   25 . 02 . 2005   -                       4633 , 20 
    101000077966 ,   101000059500 ,   101000072966 ,  12 . 01 . 2004   11 . 01 . 2005   11 . 01 . 2005   -                       3564 , 00 
    101000115396 ,   101000101465 ,   101000101465 ,  05 . 07 . 2004   04 . 07 . 2005  -           -                       2049 , 30 
    101000086519 ,   101000044335 ,   101000086299 ,  30 . 12 . 2003   29 . 12 . 2004   01 . 06 . 2004   -                       2494 , 80 
    101000092024 ,              0 ,   101000092024 ,  24 . 05 . 2004   23 . 05 . 2005  -           -                       6771 , 60 
    101000092073 ,   101000092024 ,   101000010583 ,  24 . 05 . 2004   23 . 05 . 2005  -           -                       6771 , 60 
    101000097947 ,   101000086519 ,   101000074753 ,  30 . 12 . 2003   29 . 12 . 2004   04 . 06 . 2004    01 . 06 . 2004               2494 , 80 
    101000099889 ,   101000049179 ,   101000049179 ,  03 . 01 . 2004   02 . 01 . 2005   02 . 01 . 2005   -                       4633 , 20 

   10  record(s) selected.

  Return Status =  0 


...
Рейтинг: 0 / 0
Динамическое количество вовращаемых курсоров...
    #33065319
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gardenmanУ меня почему-то все работает...

коммит был? курсор закрылся?
...
Рейтинг: 0 / 0
Динамическое количество вовращаемых курсоров...
    #33065331
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Действительно, существенное замечание... Открывать курсор надо с
WITH HOLD, иначе в некоторых случаях ответа не дождетесь))...
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Динамическое количество вовращаемых курсоров...
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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