Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / просмотр данных во временной табл / 25 сообщений из 35, страница 1 из 2
30.01.2007, 09:09
    #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
30.01.2007, 09:11
    #34291602
TORT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
просмотр данных во временной табл
Я обычно создаю временную таблицу с опциями
on commit preserve rows not logged
Ни разу не было проблем с чтением
...
Рейтинг: 0 / 0
30.01.2007, 09:34
    #34291643
Тимур Б
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
просмотр данных во временной табл
Спасибо все получилось! хорошая штука 'on commit preserve rows not logged' а где можно поподробнее почитать..
...
Рейтинг: 0 / 0
30.01.2007, 11:05
    #34291938
Alexey Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
просмотр данных во временной табл
...
Рейтинг: 0 / 0
30.01.2007, 18:52
    #34294092
mustaccio
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
просмотр данных во временной табл
По-хорошему надо бы autocommit выключить, а не preserve rows.

update command options using c off;

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

"update command options" - это для командного процессора, если че. А вовсе не для "всю БД ради нее одной".
...
Рейтинг: 0 / 0
31.01.2007, 07:07
    #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
31.01.2007, 09:05
    #34294833
TORT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
просмотр данных во временной табл
Мне показалось, что человек интересовался этим вопросом не в целях работы с CLP....)
Может просто показалось....
P.S. Вот чего думаю.... А есть подобные опции на БД?
...
Рейтинг: 0 / 0
31.01.2007, 14:17
    #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
01.02.2007, 07:25
    #34297873
Тимур Б
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
просмотр данных во временной табл
Доступно объяснил :)) спс!
...
Рейтинг: 0 / 0
01.02.2007, 10:11
    #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
01.02.2007, 12:10
    #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
01.02.2007, 12:34
    #34298828
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
просмотр данных во временной табл
update command options using c off - это команда СLP а не SQL
...
Рейтинг: 0 / 0
01.02.2007, 14:14
    #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
01.02.2007, 14:32
    #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
01.02.2007, 15:32
    #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
02.02.2007, 10:05
    #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
02.02.2007, 10:42
    #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
08.02.2007, 09:32
    #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
08.02.2007, 11:30
    #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
09.02.2007, 13:59
    #34319188
Тимур Б
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
просмотр данных во временной табл
не получается ((
пишет что
Имя "SESSION.TEMP3" не было определено.
...
Рейтинг: 0 / 0
09.02.2007, 14:08
    #34319243
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
просмотр данных во временной табл
Тимур Бне получается ((
пишет что
Имя "SESSION.TEMP3" не было определено.Напишите текст процедуры temp3.
...
Рейтинг: 0 / 0
09.02.2007, 14:23
    #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
09.02.2007, 14:57
    #34319534
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
просмотр данных во временной табл
Вы привели не полный текст res1.
И на какой команде ошибка?
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / просмотр данных во временной табл / 25 сообщений из 35, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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