powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / просмотр данных во временной табл
35 сообщений из 35, показаны все 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
просмотр данных во временной табл
    #34319695
Тимур Б
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 session.temp3(prev, cur);

insert into session.temp2(g33a, s15_17, g41, g31b, g46, g54d)(select g33a, s15_17, g41, g31b, g46, g54d from t_st2005 where char(g33a,4)=any(select distinct(char(g33a,4)) from session.temp3) and s15_17=any(select s15_17 from session.temp3));

insert into res1(name,cost, cost_2)(select 'Всего:', sum(session.temp2.g46), sum(session.temp3.g46) from session.temp2 full join session.temp3 on session.temp2.id=session.temp3.id);

open cursor_4_cur;

select count(distinct(char(g33a,4))) into vr_count_4 from session.temp3 ;

insert into res1 (name) values (null);
while vr_count_4<>0 do
set vr_count_countrygroup=2;
fetch cursor_4_cur into vr_g33a_4;
insert into res1 (name) (select char(t.g33a,4) ||' '|| tn.name from tnvedgroup tn, session.temp3 t where char(t.g33a,4)=tn.id || tn.sub_id and char(t.g33a,4)=vr_g33a_4 group by char(t.g33a,4) ||' '||tn.name);
insert into res1 (name, count, cost, count_2, cost_2) (select 'Всего:', sum(session.temp2.g31b), sum(session.temp2.g46), sum(session.temp3.g31b), sum(session.temp3.g46) from session.temp3 full join session.temp2 on session.temp2.id=session.temp3.id where (char(session.temp2.g33a,4)=vr_g33a_4 or char(session.temp3.g33a,4)=vr_g33a_4));
select sum(g46)*0.05 into vr_per from session.temp3 where char(g33a,4)=vr_g33a_4;
set vr_groupkod=14;
while vr_count_countrygroup<>0 do
insert into res1 (name, count, cost, count_2, cost_2) (select cg.groupname, sum(session.temp2.g31b), sum(session.temp2.g46), sum(session.temp3.g31b), sum(session.temp3.g46) from countrygroup cg, session.temp2 full join session.temp3 on session.temp2.id=session.temp3.id where cg.groupkod=vr_groupkod and (char(session.temp3.g33a,4)=vr_g33a_4 or char(session.temp2.g33a,4)=vr_g33a_4) and (session.temp3.s15_17=any(select cntkod from countrygroupdef where groupkod=vr_groupkod) or session.temp2.s15_17=any(select cntkod from countrygroupdef where groupkod=vr_groupkod)) group by cg.groupname);

insert into dop1(select s15_17, sum(g46), sum(g31b) from session.temp2 where char(g33a,4)=vr_g33a_4 and s15_17=any(select cntkod from countrygroupdef where groupkod=vr_groupkod) group by s15_17);
insert into dop2(select s15_17, sum(g46), sum(g31b) from session.temp3 where char(g33a,4)=vr_g33a_4 and s15_17=any(select cntkod from countrygroupdef where groupkod=vr_groupkod) group by s15_17);
insert into dop1_2(select dop1.id, dop2.id, dop1.summa, dop2.summa, dop1.count, dop2.count from dop1 full join dop2 on dop1.id=dop2.id);
update dop1_2 set s15_17=g15_17 where s15_17 is null;

insert into res1 (name, cost, cost_2, count, count_2) (select c.small_name, r.summa1, r.summa2, r.count, r.count2 from country c, dop1_2 r where c.id=r.s15_17 and r.summa2>vr_per and r.s15_17=any(select cntkod from countrygroupdef where groupkod=vr_groupkod));
delete from dop1_2 where summa2>vr_per and s15_17=any(select cntkod from countrygroupdef where groupkod=vr_groupkod);
insert into res1 (name, cost, cost_2, count, count_2) (select 'Прочие ' || cg.groupname, sum(r.summa1), sum(r.summa2), sum(r.count), sum(r.count2) from countrygroup cg, dop1_2 r where cg.groupkod=vr_groupkod and s15_17=any(select cntkod from countrygroupdef where groupkod=vr_groupkod) group by 'Прочие ' || cg.groupname );
delete from dop1;
delete from dop2;
delete from dop1_2;
set vr_count_countrygroup=vr_count_countrygroup-1;
set vr_groupkod=vr_groupkod-12;
end while;
set vr_count_4=vr_count_4-1;
end while;
insert into res1 (name, count, cost) values (null,null,null);
insert into res1 (name, count, cost) values (null,null,null);
close cursor_4_cur;

