powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Stored procedure exceeds 32 k limit...
23 сообщений из 23, страница 1 из 1
Stored procedure exceeds 32 k limit...
    #32272042
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Размер SQL процедуры начал превышать максамально допустимый размер в 32К. Как советовал NewYear буду разбивать её на две поменьше, вызывая из С программы, оформленной как ХП. Т.е.
Код: plaintext
1.
2.
3.
4.
CREATE PROCEDURE MyStoredProc(IN Par1,IN Par2...)
EXTERNAL NAME MYLIB.Program
LANGUAGE C
GENERAL WITH NULLS;

,где MYLIB.Program - прога на Си. Правильно ли это? Можно ли написать процедуру на SQL'e, где вызывались бы другие процедуры?
...
Рейтинг: 0 / 0
Stored procedure exceeds 32 k limit...
    #32272051
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Правильно ли это?
правильно.

>Можно ли написать процедуру на SQL'e, где вызывались бы другие процедуры?
можно.

не важно, на чем написана процедура.
...
Рейтинг: 0 / 0
Stored procedure exceeds 32 k limit...
    #32272161
IBMer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помоему не важно на каком языке написана процедура это на 390.
DB2 LUW SQL процедура не может вызывать Java. Помоему....
...
Рейтинг: 0 / 0
Stored procedure exceeds 32 k limit...
    #32272166
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну, разве что Java. (не пишу прoцедур на java)

===============================================
на OS/400 у меня вообще получилось написать на sql, а заявить как language С parameter style db2sql. оч удобно, когда нужно перенести процедуру на машину, где нет компилятора.
...
Рейтинг: 0 / 0
Stored procedure exceeds 32 k limit...
    #32273261
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В таком случае появляется ещё одна проблема:

Nesting CALL Statements
A program that is executing as a procedure, a user-defined function, or a trigger
can issue a CALL statement. When a procedure, user-defined function, or trigger
calls a procedure, user-defined function, or trigger, the call is considered to be
nested. There is no limit on how many levels procedures and functions can be
nested, but triggers can only be nested up to 300 levels deep.
If a procedure returns any query result sets, the result sets are returned to the
caller of the procedure. If the SQL CALL statement is nested, the result sets are
visible only to the program that is at the previous nesting level. For example, if a
client program calls procedure PROCA, which in turn calls procedure PROCB.
Only PROCA can access any result sets that PROCB returns; the client program has
no access to the query result sets.

как передать "внутренний" ResultSet программе вызвавшей процедуру с вложенным вызовом другой процедуры?
...
Рейтинг: 0 / 0
Stored procedure exceeds 32 k limit...
    #32273276
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
риман, на какой это платформе?
...
Рейтинг: 0 / 0
Stored procedure exceeds 32 k limit...
    #32273842
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Платформа: OS/400 v5r2m0
Вызов процедуры происходит из ХП на SQL.
...
Рейтинг: 0 / 0
Stored procedure exceeds 32 k limit...
    #32274690
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да напиши всю процедуру на си. там нет никакого ограничения на длину исходника, и кода, как показывает практика получается меньше.
...
Рейтинг: 0 / 0
Stored procedure exceeds 32 k limit...
    #32275139
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По - видимому так и придется сделать (вот мля :| ). Спасибо за ответы.
...
Рейтинг: 0 / 0
Stored procedure exceeds 32 k limit...
    #32275627
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но ведь (по крайней мере, на DB2 UDB) в C-процедурах и функциях [была] невозможной работа с DECIMAL, а ведь именно в полях такого типа хранят деньги?

Как там жабные процедуры - они уже работоспособны или все еще нет? (Последний раз я проверял их в DB2 v5 - чудовищно глючили тогда).
...
Рейтинг: 0 / 0
Stored procedure exceeds 32 k limit...
    #32275658
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Metelitsa

int counter;
decimal (15,7) money;

AS/400 вообще вещь забавная.
...
Рейтинг: 0 / 0
Stored procedure exceeds 32 k limit...
    #32275671
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что, неужели в си нельзя работать с DECIMAL?
______________________________________
чем дальше в лес тем больше дров... (с)
...
Рейтинг: 0 / 0
Stored procedure exceeds 32 k limit...
    #32275694
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на аэске можно
...
Рейтинг: 0 / 0
Stored procedure exceeds 32 k limit...
    #32275721
Moses
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Victor Metelitsa
>Как там жабные процедуры - они уже работоспособны или все еще нет? >(Последний раз я проверял их в DB2 v5 - чудовищно глючили тогда).

У меня вполне работоспособны (в восьмой версии). Не глючат и не тормозят(у меня, по крайней мере). Процедуры правда не очень большие. В основном на массовые изменения цен и прочей лабуды, где они гораздо эффективней динамических запросов.
...
Рейтинг: 0 / 0
Stored procedure exceeds 32 k limit...
    #32276251
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чем эффективнее?
...
Рейтинг: 0 / 0
Stored procedure exceeds 32 k limit...
    #32276259
