powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / просмотр данных во временной табл
25 сообщений из 35, страница 1 из 2
просмотр данных во временной табл
    #34291599
Тимур Б
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создаю таблицу

DECLARE GLOBAL TEMPORARY TABLE session.res5
(Наимен_страны varchar(500),Ед_измp varchar(5),Количество decimal,Ст_тыс_долл_США decimal)

забиваю данные
insert into session.res5 (Наимен_страны ,Количество ,Ст_тыс_долл_США)
(select 'СССР', 52, 50) from temp2 where char(g33a,4)='8703');

просматриваю
select * from session.res5

0 записей выбрано.

Можно ли вообще просмотреть результат !? если можно то как?
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34291602
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я обычно создаю временную таблицу с опциями
on commit preserve rows not logged
Ни разу не было проблем с чтением
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34291643
Тимур Б
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо все получилось! хорошая штука 'on commit preserve rows not logged' а где можно поподробнее почитать..
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34291938
Фотография Alexey Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34294092
mustaccio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-хорошему надо бы autocommit выключить, а не preserve rows.

update command options using c off;

declare ....
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34294281
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-хорошему вопрос был про одну таблицу....Нужно ли конфигурить всю БД ради нее одной?
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34294331
mustaccio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Действительно, нужно ли?

"update command options" - это для командного процессора, если че. А вовсе не для "всю БД ради нее одной".
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34294703
Тимур Б
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как правильно использовать update command options using c off;?
если я делаю так
update command options using c off;
DECLARE GLOBAL TEMPORARY TABLE session.res5
(Наимен_страны varchar(500),Ед_измp varchar(5),Количество decimal,Ст_тыс_долл_США decimal);

insert into session.res5 values ('СССР','КГ',20,50);
select * from session.res5

то результат 0 записей.
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34294833
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне показалось, что человек интересовался этим вопросом не в целях работы с CLP....)
Может просто показалось....
P.S. Вот чего думаю.... А есть подобные опции на БД?
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34296204
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
db2 => declare global temporary table session.test(in int)
DB20000I  The SQL command completed successfully.
db2 => update command options using c off
DB20000I  The UPDATE COMMAND OPTIONS command completed successfully.
db2 => insert into session.test values ( 1 )
DB20000I  The SQL command completed successfully.
db2 => select * from session.test

IN
-----------
           1 

   1  record(s) selected.

db2 =>
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34297873
Тимур Б
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доступно объяснил :)) спс!
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34298199
Тимур Б
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще такой вопрос:
как работать с этой таблицей в цикле

так не получется

create procedure temp2(in dat date,in data date)
result set 1
language sql
begin
declare vr_sum decimal(15,2);
declare vr_g33a char(4);
declare vr_summa decimal(15,2);
declare vr_count smallint;

declare myCursor1 cursor with return for select char(g33a,4), sum(g46)
from t_st2006 where g01a='ИМ' and g54d between dat and data group by
char(g33a,4) order by char(g33a,4);

declare myCursor cursor with return for s1;

declare global temporary table session.temp2(наимен_страны varchar(50)

,Количество decimal,Ст_тыс_долл_США decimal)
update command options using c off или --on commit preserve rows not logged;

select count(distinct char(g33a,4)) into vr_count from t_st2006 where

char(g33a,4)=any(select char(g33a,4) from t_st2006 where g01a='ИМ' and

g54d between dat and data group by char(g33a,4));

select sum(g46) into vr_summa from t_st2006 where g01a='ИМ' and g54d

between dat and data;
set vr_summa=(vr_summa*5)/100;
open myCursor1;
while vr_count<>0 do
set vr_count=vr_count-1;
fetch myCursor1 into vr_g33a, vr_sum;
if vr_sum>=vr_summa then insert into session.temp2 select g01a,

g33a, g15_17, s15_17, g41, g31b, g46, g54d from t_st2006 where char

(g33a, 4)=vr_g33a and g54d between dat and data and g01a='ИМ';
end if;
end while;
close myCursor1;
open myCursor;
open myCursor1;
end @
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34298713
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У вас тут каша.
Непонятно, что вы вернуть из процедуры хотите?
Куча ошибок:

