powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / просмотр данных во временной табл
10 сообщений из 35, страница 2 из 2
просмотр данных во временной табл
    #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
10 сообщений из 35, страница 2 из 2
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / просмотр данных во временной табл
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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