Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Новый топик    Ответить
 DB Z/OS ХП Большой SQL запрос  [new]
zje
Member

Откуда:
Сообщений: 20
Всем привет! Столкнулся с одной непонятной мне проблемой.
Есть процедура разработанная под DB2 9.1 win. В ней ничего особенного кроме большого SQL запроса нет, запрос
аккуратненько влезает в длину varchar. При переносе этой процедуры под DB2 9.1 под Z/OS выдает ошибку
DB2 SQL ERROR -137, SQLSTATE 54006 THE LENGTH RESULTING FROM CONCAT IS GREATER THAN 32764.
Т.е. как бы уже выходит запределы VARCHAR-а. Причем чтобы процедура заработала надо существенно
сократить запрос. Примерно на 10 тыс. символов.
Как такое получается и есть ли варианты кроме сокращения SQL запроса?
Спасибо.
25 окт 11, 17:55    [11497957]     Ответить | Цитировать Сообщить модератору
 Re: DB Z/OS ХП Большой SQL запрос  [new]
knudsen
Member

Откуда: Москва
Сообщений: 311
zje,

SQLSTATE: 54005


-137 THE LENGTH RESULTING FROM operation IS GREATER THAN maximum-length Explanation:
The length of the result of concatenation or a function exceeds the defined maximum.
The operation that resulted in the error is operation.

For concatenation, the length cannot exceed 32,764 (if character operands) or 16,382 (if graphic operands).
For other functions, see SQL Reference for the maximum result length.

System action:
The statement cannot be executed.

Programmer response:
Ensure that the length of the result does not exceed the defined maximum.


http://www-05.ibm.com/e-business/linkweb/publications/servlet/pbi.wss?CTY=US&FNC=SRX&PBL=SC18-9854-03

- страница 1564
26 окт 11, 12:19    [11501460]     Ответить | Цитировать Сообщить модератору
 Re: DB Z/OS ХП Большой SQL запрос  [new]
knudsen
Member

Откуда: Москва
Сообщений: 311
указал знающий человек из IBM
26 окт 11, 12:20    [11501484]     Ответить | Цитировать Сообщить модератору
 Re: DB Z/OS ХП Большой SQL запрос  [new]
zje
Member

Откуда:
Сообщений: 20
Спасибо, сейчас почитаю!
26 окт 11, 12:33    [11501686]     Ответить | Цитировать Сообщить модератору
 Re: DB Z/OS ХП Большой SQL запрос  [new]
mbrg
Member

Откуда: Stuttgart
Сообщений: 29
zje,

poprobuj uvelichit' stmtheap,

db2 UPDATE database configuration for db_name using stmtheap 30000

mne v pohozhej situacii pomoglo.
28 окт 11, 16:39    [11517497]     Ответить | Цитировать Сообщить модератору
 Re: DB Z/OS ХП Большой SQL запрос  [new]
Hunterik
Member

Откуда:
Сообщений: 467
Вечер добрый. А текст процедур (работающей и нет) привести можете?
28 окт 11, 18:50    [11518436]     Ответить | Цитировать Сообщить модератору
 Re: DB Z/OS ХП Большой SQL запрос  [new]
mbrg
Member

Откуда: Stuttgart
Сообщений: 29
Hunterik,
Privet,

nu v obshem to mozhno, tol'ko v ponedel'nik, oni na rabote.

Bilo tak , bila rabochaja procedura, posle izmenenij, dobavili esho odin cikla for, perestala rabotat', a kogda razbil na dve procedure,

vizival vtoruiu, v nej bil tol'ko etot for, vse opiat' rabotalo.
Potom uvelichil stmtheap(tozhe gdeto na farumah nashel) s 8000 na 20000, sobral vse vmeste i vse zarabotalo.
29 окт 11, 02:12    [11520186]     Ответить | Цитировать Сообщить модератору
 Re: DB Z/OS ХП Большой SQL запрос  [new]
zje
Member

Откуда:
Сообщений: 20
Всем привет! Спасибо за ответы.
Тут разобрался в корне вопроса, почему же получается такой большой запрос (в символах).
Если в ХП писать
set sql1='select
case when
t1.kod_dor is null then t2.kod_dor
else t1.kod_dor end as kod_dor,
case when t1.kod_nod is null then t2.kod_nod else
t1.kod_nod end as kod_nod, ';

то в итоге получаем
select                                                            case when                                                                      t1.kod_dor is null then t2.kod_dor
т.е. на каждый перенос в SQL приходится много лишних символов пробела.
Если же писать
set sql1='select ';
set sql1=sql1||'case when ';
set sql1=sql1||'t1.kod_dor is null then t2.kod_dor ';
set sql1=sql1||'else t1.kod_dor end as kod_dor, ';
set sql1=sql1||'case when t1.kod_nod is null then t2.kod_nod else ';
set sql1=sql1||'t1.kod_nod end as kod_nod, '

то всё нормально, но получается слишком много операторов set.
При чем так происходит только при деплое под Z/OS, под PC нет никаких лишних пробелов.

ХП пишу в Data Studio 2.1.
Может кто-нибудь знает как избежать эти лишних пробелов?
Заранее спасибо.
22 ноя 11, 14:43    [11637969]     Ответить | Цитировать Сообщить модератору
 Re: DB Z/OS ХП Большой SQL запрос  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4946
zje,

Здравствуйте.
set sql1=
  'select '
||'case when '
||'t1.kod_dor is null then t2.kod_dor '
||'else t1.kod_dor end as kod_dor, '
||'case when t1.kod_nod is null then t2.kod_nod else '
||'t1.kod_nod end as kod_nod, ';
?
22 ноя 11, 15:13    [11638205]     Ответить | Цитировать Сообщить модератору
 Re: DB Z/OS ХП Большой SQL запрос  [new]
zje
Member

Откуда:
Сообщений: 20
Спасибо, попробую так..
Как всё просто ведь бывает.. )
22 ноя 11, 15:28    [11638323]     Ответить | Цитировать Сообщить модератору
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Ответить