powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / THE STATEMENT IS TOO LONG OR TOO COMPLEX
6 сообщений из 6, страница 1 из 1
THE STATEMENT IS TOO LONG OR TOO COMPLEX
    #35928387
demidovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа,

В процессе выполнения хранимой процедуры под DB2 9.1 для z/OS, которая вызывает довольно много вложенных процедур, получаю ошибку -101 "THE STATEMENT IS TOO LONG OR TOO COMPLEX".
Я отключил параллелелизм, как предлагалось в описании этой ошибки:
Код: plaintext
SET CURRENT DEGREE = '1';
Ошибка не исчезла. Я понаделал вставку записей в таблицу-лог рядом с проблемным местом и обнаружил, что сбой происходит на непримечательном с виду выражении:
Код: plaintext
IF NOT EXISTS (SELECT  1  FROM A.MYTABLE WHERE TABLE_COLUMN = PROC_PARAM) THEN
Забавно, но это условие к моменту сбоя успевает успешно отработать много раз.

Есть идеи в чем может быть дело?

Кстати, а куда правильно вставлять SET CURRENT DEGREE? Я эту инструкцию вызываю вначале процедуры самого верхнего уровня.
...
Рейтинг: 0 / 0
THE STATEMENT IS TOO LONG OR TOO COMPLEX
    #35928653
demidovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я переписал IF через переменную, однако, буквально следующий запрос вызвал такую же ошибку:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
DECLARE a, b, c INT;


SELECT col_a, col_b, col_c INTO a, b, c
FROM A.MYTABLE WHERE ID = OBJID --OBJID - это параметр хранимой процедуры 
ORDER BY col_c DESC
FETCH FIRST ROW ONLY;
...
Рейтинг: 0 / 0
THE STATEMENT IS TOO LONG OR TOO COMPLEX
    #35930346
demidovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Детектив продолжается!

После дополнительных экспериментов ситуация немного поменялась, попытаюсь описать проблемный участок:
1) Из java дергается SQL процедура P1, которая дергает процедуру P2
2) В самом начале P1 вызывается SET CURRENT DEGREE = '1';
3) В процедуре P2 есть такой фрагмент:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
DECLARE a, b, c INT;

-- Тут я вырезал SQL код, с виду ничего особенного

INSERT INTO A.LOG (MESSAGE) VALUES ('Before SELECT');

SELECT col_a, col_b, col_c INTO a, b, c
FROM A.MYTABLE WHERE ID = OBJID --OBJID - это параметр P2
ORDER BY col_c DESC
FETCH FIRST ROW ONLY;

INSERT INTO A.LOG (MESSAGE) VALUES ('After SELECT');

Процедура P1 у меня вызывается много раз с различными параметрами и указанный фрагмент кода отлично работает. Однако при очередном вызове P1 в java приходит исключение THE STATEMENT IS TOO LONG OR TOO COMPLEX (в процессе экспериментов я сталкивался с этим исключением как с кодом -101, так и без него). Смотрю в A.LOG и вижу, что там есть только 'Before SELECT', но нет 'After SELECT'.

Идеи?
...
Рейтинг: 0 / 0
THE STATEMENT IS TOO LONG OR TOO COMPLEX
    #35930414
demidovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для удобства напишу примечание к ошибке в хелпе (см. http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/topic/com.ibm.db29.doc.codes/n101.htm )

-101
THE STATEMENT IS TOO LONG OR TOO COMPLEX

Explanation
DB2® cannot process the statement because it exceeds the system limits for length or complexity. Enabling parallelism will increase the complexity of the statement.

System action
DB2 cannot process the statement.

Programmer response
Divide the statement into shorter or less complex SQL statements.

If the statement enables parallelism, try disabling parallelism. You may do this by using the DEGREE(1) bind option for static SQL, or by setting the CURRENT DEGREE special register to '1' for dynamic SQL.
SQLSTATE
54001


Т.е. хелп предлагает, во-первых, убрать параллелизм - это я сделал (см. пункт 2). Во-вторых, предлагает мне упростить выражение. Вот тут у меня небольшой ступор, т.к.
1. Запрос успешно работает в аналогичных обстоятельствах
2. Куда уж проще? :)
...
Рейтинг: 0 / 0
THE STATEMENT IS TOO LONG OR TOO COMPLEX
    #35930439
demidovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В Windows версии DB2 данная связка java + процедуры работает отлично с параметрами БД по умолчанию.
На данном форуме я уже видел рекомендации увеличить параметр STMTHEAP, но в DB2 для z/OS я что-то не пойму где аналог (и есть ли он вообще) :(
...
Рейтинг: 0 / 0
THE STATEMENT IS TOO LONG OR TOO COMPLEX
    #35931043
1. На стороне z/OS проверить не выдаются ли дополнительные сообщения, абенды или записи в LOGREC. Информация может быть от адресных пространств DB2 и/или от WLM-пространств, в которых исполняются хранимые процедуры.
2. Установлены ли на продукт DB2 for z/OS V9 обновления (PTF-ы)?
Если продукт на обслуживании в IBM, то периодически должны приходить "сборки" для обновления продукта.

PS: Поиском не нашел подходящих по симптомам PTF-ов, поэтому диагностическая информация (если она есть) со стороны z/OS будет очень полезна.
Ну и если есть договор с IBM-ом, то почему бы не обратиться в их Support?
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / THE STATEMENT IS TOO LONG OR TOO COMPLEX
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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