Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / db2 Размер строки превысил / 11 сообщений из 11, страница 1 из 1
10.10.2007, 08:31
    #34858894
Pilat_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
db2 Размер строки превысил
дб2 9.1
Создана скл функция возвращающая таблицу.
Затем выполнятеся последовательный вызов функции.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select * from TABLE(PNTK.GET_VOLUME_LIC( 1 , 4 ,'АВТ')) auto
union
select * from TABLE(PNTK.GET_VOLUME_LIC( 5 , 12 ,'ЖДТ')) zhd
union
select * from TABLE(PNTK.GET_VOLUME_LIC( 12 , 17 ,'ВДТ')) vod
union
select * from TABLE(PNTK.GET_VOLUME_LIC( 1 , 17 ,'ВСЕГО')) itog

В результате дб2 сообщает об ошибке.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SQL1822N  От источника данных "-101" получен неожиданный код ошибки "LICENCE". 
Соответствующие текст и элементы - " SQL0101N  Слишком длинный или слиш".  
SQLSTATE=560BD

SQL1822N  От источника данных "-101" получен неожиданный код ошибки "LICENCE". Соответствующие текст и элементы - " SQL0101N  Слишком длинный или слиш".

Объяснение: 

При обращении к источнику данных
сервер объединения получил от него
неожиданный код ошибки, не имеющий
эквивалента в DB2.  

 Некоторые возможные коды ошибки: 

o    4901  Попытка открыть более  15  
    указателей 

o    4902  Размер строки превысил    
    предельно допустимый ( 32  Кб)
Как это лечится?
...
Рейтинг: 0 / 0
10.10.2007, 08:32
    #34858895
Pilat_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
db2 Размер строки превысил
Если исключить, например, послдний юнион - ошибки не будет.
...
Рейтинг: 0 / 0
10.10.2007, 10:07
    #34859083
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
db2 Размер строки превысил
а просто
select * from TABLE(PNTK.GET_VOLUME_LIC(1,17,'ВСЕГО')) itog
работает?
...
Рейтинг: 0 / 0
10.10.2007, 10:10
    #34859091
Pilat_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
db2 Размер строки превысил
Mark Barinsteinа просто
select * from TABLE(PNTK.GET_VOLUME_LIC(1,17,'ВСЕГО')) itog
работает?
Конечно, каждая в отдельности и эта в частности выборка работает без ошибок.
...
Рейтинг: 0 / 0
10.10.2007, 10:15
    #34859116
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
db2 Размер строки превысил
create function покажите
...
Рейтинг: 0 / 0
10.10.2007, 10:32
    #34859207
Pilat_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
db2 Размер строки превысил
Mark Barinsteincreate function покажите
Не вопрос.
Код: 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.
CREATE FUNCTION PNTK.GET_VOLUME_LIC(acts integer, acts2 integer, type varchar( 10 ))
SPECIFIC GET_VOLUME_LIC
     RETURNS TABLE (amount_6 SMALLINT,
                    amount_5 SMALLINT,
                    amount_4 SMALLINT,
			amount_3 SMALLINT,
			amount_2 SMALLINT,
			amount_1 SMALLINT,
			amount_0 SMALLINT,
			ind SMALLINT,
			type varchar( 10 )
)
     LANGUAGE SQL
     READS SQL DATA
     NO EXTERNAL ACTION
     DETERMINISTIC
     RETURN
with 
LIC as
(
select 
	*	
from
	pntk.licences l
where	
	current_date not between l.arrest_start_date and l.arrest_stop_date
	and l.is_removed =  0 
	and l.id_activity_types between GET_VOLUME_LIC.acts and GET_VOLUME_LIC.acts2
)
select 
	count(distinct case when year(l.issue_date) = (year(current date)- 6 )  then  l.rnn_carriers else null end) amount_6
	,count(distinct case when year(l.issue_date) = (year(current date)- 5 )  then  l.rnn_carriers else null end) amount_5
	,count(distinct case when year(l.issue_date) = (year(current date)- 4 )  then  l.rnn_carriers else null end) amount_4
	,count(distinct case when year(l.issue_date) = (year(current date)- 3 )  then  l.rnn_carriers else null end) amount_3
	,count(distinct case when year(l.issue_date) = (year(current date)- 2 )  then  l.rnn_carriers else null end) amount_2
	,count(distinct case when year(l.issue_date) = (year(current date)- 1 )  then  l.rnn_carriers else null end) amount_1
	,count(distinct case when year(l.issue_date) = (year(current date)- 0 )  then  l.rnn_carriers else null end) amount_0
	,GET_VOLUME_LIC.acts+ 1 
	,GET_VOLUME_LIC.type
