powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / db2 Размер строки превысил
11 сообщений из 11, страница 1 из 1
db2 Размер строки превысил
    #34858894
Pilat_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
дб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
db2 Размер строки превысил
    #34858895
Pilat_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если исключить, например, послдний юнион - ошибки не будет.
...
Рейтинг: 0 / 0
db2 Размер строки превысил
    #34859083
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а просто
select * from TABLE(PNTK.GET_VOLUME_LIC(1,17,'ВСЕГО')) itog
работает?
...
Рейтинг: 0 / 0
db2 Размер строки превысил
    #34859091
Pilat_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinsteinа просто
select * from TABLE(PNTK.GET_VOLUME_LIC(1,17,'ВСЕГО')) itog
работает?
Конечно, каждая в отдельности и эта в частности выборка работает без ошибок.
...
Рейтинг: 0 / 0
db2 Размер строки превысил
    #34859116
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
create function покажите
...
Рейтинг: 0 / 0
db2 Размер строки превысил
    #34859207
Pilat_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
db2 Размер строки превысил
    #34859432
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сурово...
Глюк какой-то.

Попробуйте заменить все union на union all, т.к., похоже, что в вашем случае результат не должен измениться.
...
Рейтинг: 0 / 0
db2 Размер строки превысил
    #34859459
Pilat_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насколько я понимаю это может объяснить ошибку
ibm talk
P.S. union all результата не дал
...
Рейтинг: 0 / 0
db2 Размер строки превысил
    #34860547
Pilat_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Один выход найден.
Каждый из юнионов запихивать в темповую таблицу, а затем ее юзать.
...
Рейтинг: 0 / 0
db2 Размер строки превысил
    #34860635
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
db2 Размер строки превысил
    #34861140
Pilat_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Благодарствую )
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / db2 Размер строки превысил
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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