--delete from session.temp2;
--delete from session.temp3;
update res1 set prots_k_itogu=(cost_2/cost)*100;
end@

ошибка Имя "SESSION.TEMP3" не было определено. LINE NUMBER=15.
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34319775
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это вы сильно задвинули:
call session .temp3(prev, cur);
Ваша процедура temp3 имеет другое имя схемы, она не может иметь имя схемы session .
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34319865
Тимур Б
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark BarinsteinЭто вы сильно задвинули:
call session .temp3(prev, cur);
Ваша процедура temp3 имеет другое имя схемы, она не может иметь имя схемы session .


нет это я забыл поправить сори ;)
call temp3 ошибка таже SQL0204N Имя "SESSION.TEMP3" не было определено. LINE NUMBER=15.
SQLSTATE=42704
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34319911
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ошибка при компиляции или после call res1?
Фикспак какой у вас?
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34319963
Тимур Б
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да ошибка при компиляции
db2v8.2 фикспак11 кажется
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34320030
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А в этой же сессии перед компиляцией процедуры вы делаете
declare global temporary table session.temp2...
declare global temporary table session.temp3...
?
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34321154
Тимур Б
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark BarinsteinА в этой же сессии перед компиляцией процедуры вы делаете
declare global temporary table session.temp2...
declare global temporary table session.temp3...
?

