Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Динамический фомирование данных из табличной функции?
|
|||
|---|---|---|---|
|
#18+
Приветствую! Хочу сделать как то так, но понимаю, что такой return невозможен. Есть ли возможность сделать такое в DB2, Примерный скрипт ниже: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. P.S. Написание функции на java не предлагать, нужно на субд и именно функцию, чтобы потом её в запросах использовать (в конструкции from)! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2013, 13:54 |
|
||
|
Динамический фомирование данных из табличной функции?
|
|||
|---|---|---|---|
|
#18+
Подскажите хотя бы это надо строго через вызов процедуры делать или же через cursor как то можно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2013, 16:22 |
|
||
|
Динамический фомирование данных из табличной функции?
|
|||
|---|---|---|---|
|
#18+
medoed P.S. Написание функции на java не предлагать, нужно на субд и именно функцию, чтобы потом её в запросах использовать (в конструкции from)!Здравствуйте. В db2 функции можно писать как на языке SQL, так и на внешних языках, например JAVA, C. При этом SQL запросу, который использует эту функцию, всё равно, на каком языке написана эта функция. В табличных функциях на языке SQL нельзя использовать динамический SQL. На java такая функция легко может быть реализована. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2013, 10:33 |
|
||
|
Динамический фомирование данных из табличной функции?
|
|||
|---|---|---|---|
|
#18+
Mark Barinsteinmedoed P.S. Написание функции на java не предлагать, нужно на субд и именно функцию, чтобы потом её в запросах использовать (в конструкции from)!Здравствуйте. В db2 функции можно писать как на языке SQL, так и на внешних языках, например JAVA, C. При этом SQL запросу, который использует эту функцию, всё равно, на каком языке написана эта функция. В табличных функциях на языке SQL нельзя использовать динамический SQL. На java такая функция легко может быть реализована. Спасибо,Марк! А можно ли написать скалярную функцию с динамическим курсором - которая возвращает одну строку (мне по сути 1-на длинная строка и нужна). А потом из другой функции вызывать скалярную - для того чтобы обернуть в таблицу эту одну строку. Так возможно? Пример скалярной как то так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. P.S. >>На java такая функция легко может быть реализована. Эти внешние функции по-моему имели ограничения по работе c NickName - ми. Тоесть с MQT внешние функции работаю, с NickName нет! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2013, 11:29 |
|
||
|
Динамический фомирование данных из табличной функции?
|
|||
|---|---|---|---|
|
#18+
Вообщем что то получилось, написал две функции: 1) Скалярная, динамическая, возвращающая с помощью курсора - строку. 2) Табличная - просто вызывает первую и оформляет все в виде таблицы. Выяснился баг, почему то длина строки в итоговой таблице, возвращаемой из табличной функции обрезается до 644 символов, если подставляю вместо вызова функции - реальное значение длинной строки - ничего не обрезается в табличной функции... Если просто попытаться вернуть строку из первой функции, тоже не обрезана. Где баг в динамике, или же в курсоре, непонятно... Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Может кто подскажет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2013, 13:17 |
|
||
|
Динамический фомирование данных из табличной функции?
|
|||
|---|---|---|---|
|
#18+
medoed, Можно через ж... массив попробовать :) код Код: sql 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2013, 14:56 |
|
||
|
Динамический фомирование данных из табличной функции?
|
|||
|---|---|---|---|
|
#18+
medoed, Упрощу вопрос. Есть одна функция: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Вызов такой: Код: plsql 1. -- Обрубает строку до 644 символов, почему? Какие то ограничения на курсор? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2013, 14:57 |
|
||
|
Динамический фомирование данных из табличной функции?
|
|||
|---|---|---|---|
|
#18+
Mark Barinsteinmedoed, Можно через ж... массив попробовать :) код Код: sql 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. Через Ж.. не хочу)) Ваш пост не видел, когда уточнение опубликовывал, помогите с обрубаловым строки и я Вам буду готов проставиться пивом )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2013, 14:59 |
|
||
|
Динамический фомирование данных из табличной функции?
|
|||
|---|---|---|---|
|
#18+
medoed... Через Ж.. не хочу)) Ваш пост не видел, когда уточнение опубликовывал, помогите с обрубаловым строки Для вашего случая, т.е. когда число записей невелико (не измеряется тысячами), оно будет работать нормально. В вашем примере я не буду разбираться - слишком много букв... В моём примере при таком запросе ничего не обрубается: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2013, 16:04 |
|
||
|
Динамический фомирование данных из табличной функции?
|
|||
|---|---|---|---|
|
#18+
Марк ещё раз спасибо. Функция была верной и обрубалось из-за динамически не верной составленной строки в запросе - 0 -лик потерял. Научился динамику в функциях использовать)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2013, 17:08 |
|
||
|
Динамический фомирование данных из табличной функции?
|
|||
|---|---|---|---|
|
#18+
Срочно нужна помощь, в скалярной в функции на боевой возникают траблы... Обе функции работают c NickName (FORM.FUN): Итого, чтобы было понятно, сразу два примера Вот то что работает: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Category Timestamp Duration Message Line Position Error 21.03.2013 13:41:03 0:00:00.077 <link> - DB2 Database Error: ERROR [55047] [IBM][DB2/NT64] SQL20136N Routine "TEMP.TESTSB" (specific name "SQL130321134103934") attempted to access a federated object. 30 0 Что для этого нужно сделать, может какой то доступ дать? Товарищи, выручайте советом - мне именно нужна 2-ая версия процедуры c Begin End (Atomic мне не подойдет...). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2013, 13:59 |
|
||
|
Динамический фомирование данных из табличной функции?
|
|||
|---|---|---|---|
|
#18+
Можно ещё попробовать засунуть курсор в конструкцию Begin atomic Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Но так не компилится тоже, ошибки выдает. Куда ни копаю, везде засада... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2013, 15:29 |
|
||
|
Динамический фомирование данных из табличной функции?
|
|||
|---|---|---|---|
|
#18+
medoedмне именно нужна 2-ая версия процедуры c Begin End (Atomic мне не подойдет...).В процедурах это работает, в функциях с compiled sql - нет. Inlined SQL functions and compiled SQL functions . Вам нужен динамический sql в функции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2013, 15:51 |
|
||
|
Динамический фомирование данных из табличной функции?
|
|||
|---|---|---|---|
|
#18+
Mark Barinsteinmedoedмне именно нужна 2-ая версия процедуры c Begin End (Atomic мне не подойдет...).В процедурах это работает, в функциях с compiled sql - нет. Inlined SQL functions and compiled SQL functions . Вам нужен динамический sql в функции? Приветствую, Марк! Да мне нужен отработать динамику в функции на строне сервера (без java или C), но так как там есть NickName в этой динамике. То походу подойдет только begin atomic ... end . А в нем , что то я не могу откомпилить конструкцию Prepare. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2013, 16:00 |
|
||
|
Динамический фомирование данных из табличной функции?
|
|||
|---|---|---|---|
|
#18+
medoedMark Barinsteinпропущено... В процедурах это работает, в функциях с compiled sql - нет. Inlined SQL functions and compiled SQL functions . Вам нужен динамический sql в функции? Приветствую, Марк! Да мне нужен отработать динамику в функции на строне сервера (без java или C), но так как там есть NickName в этой динамике. То походу подойдет только begin atomic ... end . А в нем , что то я не могу откомпилить конструкцию Prepare. Все таки хотелось бы уточнить. В скалярной функции возможно сделать динамический select из Nickname или это нерешаемая задача для DB2 9,7 , может кто знает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2013, 17:48 |
|
||
|
Динамический фомирование данных из табличной функции?
|
|||
|---|---|---|---|
|
#18+
Походу нашел косяк в DB2 - знает кто то, как это устранить? Вот что работает: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. -- Теперь делаем процедуру, для универсального выполнения динамики: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. -- процедура работает BEGIN DECLARE STR_RESULT VARCHAR(32000); DECLARE STR_EXEC VARCHAR(32000); SET STR_EXEC = ' select MAX(ID_PERSON) from FORM.FUN where ID_PERSON_FUND_PARENT <50'; CALL TEMP.RETURN_STR (STR_EXEC,STR_RESULT); insert into TEMP.DAT(DAT) values(STR_RESULT); END -- select * from TEMP.DAT /*Теперь используем внутри функции процедуру и снова получаем ошибку*/ CREATE OR REPLACE FUNCTION TEMP.TESTSC () RETURNS INTEGER CALLED ON NULL INPUT BEGIN ATOMIC DECLARE STR_RESULT VARCHAR(32000); DECLARE STR_EXEC VARCHAR(32000); CALL TEMP.RETURN_STR (STR_EXEC,STR_RESULT); RETURN cast(STR_RESULT as VARCHAR(32000)); END; -- выдает ошибку select TEMP.TESTSС() from SYSIBM.SYSDUMMY1; Lookup Error - DB2 Database Error: ERROR [55047] [IBM][DB2/NT64] SQL20136N Routine "TEMP.RETURN_STR" (specific name "SQL130322110434800") attempted to access a federated object. Какая то нестыковка... Походу в функциях DB2 не поддерживается NickName в динамике ... Есть какой то патч или неразрешимая проблема!? Марк, вы не в курсе это как то поправимо или это баг? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 11:17 |
|
||
|
Динамический фомирование данных из табличной функции?
|
|||
|---|---|---|---|
|
#18+
medoed, Это не баг и не поправимо -- это ограничение, которое по каким-то причинам решили не снимать. http://www-01.ibm.com/support/docview.wss?uid=swg1JR24656] http://www-01.ibm.com/support/docview.wss?uid=swg1JR24656 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 15:41 |
|
||
|
Динамический фомирование данных из табличной функции?
|
|||
|---|---|---|---|
|
#18+
mustacciomedoed, Это не баг и не поправимо -- это ограничение, которое по каким-то причинам решили не снимать. http://www-01.ibm.com/support/docview.wss?uid=swg1JR24656] http://www-01.ibm.com/support/docview.wss?uid=swg1JR24656 Там пишут в описании: This APAR adresses current restrictions for federated object access within such nested paths. It will lift the restrictions to allow read access on these federated objects. Inserts, Update and Delete requests will continue to fail as they could cause read/write conflicts in certain situations. Я же делаю select из NickName - более того, он идет нормально к NickName в функции, траблов нет. Более того динамические запросы к таблицам тоже идут нормально в функциях... Но как только в функции использую NickName , а я его обернул в динамическом запросе - все хана - эта ошибка. Мне кажется есть шанс на спасение, какой то доступ нужен к этому NickName, но Марк молчит как рыба и другие тоже... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 16:23 |
|
||
|
Динамический фомирование данных из табличной функции?
|
|||
|---|---|---|---|
|
#18+
mustacciomedoed, Это не баг и не поправимо -- это ограничение, которое по каким-то причинам решили не снимать. http://www-01.ibm.com/support/docview.wss?uid=swg1JR24656] http://www-01.ibm.com/support/docview.wss?uid=swg1JR24656 Взял тупо вынес все из функции и закинул в обычный Statesment - и о чудо оно работает, какого рожна в функции эта конструкция не работает. Какой доступ ей нужен, напиться чтоли с горя! BEGIN DECLARE STR_PER INTEGER; DECLARE STR_EXEC VARCHAR(100); DECLARE STR_RESULT VARCHAR(200); DECLARE c1 CURSOR FOR s1; SET STR_EXEC = ' select MAX(ID_PERSON) from FORM.FUN where ID_PERSON_FUND_PARENT <50'; PREPARE s1 FROM STR_EXEC; OPEN c1; FETCH c1 INTO STR_PER; CLOSE c1; END; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 16:44 |
|
||
|
Динамический фомирование данных из табличной функции?
|
|||
|---|---|---|---|
|
#18+
medoed, В качестве обходного маневра, может функцию создать в той же системе где и таблица, а в этой системе создать маппинг этой функции CREATE FUNCTION MAPPING Предложение теоретическое, практически не проверял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 16:49 |
|
||
|
Динамический фомирование данных из табличной функции?
|
|||
|---|---|---|---|
|
#18+
Евгений Хабаровmedoed, В качестве обходного маневра, может функцию создать в той же системе где и таблица, а в этой системе создать маппинг этой функции CREATE FUNCTION MAPPING Предложение теоретическое, практически не проверял. Спасибо, за предложение, но... А если у меня источник 1-н, а получателей много(10), мне на все системы её мапить? К тому же ведь эта функция будет достаточно универсальной, а это значит функция должна за счет динамики обрабатывать запросы как от NickName так и от обычных локальных таблиц... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 16:59 |
|
||
|
Динамический фомирование данных из табличной функции?
|
|||
|---|---|---|---|
|
#18+
medoed, Уже было сказано: используйте процедуры, а не функции, если надо работать с динамическими запросами к федеративным таблицам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 17:59 |
|
||
|
Динамический фомирование данных из табличной функции?
|
|||
|---|---|---|---|
|
#18+
Mark Barinsteinmedoed, Уже было сказано: используйте процедуры, а не функции, если надо работать с динамическими запросами к федеративным таблицам. В примере выше я как раз вызываю процедуру для динамического выполнения скрипта, правда из функции. Но насколько мне известно в inline function db2 это не запрещено (вызов процедур). Архитектура не позволяет мне использовать процедуру, так как я её в конструкцию from не оберну в последующем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2013, 21:17 |
|
||
|
Динамический фомирование данных из табличной функции?
|
|||
|---|---|---|---|
|
#18+
теперь я понимаю, почему на наших, не избалованных мэйнфреймами за откаты просторах, дб2 не рулит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2013, 23:05 |
|
||
|
Динамический фомирование данных из табличной функции?
|
|||
|---|---|---|---|
|
#18+
Ggg_oldтеперь я понимаю, почему на наших, не избалованных мэйнфреймами за откаты просторах, дб2 не рулит. Каждая СУБД имеет свои особенности и ограничения. Мне, например, непонятно почему в Оракле тип VARCHAR/VARCHAR2 ограничен 4000 байт. Или почему Оракловый JDBC4-драйвер берет настройки языка/страны/территории из системы (JVM) и их невозможно поменять ни в свойствах соединения, ни иными способами. А с "неправильным" языком я не могу установить соединение с инстансом. И как быть в случае, если нужно одновременно работать с инстансами с разными локалями? Скоро буду тестировать некий софт в связке с MS SQL, подозреваю там будут свои "подводные камни". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 10:07 |
|
||
|
|

start [/forum/topic.php?fid=43&msg=38157269&tid=1601473]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
67ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 278ms |
| total: | 438ms |

| 0 / 0 |
