powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как??? СALL&CURSOR
3 сообщений из 3, страница 1 из 1
Как??? СALL&CURSOR
    #33036197
PSasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет Други.
У меня функция возврашает курсор (из семплов выдрал :))
А че сним потом делать (вернее как) (ну например в таблицу выборку записать), я ни как не пойму.
Вызываемая процедура:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE PROCEDURE ReadMySet(i_age INTEGER)
LANGUAGE SQL
BEGIN
   DECLARE GLOBAL TEMPORARY TABLE result_table(
        value1 INTEGER
    ) WITH REPLACE ON COMMIT PRESERVE ROWS NOT LOGGED;
   
   BEGIN  
   DECLARE temp_cursor CURSOR WITH HOLD WITH RETURN TO CALLER 
             FOR SELECT * 
                 FROM SESSION.result_table;
                 
   INSERT INTO SESSION.result_table  SELECT ID FROM TestTable WHERE age = age;
   OPEN temp_cursor;  
   END;   

Кусок вызывающей процедуры:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
   DECLARE t_id INTEGER;
   DECLARE loc RESULT_SET_LOCATOR VARYING;
   CALL ReadMySet( 30 );
   ASSOCIATE LOCATORS (loc) WITH PROCEDURE ReadMySet;
   ALLOCATE result_cursor CURSOR FOR RESULT SET loc;
   FETCH FROM result_cursor INTO t_id;
   INSERT INTO RESULTTABLE (i_id) VALUES (t_id);
Так только одна запись добавляется а все как?

У меня какоет смутное ощущуение, что что-то тут не так.....
Правильно ли я написал или есть другой вариант (более удобный)
получить курсок из процедуры и работать с ним ???
...
Рейтинг: 0 / 0
Как??? СALL&CURSOR
    #33036380
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наверно надо курсор поскролить. Т.е. попробуй допустим ещё раз сделать fetch. Что получится? :)
...
Рейтинг: 0 / 0
Как??? СALL&CURSOR
    #33036628
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.
create procedure factcursor( in par int)
language sql
result sets  1 
begin
	declare cdn cursor with return to caller for
		select d1,d2,d2,summa 
		from fact
			where d1=factcursor.par
				and d2=factcursor.par
					and d3=factcursor.par with ur;

	open cdn;		

end
@

connect to test@

drop procedure getcur(int,decimal( 17 , 2 ))@

create procedure getcur(in par int,out total decimal( 17 , 2 ))
language sql
result sets  1 
begin

	declare d1 int;
	declare d2 int;
	declare d3 int;
	declare state int;
	declare summa decimal( 17 , 2 );
	declare RESULTSET result_set_locator varying;

	call factcursor(par);

	associate result set locators(RESULTSET) 
		with procedure factcursor;

	allocate rscdn cursor for result set RESULTSET;

	set total= 0 ;
	set state= 0 ;
	begin
		declare continue handler for not found set state=- 1 ;
		l: loop
			fetch rscdn into d1,d2,d3,summa;
			if (state=- 1 ) then 
				leave l; 
			end if;
			set total=total+summa;
		end loop;
	end;
	close rscdn;			

end
@

commit@

...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как??? СALL&CURSOR
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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