в этой же сессии перед drop procedure res1@
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34322595
Тимур Б
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С ошибкой разобрался но на выходе все еще пусто :(
...
Рейтинг: 0 / 0
просмотр данных во временной табл
    #34322684
Тимур Б
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо все отлично получилось .Моя невнимательность была всему виной!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
просмотр данных во временной табл
    #35136847
Николаха
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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.
CREATE PROCEDURE db2admin.get_accounts_info ( IN io_id_estimate INTEGER,
                                    IN io_id_sestimate INTEGER,
                                    IN io_id_gr INTEGER,
                                    IN io_id_item INTEGER,
                                    IN io_id_sitem INTEGER,
                                    IN io_id_expense VARCHAR( 5 ) )
    SPECIFIC db2admin.get_accounts_info
    DYNAMIC RESULT SETS  1 

P1: BEGIN
    -- Объявить переменные
    DECLARE io_est_name VARCHAR( 100 ) DEFAULT '';
    DECLARE io_sest_name VARCHAR( 100 ) DEFAULT '';
    DECLARE io_gr_name VARCHAR( 100 ) DEFAULT '';
    DECLARE io_item_name VARCHAR( 100 ) DEFAULT '';
    DECLARE io_sitem_name VARCHAR( 100 ) DEFAULT '';
    DECLARE io_exp_name VARCHAR( 100 ) DEFAULT '';

    DECLARE rec_count INT DEFAULT  0 ;

    DECLARE cursor1 CURSOR WITH RETURN FOR
        SELECT b.id_estimate,b.id_sestimate,b.id_gr,b.id_item,b.id_sitem,b.id_expense,
               e.est_name,se.sest_name,gr.gr_name,i.item_name,si.sitem_name,n.exp_name
        FROM budjet b
           left join estimate e on e.id_estimate=b.id_estimate
           left join subestimate se on se.id_sestimate=b.id_sestimate
           left join itemgroup gr on gr.id_gr=b.id_gr
           left join itemekr i on i.id_item=b.id_item
           left join subitemekr si on si.id_sitem=b.id_sitem
           left join nexpense n on n.id_expense=b.id_expense
        WHERE b.id_estimate=io_id_estimate and
           COALESCE(b.id_sestimate, 0 )=COALESCE(io_id_sestimate, 0 ) and
           COALESCE(b.id_gr, 0 )=COALESCE(io_id_gr, 0 ) and
           COALESCE(b.id_item, 0 )=COALESCE(io_id_item, 0 ) and
           COALESCE(b.id_sitem, 0 )=COALESCE(io_id_sitem, 0 ) and
           COALESCE(b.id_expense,'')=COALESCE(io_id_expense,'')
        ORDER BY b.id_estimate;
    
    --Определение кол-ва записей
    SELECT count(b.id_estimate) INTO rec_count FROM budjet b
    WHERE b.id_estimate=io_id_estimate and
          COALESCE(b.id_sestimate, 0 )=COALESCE(io_id_sestimate, 0 ) and
          COALESCE(b.id_gr, 0 )=COALESCE(io_id_gr, 0 ) and
          COALESCE(b.id_item, 0 )=COALESCE(io_id_item, 0 ) and
          COALESCE(b.id_sitem, 0 )=COALESCE(io_id_sitem, 0 ) and
          COALESCE(b.id_expense,'')=COALESCE(io_id_expense,'')
    GROUP BY b.id_estimate;
    --#################################################################

    --Объявить врем таблицу
    DECLARE GLOBAL TEMPORARY TABLE SESSION.GET_ACCOUNTS_INFO_GTT(io_id_estimate INTEGER,
                                                             io_id_sestimate INTEGER,
                                                             io_id_gr INTEGER,
                                                             io_id_item INTEGER,
                                                             io_id_sitem INTEGER,
                                                             io_id_expense VARCHAR( 5 ),
                                                             io_est_name VARCHAR( 100 ),
                                                             io_sest_name VARCHAR( 100 ),
                                                             io_gr_name VARCHAR( 100 ),
                                                             io_item_name VARCHAR( 100 ),
                                                             io_sitem_name VARCHAR( 100 ),
                                                             io_exp_name VARCHAR( 100 ))
    WITH REPLACE IN DB2ADMIN;
    --#################################################################

    OPEN cursor1;
    WHILE rec_count> 0  do
        FETCH cursor1 INTO io_id_estimate,
                           io_id_sestimate,
                           io_id_gr,
                           io_id_item,
                           io_id_sitem,
                           io_id_expense,
                           io_est_name,io_sest_name,io_gr_name,io_item_name,io_sitem_name,io_exp_name;
        INSERT INTO SESSION.GET_ACCOUNTS_INFO_GTT VALUES ( io_id_estimate,
                                                           io_id_sestimate,
                                                           io_id_gr,
                                                           io_id_item,
                                                           io_id_sitem,
                                                           io_id_expense,
                                                           io_est_name,io_sest_name,io_gr_name,io_item_name,io_sitem_name,io_exp_name);
        SET rec_count = rec_count -  1 ;
    END WHILE;
    CLOSE cursor1;
    --Объявить курсор на GTT
    BEGIN
    DECLARE cursor2 CURSOR WITH RETURN FOR
       SELECT * FROM SESSION.GET_ACCOUNTS_INFO_GTT;
       OPEN cursor2;
    END;
    --#################################################################
END P1

Кое-как разобрался как тут работать с курсорами и вроде понял как получить и вернуть нужный НД. Процедура компилируется без ошибок, но когда запускаешь выходит ошибка:
автор
get_accounts_info - Информация запуска была изменена.
DB2ADMIN.GET_ACCOUNTS_INFO - Выполнение запущено.
Данные, возвращаемые в наборах результатов, ограничиваются первыми 100 строками.
Данные, возвращаемые в столбцах наборов результатов, ограничиваются первыми 20 байтами (символами).
DB2ADMIN.GET_ACCOUNTS_INFO - Исключительная ситуация при выполнении:
Ошибка менеджера баз данных.[IBM][CLI Driver][DB2/NT] SQL0204N Имя "DB2ADMIN" не было определено. SQLSTATE=42704
DB2ADMIN.GET_ACCOUNTS_INFO - Откат успешно выполнен.
DB2ADMIN.GET_ACCOUNTS_INFO - Ошибка выполнения.
...
Рейтинг: 0 / 0
35 сообщений из 35, показаны все 2 страниц
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / просмотр данных во временной табл
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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