1. Объявлен 1 возвращаемый result set и 2 курсора в конце открываются.
2. update command options - не нужно (да и работать не будет).
3. session.temp2 объявляется с 3-мя полями, а insert в нее идет с 8-ю.
4. Объявлен курсор myCursor на statement s1, но нет нигде prepare s1 from ...
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34298828
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
update command options using c off - это команда СLP а не SQL
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34299216
tapochek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я и не говорил что это правильный пример
3. session.temp2 объявляется с 3-мя полями, а insert в нее идет с 8-ю.
меня только интересует времянка

так примерно..?

create procedure temp2(in dat date,in data date)
result set 1
language sql
begin
declare vr_sum decimal(15,2);
declare vr_g33a char(4);
declare vr_summa decimal(15,2);
declare vr_count smallint;
declare SQL_CMD varchar(200);

declare myCursor1 cursor with return for select char(g33a,4), sum(g46) from t_st2006 where g01a='ИМ' and g54d between dat and data group by char(g33a,4) order by char(g33a,4);

declare myCursor cursor with return for s1;

declare global temporary table session.temp2(наимен_страны varchar(50) ,Количество decimal,Ст_тыс_долл_США decimal)
on commit preserve rows not logged;

set SQL_CMD='select * from session.temp2';
prepare s1 from SQL_CMD;

select count(distinct char(g33a,4)) into vr_count from t_st2006 where char(g33a,4)=any(select char(g33a,4) from t_st2006 where g01a='ИМ' and g54d between dat and data group by char(g33a,4));

select sum(g46) into vr_summa from t_st2006 where g01a='ИМ' and g54d between dat and data;
set vr_summa=(vr_summa*5)/100;
open myCursor1;
while vr_count<>0 do
set vr_count=vr_count-1;
fetch myCursor1 into vr_g33a, vr_sum;
if vr_sum>=vr_summa then insert into session.temp2 select g01a, g33a, g15_17, s15_17, g41, g31b, g46, g54d from t_st2006 where char(g33a, 4)=vr_g33a and g54d between dat and data and g01a='ИМ';
end if;
end while;
close myCursor1;
open myCursor;
end @
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34299301
Тимур Б
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот готовый скрипт

create procedure temp2(in dat date,in data date)
result set 1
language sql
begin
declare vr_sum decimal(15,2);
declare vr_g33a char(4);
declare vr_summa decimal(15,2);
declare vr_count smallint;
declare SQL_CMD varchar(100);

declare myCursor1 cursor with return for select char(g33a,4), sum(g46)

from t_st2006 where g01a='ИМ' and g54d between dat and data group by

char(g33a,4) order by char(g33a,4);

declare myCursor cursor with return for s1;

declare global temporary table session.temp2(g01a varchar(4),
g33a varchar(9),
g15_17 varchar(3),
s15_17 varchar(3),
g41 varchar(3),
g31b integer,
g46 decimal(15,2),
g54d date)
on commit preserve rows not logged;

set SQL_CMD='select * from session.temp2';
prepare s1 from SQL_CMD;

select count(distinct char(g33a,4)) into vr_count from t_st2006 where

char(g33a,4)=any(select char(g33a,4) from t_st2006 where g01a='ИМ' and

g54d between dat and data group by char(g33a,4));

select sum(g46) into vr_summa from t_st2006 where g01a='ИМ' and g54d

between dat and data;
set vr_summa=(vr_summa*5)/100;
open myCursor1;
while vr_count<>0 do
set vr_count=vr_count-1;
fetch myCursor1 into vr_g33a, vr_sum;
if vr_sum>=vr_summa then insert into session.temp2 select g01a,

g33a, g15_17, s15_17, g41, g31b, g46, g54d from t_st2006 where char

(g33a, 4)=vr_g33a and g54d between dat and data and g01a='ИМ';
end if;
end while;
close myCursor1;
open myCursor;

end @

только он ругается на SQL0601N Имя создаваемого объекта идентично существующему имени
"SESSION.TEMP2" типа "DECLARED TEMPORARY TABLE". SQLSTATE=42710

если делаешь так drop table session.temp2
то пишет SQL0204N Имя "SESSION.TEMP2" не было определено. SQLSTATE=42704
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34299532
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Внутри процедуры делайте (ну, и перед компиляцией процедуры тоже)

