Гость
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Динамическое количество вовращаемых курсоров... / 9 сообщений из 9, страница 1 из 1
14.05.2005, 16:57
    #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
14.05.2005, 17:07
    #33065259
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое количество вовращаемых курсоров...
лично я не пробовал, но у вас возможно получится,
DECLARE CURSOR...WITH RETURN TO CALLER или CLIENT

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

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

Не проходит :(
...
Рейтинг: 0 / 0
14.05.2005, 17:22
    #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
14.05.2005, 17:26
    #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
14.05.2005, 17:28
    #33065301
NewYear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое количество вовращаемых курсоров...
опс, уже ответили.
...
Рейтинг: 0 / 0
14.05.2005, 17:28
    #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
14.05.2005, 17:33
    #33065319
NewYear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое количество вовращаемых курсоров...
gardenmanУ меня почему-то все работает...

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


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