Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Вопрос по хранимым табличным функциям
|
|||
|---|---|---|---|
|
#18+
Подскажите, какую конструкцию языка можно использовать, чтобы вернуть функцией массив строк? Функцию необходимо использовать в sql - поэтому modifies sql data использовать нельзя, соответственно, временные таблицы тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 12:10 |
|
||
|
Вопрос по хранимым табличным функциям
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 17:42 |
|
||
|
Вопрос по хранимым табличным функциям
|
|||
|---|---|---|---|
|
#18+
Hunterik, угумс, уже чайник кипит от мозгового штурма... проблема в том, что вернуть надо не результат select`а - результирующие данные фетчатся курсором и вычисляются, т.е. прежде чем их return`ить - их надо куда-то сложить. Сейчас копаюсь в pipelined functions (ответьте хоть, там ли роюсь)? и можно ли типы объявлять в самой функции или обязательно создавать их заранее пакетами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 18:16 |
|
||
|
Вопрос по хранимым табличным функциям
|
|||
|---|---|---|---|
|
#18+
Toshkin, Если версия 9.7 или новее: Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 18:29 |
|
||
|
Вопрос по хранимым табличным функциям
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein, так это по одному полю, а если их много? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 18:36 |
|
||
|
Вопрос по хранимым табличным функциям
|
|||
|---|---|---|---|
|
#18+
Toshkinтак это по одному полю, а если их много? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 21:43 |
|
||
|
Вопрос по хранимым табличным функциям
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein, не работает: create type row_IV300 as row (f1 INTEGER, f2 VARCHAR(300))@ create type arr_IV300 as nftg.row_IV300 ARRAY[]@ create or replace function test() returns table(f1 integer, f2 varchar(300)) begin atomic declare i integer default 0; declare mytab nftg.arr_IV300; for curr as select id, name from agent do set i = i + 1; set mytab[i].f1 = curr.id; set mytab[i].f2 = curr.name; end for; return select f1, f2 from UNNEST(mytab) T(f1, f2); end@ DB2 Database Error: ERROR [42601] [IBM][DB2/NT64] SQL0104N An unexpected token "set" was found following " set i = i + 1; ". Expected tokens may include: "WHILE". LINE NUMBER=9. SQLSTATE=42601 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2013, 10:20 |
|
||
|
Вопрос по хранимым табличным функциям
|
|||
|---|---|---|---|
|
#18+
Toshkin, включите поддержку оракла и пишите на pl/sql. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2013, 11:03 |
|
||
|
Вопрос по хранимым табличным функциям
|
|||
|---|---|---|---|
|
#18+
mm72Toshkin, включите поддержку оракла и пишите на pl/sql. Так? db2set DB2_COMPATIBILITY_VECTOR=ORA db2stop db2start Включил, всё равно не работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2013, 11:12 |
|
||
|
Вопрос по хранимым табличным функциям
|
|||
|---|---|---|---|
|
#18+
Toshkinне работает: Код: sql 1. 2. ... Надо через промежуточную скалярную функцию, типа: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2013, 13:25 |
|
||
|
Вопрос по хранимым табличным функциям
|
|||
|---|---|---|---|
|
#18+
Toshkin, Марк, по-моему, ошибся. DB2'шная дока как-то замалчивает, какие типы можно использовать в inlined compound SQL (какими обязаны быть табличные функции), а какие нет. Получается, что только build-in типы и ARRAY переменные тут не катят. Про compiled всё расписано (там всё можно). А что сделать то надо? Можно посмотреть на всю ф-ю целиком, как если бы эти ARRAYS там работали? Вопрос о вычислительной полноте самого SQL, вроде, закрыт, так что всё в наших руках. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2013, 13:33 |
|
||
|
Вопрос по хранимым табличным функциям
|
|||
|---|---|---|---|
|
#18+
На эту тему - http://tkyte.blogspot.ru/2006/10/slow-by-slow.html . Обобщая: некоторые вещи вообще не стоило бы заводить, потому что они постоянно используются во вред. В том числе курсоры, массивы, временные таблицы, табличные SQL-функции, никнеймы, возможность на одном instance заводить несколько баз и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2013, 14:15 |
|
||
|
Вопрос по хранимым табличным функциям
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein, Вот в таком виде это заработало: create or replace function test_row() returns nftg.arr_IV300 begin declare i integer default 0; declare mytab nftg.arr_IV300; for curr as select id, name from agent do set i = i + 1; set mytab[i].f1 = curr.id; set mytab[i].f2 = curr.name; end for; return mytab; end; create or replace function test() returns table(f1 integer, f2 varchar(300)) return select f1, f2 from unnest(nftg.test_row()) T(f1, f2) НО! Запрос вернул только первые 504 записи из многих тысяч. Можно как-то убрать это ограничение для массива или нужно искать другое решение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2013, 14:22 |
|
||
|
Вопрос по хранимым табличным функциям
|
|||
|---|---|---|---|
|
#18+
C PL/SQL разобрался - чтобы он заработал, после смены настроек сервера нужно создавать новую базу :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2013, 14:26 |
|
||
|
Вопрос по хранимым табличным функциям
|
|||
|---|---|---|---|
|
#18+
Victor Metelitsa, Прочитайте мой второй пост. Мы разбираем здесь простой пример, который, конечно, можно решить гораздо проще, но реальная задача существенно сложнее. Я перевожу базу с interbase на db2. Там около 1000 процедур. В качестве основы для перевода взят sqlways, но многое приходится допиливать руками. В частности, sqlway все конвертировал через временные таблицы, но такие функции нельзя использовать в sql. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2013, 14:31 |
|
||
|
Вопрос по хранимым табличным функциям
|
|||
|---|---|---|---|
|
#18+
ToshkinНО! Запрос вернул только первые 504 записи из многих тысяч. Можно как-то убрать это ограничение для массива или нужно искать другое решение? create type (array) по-умолчанию размерность 2 147 483 647. Это не ограничение вашего редактора - показывать только первые N записей? У вас что, select count(1) from table(test()) возвращает 504, а запрос, которым вы наполняете массив - гораздо больше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2013, 14:48 |
|
||
|
Вопрос по хранимым табличным функциям
|
|||
|---|---|---|---|
|
#18+
Mark BarinsteinToshkinНО! Запрос вернул только первые 504 записи из многих тысяч. Можно как-то убрать это ограничение для массива или нужно искать другое решение? create type (array) по-умолчанию размерность 2 147 483 647. Это не ограничение вашего редактора - показывать только первые N записей? У вас что, select count(1) from table(test()) возвращает 504, а запрос, которым вы наполняете массив - гораздо больше? Сорри, это я в каком-то месте тупанул - в таблице действительно 504 записи. Благодарю за помощь!!! Тему можно закрывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2013, 15:08 |
|
||
|
|

start [/forum/topic.php?fid=43&msg=38257362&tid=1601441]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
68ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 286ms |
| total: | 445ms |

| 0 / 0 |