Moses
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Эффективнее по скорости.
Поскольку, как я понимаю, в ХП запросы компилированные и план уже построен.
Во всяком случае некоторое время существовало два способа изменения данных, пока я дописывал процедуры, и ощущения после перехода от запросов к процедурам исключительно положительные.
Повторюсь - это только в контексте изменения больших объемов данных на больших таблицах с небольшим или вовсе никаким приростом за день.
...
Рейтинг: 0 / 0
Stored procedure exceeds 32 k limit...
    #32276378
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так я и думал - "ощущения". Для полноты картины еще скажите, что эти SP работают через JDBC.
...
Рейтинг: 0 / 0
Stored procedure exceeds 32 k limit...
    #32276389
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ваш ответ наводит на мысль, что Вы не знаете разницы между static SQL и dynamic SQL, а также не меряли время прекомпиляции запроса.
...
Рейтинг: 0 / 0
Stored procedure exceeds 32 k limit...
    #32276884
Moses
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Про ощущения - замерялось время. Я писал для этого тестовые примеры, чтобы убедить других членов команды в необходимости процедур. Сейчас не приведу конкретных цифр, но время сокращалось существенно.
Применялось SQLJ.

Если можно подробнее про разницу между static и dynamic? Хотя-бы применительно к вышесказанному.
...
Рейтинг: 0 / 0
Stored procedure exceeds 32 k limit...
    #32277932
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Ощущения" - это противоположность измерениям. Если некий факт имеет место, желательно иметь скрипт для его воспроизведения и выяснения причин. Лично мне этот факт кажется невероятным.

Да, статический SQL - тот, что заранее прекомпилируется и планы хранятся в базе, в противоположность динамическому. Просьба не путать с embedded SQL. Embedded SQL может быть и динамическим, а программы, использующие static SQL, не обязаны использовать Embedded SQL. Примеры:
1) VA Smalltalk, самостоятельно генерирующий пакеты;
2) см. хелп по утилите db2cap "Binds a capture file to generate one or more static packages. A capture file is generated during a static profiling session of a CLI/ODBC/JDBC application, and contains SQL statements that were captured during the application run. This utility processes the capture file so that it can be used by the CLI/ODBC/JDBC driver to execute static SQL for the application"

Далее, статический SQL никак не связан только с хранимыми процедурами. Его могут использовать и хранимые процедуры, и обычные клиентские программы. А могут и не использовать. Поэтому заявление "хранимые процедуры гораздо эффективнее динамических запросов" не имеет смысла.

Смысл мог быть в заявлениях наподобие "статический SQL гораздо эффективнее динамического в таких-то условиях" или "хранимые процедуры выполняют запросы эффективнее обычных приложений" - но так ли это?

Например, в чем разница между выполнением запроса посредством статического SQL и динамического? Во времени компиляции? Но обычно это занимает доли секунды. Скорее всего это сказалось бы на коротких запросах, выполняемых в цикле. Но на это есть кеширование планов.

Запрос, конечно, выполняет не хранимая процедура, а СУБД - какая ей разница, кто запрос послал.
...
Рейтинг: 0 / 0
Stored procedure exceeds 32 k limit...
    #32278360
Moses
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Victor Metelitsa:
Возможно показалось что я имею ввиду запросы из ХП всегда эффективнее запросов из обычных программ. Если это так то я беру слова обратно.
Данное ускорение работы имело место в моем частном случае от чего я не отказываюсь и здесь именно ХП имели выигрыш перед другими способами изменения данных.
...
Рейтинг: 0 / 0
Stored procedure exceeds 32 k limit...
    #32278618
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А за счет чего был выигрыш?
...
Рейтинг: 0 / 0
Stored procedure exceeds 32 k limit...
    #32279031
Moses
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>А за счет чего был выигрыш?
Точно не скажу. Брался запрос, гонялся в Quest Central с изменением уровней оптимизаци, переписыванием самого запроса. Разница между вариантами была в пределах 1.5 сек, что на фоне 10-15 сек.(в зависимости от загруженности сервера) неважно. Как процедуры из QC запускать не знаю.
Видимо повлияло то что доступ осуществлялся через ADO и на обработку запроса тратилось больше времени чем на ХП. Причем без разницы была объявлена ХП FENCED или NOT FENCED, процедура выполнялась быстрее.
Опять же время на разбор скрипта(не SQL, а ASP) IIS'ом терялось, а в ХП только передавались параметры.
Но так же и через компоненты SQL-Direct в Delphi если я возвращал курсор из процедуры то, к примеру, скроллинг таблицы осуществлялся быстрее, чем когда я открывал это как рекордсет.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Stored procedure exceeds 32 k limit...
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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