Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Хранимая процедура и SQL0746N
|
|||
|---|---|---|---|
|
#18+
Пытаюсь сделать что-то вроде динамического представления. Имеется удф возвращающая набор строк, внутри нее вызывается процедура заполняющая таблицу из которой и возвращается набор. В итоге получаю SQL0746N - ошибка - мутация таблицы. Может кто в курсе - возможно ли разрешить редактирования таблицы и возвращения селекта с нее в одной процедуре? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2009, 11:22 |
|
||
|
Хранимая процедура и SQL0746N
|
|||
|---|---|---|---|
|
#18+
Версия и фикспак db2 какие? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2009, 11:55 |
|
||
|
Хранимая процедура и SQL0746N
|
|||
|---|---|---|---|
|
#18+
db2level DB21085I Instance "db2inst1" uses "64" bits and DB2 code release "SQL09010" with level identifier "02010107". Informational tokens are "DB2 v9.1.0.0", "s060629", "LINUXAMD64", and Fix Pack "0". Product is installed at "/opt/ibm/db2/V9.1". Хотелось бы решение в коде, а не в настройках :) это должно работать на 8-й и 9.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2009, 12:06 |
|
||
|
Хранимая процедура и SQL0746N
|
|||
|---|---|---|---|
|
#18+
Попробуйте db2stop db2set DB2_RESOLVE_CALL_CONFLICT =ALL db2start db2 CALL SYSPROC.REBIND_ROUTINE_PACKAGE ('P','procedureschema.procedurename','CONSERVATIVE') Работать, если и будет, то только в v9.5.2 и выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2009, 12:27 |
|
||
|
Хранимая процедура и SQL0746N
|
|||
|---|---|---|---|
|
#18+
Спасибо, я уже пробовал - на 9.1 не работает. Вообще мне надо вернуть из внешней процедуры/функции набор данных - может быть вы в курсе как это сделать? Я навскидку сделал таблицу - загружаю в нее данные, а функций просто вызываю ее и выдаю набор. В доках пока не нашел как из внешней процедуры можно набор вернуть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2009, 12:39 |
|
||
|
Хранимая процедура и SQL0746N
|
|||
|---|---|---|---|
|
#18+
IntserСпасибо, я уже пробовал - на 9.1 не работает. Вообще мне надо вернуть из внешней процедуры/функции набор данных - может быть вы в курсе как это сделать? Я навскидку сделал таблицу - загружаю в нее данные, а функций просто вызываю ее и выдаю набор. В доках пока не нашел как из внешней процедуры можно набор вернуть.Опишите подробнее ваш алгоритм. Что вам надо сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2009, 13:55 |
|
||
|
Хранимая процедура и SQL0746N
|
|||
|---|---|---|---|
|
#18+
Мне нужно сделать например вот такое select * from TABLE(some_udf()) - т.е. возвратить набор, причем это внешняя процедура. Я первоначально сделал просто - внешняя процедура на С++ заполняет таблицу, а удф на sql просто ее вызывает и возвращает набор. Хорошо было бы ссылку на толковую доку по этому вопросу - потому что непонятных вещей для меня еще довольно много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2009, 14:06 |
|
||
|
Хранимая процедура и SQL0746N
|
|||
|---|---|---|---|
|
#18+
IntserМне нужно сделать например вот такое select * from TABLE(some_udf()) - т.е. возвратить набор, причем это внешняя процедура. Я первоначально сделал просто - внешняя процедура на С++ заполняет таблицу, а удф на sql просто ее вызывает и возвращает набор. Хорошо было бы ссылку на толковую доку по этому вопросу - потому что непонятных вещей для меня еще довольно много.Если ваша функция должна: - вызвать процедуру, которая вставит записи в таблицу t1 - потом сделать как-то select ... from t1 where ... чтобы вернуть то, что вставила процедура то так до v9.5.2 не получится. Если же без select ... from t1 ... можно обойтись (например, процедура возвращает result set из вставленных записей), то можно, но с помощью С udf, а не sql. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2009, 15:50 |
|
||
|
Хранимая процедура и SQL0746N
|
|||
|---|---|---|---|
|
#18+
[quote] Если же без select ... from t1 ... можно обойтись (например, процедура возвращает result set из вставленных записей), то можно, но с помощью С udf, а не sql. [/quote] Да, это именно то, что мне нужно. Вы не знаете толковой доки по этому вопросу - я скачал несколько редбуков и книгу по sql pl - там расписывается возвращение резалт сетов для процедур и функций на sql pl - но очень мало про внешние процедуры на c++ Вообще ничего не о том как применять макросы типа EXEC :( Я по примерам что-то пытаюсь делать - но много непонятного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2009, 20:02 |
|
||
|
Хранимая процедура и SQL0746N
|
|||
|---|---|---|---|
|
#18+
Intser, Давайте поконкретней? Примеры, очевидно, Вы уже нашли. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2009, 10:32 |
|
||
|
Хранимая процедура и SQL0746N
|
|||
|---|---|---|---|
|
#18+
Vladimir Kiselev, Сори, с ROLLBACK - я погорячился, он здесь совсем не к месту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2009, 10:36 |
|
||
|
Хранимая процедура и SQL0746N
|
|||
|---|---|---|---|
|
#18+
IntserВы не знаете толковой доки по этому вопросу - я скачал несколько редбуков и книгу по sql pl - там расписывается возвращение резалт сетов для процедур и функций на sql pl - но очень мало про внешние процедуры на c++ Вообще ничего не о том как применять макросы типа EXEC :( Я по примерам что-то пытаюсь делать - но много непонятного.Начните отсюда: Introduction to embedded SQL . Можно также для динамического sql: Introduction to DB2 Call Level Interface and ODBC . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2009, 10:44 |
|
||
|
Хранимая процедура и SQL0746N
|
|||
|---|---|---|---|
|
#18+
Vladimir KiselevIntser, Давайте поконкретней? Примеры, очевидно, Вы уже нашли. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Примерно так я и сделал - только у меня declare global temporary table и соответственно курсор на нее. Получаю набор просто вызовом call some_proc(). Интересно можно этот курсор обработать в удф - не нашел никаких упоминаний - что-нибудь вроде этого сделать: select * from TABLE(some_udf()) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2009, 11:25 |
|
||
|
Хранимая процедура и SQL0746N
|
|||
|---|---|---|---|
|
#18+
Mark BarinsteinIntserВы не знаете толковой доки по этому вопросу - я скачал несколько редбуков и книгу по sql pl - там расписывается возвращение резалт сетов для процедур и функций на sql pl - но очень мало про внешние процедуры на c++ Вообще ничего не о том как применять макросы типа EXEC :( Я по примерам что-то пытаюсь делать - но много непонятного.Начните отсюда: Introduction to embedded SQL . Можно также для динамического sql: Introduction to DB2 Call Level Interface and ODBC . Спасибо, похоже то что нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2009, 11:40 |
|
||
|
Хранимая процедура и SQL0746N
|
|||
|---|---|---|---|
|
#18+
Mark BarinsteinЕсли ваша функция должна: - вызвать процедуру, которая вставит записи в таблицу t1 - потом сделать как-то select ... from t1 where ... чтобы вернуть то, что вставила процедура то так до v9.5.2 не получится. Если же без select ... from t1 ... можно обойтись (например, процедура возвращает result set из вставленных записей), то можно, но с помощью С udf, а не sql.Я тут ошибку допустил. External UDF не может модифицировать данные (или вызывать процедуру, которая это делает). Так что без серьёзных извращений (типа вызова внутри функции на java процедуры через дополнительное jdbc type-4 соединения) не обойтись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2009, 11:49 |
|
||
|
Хранимая процедура и SQL0746N
|
|||
|---|---|---|---|
|
#18+
IntserМне нужно сделать например вот такое select * from TABLE(some_udf()) - т.е. возвратить набор, причем это внешняя процедура. Я первоначально сделал просто - внешняя процедура на С++ заполняет таблицу, а удф на sql просто ее вызывает и возвращает набор. Хорошо было бы ссылку на толковую доку по этому вопросу - потому что непонятных вещей для меня еще довольно много. Зачем нужно делать именно так? Код хранимой процедуры вам доступен для изменения? Можно сделать так: 1. В хранимой создать и заполнить временную таблицу. 2. В приложении вызвать хранимую и после ее выполнения сделать выборку из временной таблицы. В таком случае функция как таковая не нужна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2009, 11:59 |
|
||
|
Хранимая процедура и SQL0746N
|
|||
|---|---|---|---|
|
#18+
Примерно так я и делаю - только процедура у меня возвращает курсор - селект из временной таблицы. Я хотел сделать дополнительную обертку из удф типа Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2009, 12:21 |
|
||
|
Хранимая процедура и SQL0746N
|
|||
|---|---|---|---|
|
#18+
Intser, В примерах есть Ваш вариант, это TableUDF, причём на разных языках. Только временную таблицу и пространство нужно будет создать вне этой функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2009, 12:21 |
|
||
|
Хранимая процедура и SQL0746N
|
|||
|---|---|---|---|
|
#18+
Для меня неожиданным оказался тот факт, что временная таблица исчезает после окончания сессии(в основном я работал с ораклом - там она создается один раз). При этом у меня не срабатывает создание функции - временная таблица декларируется в процедуре и в функции она оказывается не известной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2009, 12:25 |
|
||
|
Хранимая процедура и SQL0746N
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответы. Буду смотреть примеры, разбираться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2009, 12:36 |
|
||
|
Хранимая процедура и SQL0746N
|
|||
|---|---|---|---|
|
#18+
Vladimir KiselevIntser, В примерах есть Ваш вариант, это TableUDF, причём на разных языках. Только временную таблицу и пространство нужно будет создать вне этой функции.SQL-функции в db2 for LUW не могут обращаться ко временным таблицам: Код: plaintext 1. 2. 3. 4. 5. valid Command Line Processor command. During SQL processing it returned: SQL0526N The requested function does not apply to declared temporary tables. LINE NUMBER=3. SQLSTATE=42995 Explanation: The SQL statement being executed refers to a declared temporary table. A declared temporary table cannot be used in the given context. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2009, 12:41 |
|
||
|
Хранимая процедура и SQL0746N
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein, Вот такая штука работает, но, примеров на c/cpp нет, есть только на других языках. Поскольку они работают с контекстом, то выборка из курсора, открытого в PRO1 должна пройти нормально (из CLP работает). Как на с, я не пробовал, а потому не знаю, увы. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2009, 14:53 |
|
||
|
Хранимая процедура и SQL0746N
|
|||
|---|---|---|---|
|
#18+
Vladimir Kiselev, 1. В процедуре, которую вызывает sql функция, может быть обращение к временным таблицам. Напрямую из функции - нет, она просто не скомпилируется. 2. sql функции не могут объявлять курсоры или с ними работать, поэтому в sql функции невозможно обработать result set процедуры. 3. внешняя функция может обработать result set процедуры, но из внешней функции нельзя выполнять команды изменения данных (в т.ч. вызывать modifies sql data процедуры), а sql табличная функция может быть modifies sql data. Твой пример не противоречит ни одному утверждению. Поэтому, если только из выходных параметров процедуры не удастся собрать select для return в sql функции, то до v9.5.2 ничего не выйдет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2009, 15:16 |
|
||
|
Хранимая процедура и SQL0746N
|
|||
|---|---|---|---|
|
#18+
Остановился просто на возврате набора из: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2009, 10:40 |
|
||
|
|

start [/forum/topic.php?fid=43&fpage=85&tid=1603448]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
| others: | 254ms |
| total: | 404ms |

| 0 / 0 |