declare global temporary table session.temp2(g01a varchar(4),
g33a varchar(9),
g15_17 varchar(3),
s15_17 varchar(3),
g41 varchar(3),
g31b integer,
g46 decimal(15,2),
g54d date)
with replace ;

А вообще, по-моему нижеследующий селект возвратит то, что вы делаете в процедуре:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
with t as
(
select g01a, g33a, g15_17, s15_17, g41, g31b, g46, g54d 
from t_st2006 
where g54d between dat and data and g01a='ИМ'
), g as 
(
select char(g33a, 4 ) vr_g33a, sum(g46) vr_sum
from t 
group by char(g33a, 4 )
)
select *
from t, g
where char(t.g33a, 4 )=g.vr_g33a
and g.vr_sum>=(select sum(vr_sum)* 5 / 100  from g); 
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34301105
Тимур Б
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
еще вопрос:
имеется др процедура res2 в которой нужно вызвать процедуру temp2
create procedure res2()
result set 1
language sql
begin
declare vr_per decimal;
declare vr_g33a_4 varchar(4);
declare vr_groupkod integer;
declare vr_count_countrygroup integer;
declare vr_coun_country integer;
declare vr_count_4 integer;
declare vr_count integer;
call temp2('2006-01-01','2006-12-31');....

SQL0204N Имя "SESSION.TEMP2" не было определено. LINE NUMBER=13.
SQLSTATE=42704

хотя она создана

db2 => call temp2('2006-01-01','2006-12-31')


Набор результатов 1
--------------

G01A G33A G15_17 S15_17 G41 G31B G46 G54D
---- --------- ------ ------ --- ----------- ----------------- ----------
ИМ 841122110 643 643 796 9 306,00
ИМ 860630000 804 804 796 14 476,00
ИМ 870322909 784 784 796 1 10,93
ИМ 870323192 643 643 796 10 99,40
ИМ 870324109 276 784 796 1 41,00
ИМ 870324109 276 784 796 1 28,00
ИМ 870323192 250 784 796 1 10,00

в скрипте процедуры temp2 поменял
declare global temporary table session.temp2(g01a varchar(4),
g33a varchar(9),
g15_17 varchar(3),
s15_17 varchar(3),
g41 varchar(3),
g31b integer,
g46 decimal(15,2),
g54d date)
with replace;
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34301243
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такого не должно быть.
Вот пример:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
declare global temporary table session.t (i int) with replace@

create procedure ses_test(i int)
dynamic result sets  1 
language sql
begin
 declare c1 cursor with return for
 select * from session.t;
 declare global temporary table session.t (i int) with replace;
 insert into session.t (i) values (ses_test.i);
 open c1;
end@

create procedure ses_test2(i int)
language sql
begin
 call ses_test(i);
end@
Далее вы можете дропнуть session.t для чистоты эксперимента и запускать процедуры.
Обе будут работать без ошибок.
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34314686
Тимур Б
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не пойму почему у меня не получается...
если делаешь так :

declare global temporary table session.temp3
(id integer,
g01a varchar(4),
g33a varchar(9),
g15_17 varchar(3),
s15_17 varchar(3),
g41 varchar(3),
g31b integer,
g46 decimal(15,2),
g54d date)
with replace@

create procedure temp3(in dat date,in data date)
result set 1
language sql
begin
declare vr_sum decimal(15,2);
declare vr_g33a char(4);
declare vr_summa decimal(15,2);
declare vr_count smallint;
declare SQL_CMD varchar(100);

declare myCursor1 cursor with return for select char(g33a,4), sum(g46) from t_st2006 where g01a='ИМ' and g54d between dat and data group by char(g33a,4) order by char(g33a,4);

declare myCursor cursor with return for s1;
declare global temporary table session.temp3(g01a varchar(4),
g33a varchar(9),
g15_17 varchar(3),
s15_17 varchar(3),
g41 varchar(3),
g31b integer,
g46 decimal(15,2),
g54d date)
with replace;

select count(distinct char(g33a,4)) into vr_count from t_st2006 where char(g33a,4)=any(select char(g33a,4) from t_st2006 where g01a='ИМ' and g54d between dat and data group by char(g33a,4));

