|
Как вернуть из функции набор данных + свои данные
|
|||
---|---|---|---|
#18+
Здравствуйте! Работаю с Firebird, но возникла задача импортировать данные из БД PostrgreSQL в Firebird. Решил сделать функцию в БД PostrgreSQL. Нужно вернуть значения полей набора данных по запросу с джойнами, для каждой записи выполнять другие запросы для несвязанных данных, обрабатывать и результат этих вычислений тоже помещать в возвращаемые переменные для каждой записи. В PostrgreSQL новичок, не могу понять, какой тип возвращаемых данных выбрать для функции и какой подход лучше использовать. Если делать через RETURNS TABLE, то не могу добавить в возвращаемый набор произвольные поля, не входящие в запрос. Та же история с SETOF <tablename>. Записывать данные во временную таблицу, а затем из нее выбирать, не вариант, наверное. Выборка по временным периодам, которые из клиента будут задаваться как параметры и придется на каждый чих прибивать таблицу и генерить новую с последующей выборкой. Через курсоры? Как тогда возвращать? Клиент на Дельфях, связка обычная - датасет->датасоурс->грид. Вроде как должно быть все просто, но вчера полдня потратил а воз не сдвинулся. После Firebird возможностей очень много, а того, что мне нужно, найти не получилось. Хелп, плз. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2020, 08:58 |
|
Как вернуть из функции набор данных + свои данные
|
|||
---|---|---|---|
#18+
>SansAmp, сегодня, 08:58 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1326764&msg=22156937][22156937] >...Нужно вернуть значения полей набора данных по запросу… < Попробуй использовать refcursor, как то так: (см. слаид) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2020, 09:31 |
|
Как вернуть из функции набор данных + свои данные
|
|||
---|---|---|---|
#18+
Это не решает задачу, я опять получу только поля, определенные в запросе курсора, а нужно произвольные вернуть. В качестве примера все упростил, запрос с джойнами и возвращаемых полей поболее будет и в цикле много логики, но суть понятна. Получилось вот так: Код: plsql 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.
Это оптимально для такой задачи? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2020, 14:39 |
|
|
start [/forum/topic.php?fid=53&msg=39973007&tid=1994627]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 139ms |
0 / 0 |