Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Тайм-аут на клиенте при вызове хранимки / 12 сообщений из 12, страница 1 из 1
07.04.2008, 15:45
    #35240149
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тайм-аут на клиенте при вызове хранимки
У кого-нить бывало такое, что при вызове долгоиграющей хранимки коннект отваливается?
...
Рейтинг: 0 / 0
07.04.2008, 15:48
    #35240162
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тайм-аут на клиенте при вызове хранимки
На iSeries было.
...
Рейтинг: 0 / 0
07.04.2008, 15:52
    #35240174
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.
create procedure ex_cur(
	out p_sqlcode int,
	out p_sqlmsg varchar( 500 ),
	out p_cnt int
) specific ex_cur
p1: begin 
	declare sqlcode int default  0 ;
	declare sqlstate char( 5 ) default '00000';
	declare v_tablename varchar( 50 ) default '';
	declare v_schema varchar( 128 );
	declare v_table varchar( 128 );
	declare v_qualifiedname varchar( 128 );
	declare v_ok int default  0 ;
	declare v_cnt int default  0 ;
	declare v_stmt_text varchar( 500 ) default '';
	--
	declare c_dn cursor with hold
		--with return to caller
		for
		select substr(rtrim(creator)||'.'||rtrim(name), 1 , 50 ),creator,name as table_name
			from sysibm.systables where creator not in ('SYSIBM','SYSCAT') with ur;
	--
	declare exit handler for sqlexception
		begin
			get diagnostics exception  1  p_sqlmsg=message_text;
			values sqlcode into p_sqlcode;
			set p_sqlmsg=v_stmt_text||CHR( 13 )||CHR( 10 )||p_sqlmsg;
		end;
	declare exit handler for not found
		begin
			values sqlcode into p_sqlcode;
			set p_sqlmsg='Finished';
		end;
	set p_sqlmsg='';
    open c_dn;
    set p_cnt= 0 ;
	declare global temporary table capacity (
	    rowcount bigint,
		tableschema varchar( 128 ),
		tablename varchar( 128 )
	) on commit preserve rows with replace;
    loop
		fetch c_dn into v_qualifiedname,v_schema,v_table;
		set p_cnt=p_cnt+ 1 ;
		begin
			--
			set v_stmt_text='insert into session.capacity values'
				||'((select count(*) from "'||rtrim(v_schema)||'"."'||rtrim(v_table)||'"),?,?)';
			prepare stmt from v_stmt_text;
			execute stmt into v_cnt using v_schema,v_table;
			commit;
		end;
    end loop;				
	close c_dn;	    	
end p1
@
commit@

call ex_cur(?,?,?)@
commit@
...
Рейтинг: 0 / 0
07.04.2008, 15:55
    #35240189
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тайм-аут на клиенте при вызове хранимки
Эт так - просто эксперименты.
DB2 v9.5 Express-C (Linux)
пробегаю по всем табличкам (за исключением системных) узнаю в них количество строк и сваливаю все это в GTT

SQL22212N

Но судя по тому, что время, за которое все это вываливается не такое уж большое...
странно как-то .. чет я недопонимаю. Или че-та не так настроено.
...
Рейтинг: 0 / 0
07.04.2008, 15:56
    #35240194
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тайм-аут на клиенте при вызове хранимки
Но треть таблиц - пройдена.
...
Рейтинг: 0 / 0
07.04.2008, 22:25
    #35241122
chubakka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тайм-аут на клиенте при вызове хранимки
небольшой совет - добавь with ur в select count(*)
...
Рейтинг: 0 / 0
08.04.2008, 10:38
    #35241715
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тайм-аут на клиенте при вызове хранимки
2 gardenman
У вас нет выхода из цикла loop.
Поэтому ваш код будет выполняться вечно.
Вам надо делать типа этого что-то:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  open c_dn;
  set p_cnt= 0 ;
  fetch c_dn into v_qualifiedname,v_schema,v_table;
  while sqlcode!= 100  
  -- or 1=1
  do
    set p_cnt=p_cnt+ 1 ;
    ...
    fetch c_dn into v_qualifiedname,v_schema,v_table;
  end while;				
  close c_dn;	    	
А раскомментировав дополнительное условие, вы получите примерно то, что у вас щас есть.
...
Рейтинг: 0 / 0
08.04.2008, 11:06
    #35241814
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тайм-аут на клиенте при вызове хранимки
Тогда почему меняя
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    loop
		fetch c_dn into v_qualifiedname,v_schema,v_table;
		set p_cnt=p_cnt+ 1 ;
		begin
			--
			set v_stmt_text='insert into session.capacity values'
				||'((select count(*) from "'||rtrim(v_schema)||'"."'||rtrim(v_table)||'"),?,?)';
			prepare stmt from v_stmt_text;
			execute stmt into v_cnt using v_schema,v_table;
			commit;
		end;
    end loop;				

на

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    loop
		fetch c_dn into v_qualifiedname,v_schema,v_table;
		set p_cnt=p_cnt+ 1 ;
		--begin
			--
			--set v_stmt_text='insert into session.capacity values'
			--	||'((select count(*) from "'||rtrim(v_schema)||'"."'||rtrim(v_table)||'"),?,?)';
			--prepare stmt from v_stmt_text;
			--execute stmt into v_cnt using v_schema,v_table;
			--commit;
		--end;
    end loop;				

я получаю:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
call ex_cur(?,?,?)

  Value of output parameters
  --------------------------
  Parameter Name  : P_SQLCODE
  Parameter Value :  100 

  Parameter Name  : P_SQLMSG
  Parameter Value : Finished

  Parameter Name  : P_CNT
  Parameter Value :  118 

  Return Status =  0 
Т.е. выход из цикла есть и

Код: plaintext
1.
2.
3.
4.
5.
declare exit handler for not found
begin
   values sqlcode into p_sqlcode;
   set p_sqlmsg='Finished';
end;
отрабатывает?
...
Рейтинг: 0 / 0
08.04.2008, 11:25
    #35241894
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тайм-аут на клиенте при вызове хранимки
Да, прошу прощения, не обратил внимания на
declare exit handler for not found ...
...
Рейтинг: 0 / 0
08.04.2008, 11:30
    #35241913
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тайм-аут на клиенте при вызове хранимки
Правда, при таком коде, похоже что
close c_dn;
не отработает, т.е. курсор, объявленный как with hold не будет закрываться.
Может оно и ничего страшного, хотя лучше закрывать...
...
Рейтинг: 0 / 0
08.04.2008, 11:57
    #35242026
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тайм-аут на клиенте при вызове хранимки
Mark BarinsteinПравда, при таком коде, похоже что
close c_dn;
не отработает, т.е. курсор, объявленный как with hold не будет закрываться.
Может оно и ничего страшного, хотя лучше закрывать...

Да, абсолютно согласен на счет курсора. Поправил.

Но всеже с пачкой динамических запросов получается как-то не очень гладко.
Похоже здесь сидит конкретный баг.
...
Рейтинг: 0 / 0
08.04.2008, 12:10
    #35242075
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тайм-аут на клиенте при вызове хранимки
Есть какая-нить установка на счет количества динамических запросов?
Или на количество одновременно открытых таблиц?
Тут что-то не так...
И ошибка какая-то дурацкая.
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Тайм-аут на клиенте при вызове хранимки / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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