select sum(g46) into vr_summa from t_st2006 where g01a='ИМ' and g54d between dat and data;
set vr_summa=(vr_summa*5)/100;
open myCursor1;
while vr_count<>0 do
set vr_count=vr_count-1;
fetch myCursor1 into vr_g33a, vr_sum;
if vr_sum>=vr_summa then insert into session.temp3(g01a, g33a, g15_17, s15_17, g41, g31b, g46, g54d) select g01a, g33a, g15_17, s15_17, g41, g31b, g46, g54d from t_st2006 where char(g33a, 4)=vr_g33a and g54d between dat and data and g01a='ИМ';
end if;
end while;
close myCursor1;
set SQL_CMD='select * from session.temp3';
prepare s1 from SQL_CMD;
open myCursor;

end @

то все ок результат - заполненная таблица ,
а если вызываю эту поцедуру call temp3('2006-01-01', '2006-12-31'); в другой процедуре res1 и работаю с таблицей session.temp3 то
результат res1 пуст??
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34315098
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такого не должно быть.
Вот пример:

Код: 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.
declare global temporary table session.t (i int) with replace@

drop procedure ses_test@

create procedure ses_test(i int)
dynamic result sets  1 
language sql
begin
 declare c1 cursor with return for
  select * from session.t;
 declare global temporary table session.t (i int) with replace;
 insert into session.t (i) values (ses_test.i);
 open c1;
end@

drop procedure ses_test2@

create procedure ses_test2(i int)
dynamic result sets  1 
language sql
begin
 declare c1 cursor with return for
  select * from session.t;
 call ses_test(i);
 open c1; 
end@
session.t заполняется в ses_test.
В ses_test2 вызывается ses_test и после вызова обращается к session.t
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34319188
Тимур Б
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не получается ((
пишет что
Имя "SESSION.TEMP3" не было определено.
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34319243
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тимур Бне получается ((
пишет что
Имя "SESSION.TEMP3" не было определено.Напишите текст процедуры temp3.
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34319331
Тимур Б
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
drop procedure temp3@

create procedure temp3(in prev date,in cur date)
result set 1
language sql
begin
declare vr_sum decimal(15,2);
declare vr_g33a char(4);
declare vr_summa decimal(15,2);
declare vr_count smallint;
declare SQL_CMD varchar(100);

declare myCursor1 cursor with return for
select char(g33a,4), sum(g46)
from t_st2006 where g01a='ИМ' and g54d between prev and cur group by char(g33a,4) order by char(g33a,4);

declare myCursor cursor with return for s1;
declare global temporary table session.temp3(g01a varchar(4),
g33a varchar(9),
g15_17 varchar(3),
s15_17 varchar(3),
g41 varchar(3),
g31b integer,
g46 decimal(15,2),
g54d date)
with replace;

select count(distinct char(g33a,4)) into vr_count
from t_st2006 where char(g33a,4)=any(select char(g33a,4)
from t_st2006 where g01a='ИМ' and g54d between prev and cur group by char(g33a,4));

select sum(g46) into vr_summa from t_st2006 where g01a='ИМ' and g54d between prev and cur;
set vr_summa=(vr_summa*5)/100;
open myCursor1;
while vr_count<>0 do
set vr_count=vr_count-1;
fetch myCursor1 into vr_g33a, vr_sum;
if vr_sum>=vr_summa then insert into session.temp3(g01a, g33a, g15_17, s15_17, g41, g31b, g46, g54d) select g01a, g33a, g15_17, s15_17, g41, g31b, g46, g54d from t_st2006 where char(g33a, 4)=vr_g33a and g54d between prev and cur and g01a='ИМ';
end if;
end while;
close myCursor1;
set SQL_CMD='select * from session.temp3';
prepare s1 from SQL_CMD;
open myCursor;
end @


вызов делаю так:

drop procedure res1@

create procedure res1(in prev date, cur date)
result set 1
language sql
begin

declare vr_g33a_4 varchar(4);
declare vr_groupkod integer;
declare vr_count_countrygroup integer;
declare vr_coun_country integer;
declare vr_count_4 integer;
declare vr_count integer;

declare vr_per decimal(15,2);

declare cursor_4_cur cursor for select distinct(char(g33a,4)) from session.temp3 order by char(g33a,4);
call temp3(prev, cur);

это все в одном текстовом файле
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34319534
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы привели не полный текст res1.
И на какой команде ошибка?
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / просмотр данных во временной табл
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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