from	LIC l
where	current_date between l.begining_date and l.ending_date
UNION
select 
	count(distinct case when year(l.issue_date) = (year(current date)- 6 )  then  l.id_licences else null end) amount_6
	,count(distinct case when year(l.issue_date) = (year(current date)- 5 )  then  l.id_licences else null end) amount_5
	,count(distinct case when year(l.issue_date) = (year(current date)- 4 )  then  l.id_licences else null end) amount_4
	,count(distinct case when year(l.issue_date) = (year(current date)- 3 )  then  l.id_licences else null end) amount_3
	,count(distinct case when year(l.issue_date) = (year(current date)- 2 )  then  l.id_licences else null end) amount_2
	,count(distinct case when year(l.issue_date) = (year(current date)- 1 )  then  l.id_licences else null end) amount_1
	,count(distinct case when year(l.issue_date) = (year(current date)- 0 )  then  l.id_licences else null end) amount_0
	,GET_VOLUME_LIC.acts+ 2 
	,GET_VOLUME_LIC.type
from	LIC l
where	current_date between l.begining_date and l.ending_date
UNION
select 
	count(distinct case when year(l.issue_date) = (year(current date)- 6 )  then  l.id_licences else null end) amount_6
	,count(distinct case when year(l.issue_date) = (year(current date)- 5 )  then  l.id_licences else null end) amount_5
	,count(distinct case when year(l.issue_date) = (year(current date)- 4 )  then  l.id_licences else null end) amount_4
	,count(distinct case when year(l.issue_date) = (year(current date)- 3 )  then  l.id_licences else null end) amount_3
	,count(distinct case when year(l.issue_date) = (year(current date)- 2 )  then  l.id_licences else null end) amount_2
	,count(distinct case when year(l.issue_date) = (year(current date)- 1 )  then  l.id_licences else null end) amount_1
	,count(distinct case when year(l.issue_date) = (year(current date)- 0 )  then  l.id_licences else null end) amount_0
	,GET_VOLUME_LIC.acts+ 3 
	,GET_VOLUME_LIC.type
from	LIC l
UNION
select 
	sum(distinct case when year(l.issue_date) = (year(current date)- 6 )  then  l.summ else  0  end) amount_6
	,sum(distinct case when year(l.issue_date) = (year(current date)- 6 )  then  l.summ else  0  end) amount_5
	,sum(distinct case when year(l.issue_date) = (year(current date)- 6 )  then  l.summ else  0  end) amount_4
	,sum(distinct case when year(l.issue_date) = (year(current date)- 6 )  then  l.summ else  0  end) amount_3
	,sum(distinct case when year(l.issue_date) = (year(current date)- 6 )  then  l.summ else  0  end) amount_2
	,sum(distinct case when year(l.issue_date) = (year(current date)- 6 )  then  l.summ else  0  end) amount_1
	,sum(distinct case when year(l.issue_date) = (year(current date)- 6 )  then  l.summ else  0  end) amount_0
	,GET_VOLUME_LIC.acts+ 4 
	,GET_VOLUME_LIC.type
from	LIC l
...
Рейтинг: 0 / 0
10.10.2007, 11:16
    #34859432
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
db2 Размер строки превысил
Сурово...
Глюк какой-то.

Попробуйте заменить все union на union all, т.к., похоже, что в вашем случае результат не должен измениться.
...
Рейтинг: 0 / 0
10.10.2007, 11:21
    #34859459
Pilat_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
db2 Размер строки превысил
Насколько я понимаю это может объяснить ошибку
ibm talk
P.S. union all результата не дал
...
Рейтинг: 0 / 0
10.10.2007, 15:10
    #34860547
Pilat_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
db2 Размер строки превысил
Один выход найден.
Каждый из юнионов запихивать в темповую таблицу, а затем ее юзать.
...
Рейтинг: 0 / 0
10.10.2007, 15:28
    #34860635
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
db2 Размер строки превысил
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select t.*
from table
(
values 
  ( 1 , 4 ,'АВТ')
, ( 5 , 12 ,'ЖДТ')
, ( 12 , 17 ,'ВДТ')
, ( 1 , 17 ,'ВСЕГО')
) v (acts, acts2, type)
, TABLE(PNTK.GET_VOLUME_LIC(v.acts, v.acts2, v.type)) t
...
Рейтинг: 0 / 0
10.10.2007, 17:24
    #34861140
Pilat_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
db2 Размер строки превысил
Благодарствую )
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / db2 Размер строки превысил / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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