Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Может ли PosgreSQL вернуть из хранимой процедуры набор данных?
|
|||
|---|---|---|---|
|
#18+
Добрый день. Мигрировал на PostgreSQL с Oracle. Задача: из хранимой процедуры получить набор данных. Дело в том, что я использую одну и ту же хранимку как при вызове из своих exe-клиентов, так и из скриптов на PHP. И переписывать запросы логично в одно месте. В Oracle я возвращал курсор (cursor) из хранимой процедуры. Благо и компоненты прямого доступа с курсорами умели работать, и у PHP ораклёвый экстеншн это делать умел. В PostgreSQL курсор тоже вернут не проблема. Только вот мучит вопрос: и что с ним потом делать, с курсором этим? Постгресовый экстеншн с курсором не работает, в сторону PostgresDAC я пока даже не смотрел. Подозреваю, что он тоже не умеет работать с курсорами. Возникает вопрос: как из хранимки выудить набор данных, чтобы можно было спокойно его использовать из любого места. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2007, 10:50 |
|
||
|
Может ли PosgreSQL вернуть из хранимой процедуры набор данных?
|
|||
|---|---|---|---|
|
#18+
setof ps. курсоры в пг работают только в рамках транзакции, т.е. begin; юзаем курсор; commit; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2007, 11:17 |
|
||
|
Может ли PosgreSQL вернуть из хранимой процедуры набор данных?
|
|||
|---|---|---|---|
|
#18+
st_serg курсоры в пг работают только в рамках транзакции Зачем так категорично? А волшебное слово WITH HOLD ? Код: plaintext При такой декларации есть возможность использовать курсор и вне транзакции. Физически это происходит так- делается селект - и результат помещается во временный файл - который существует пока открыт курсор. Вне зависимости от транзакции вы можете навигироваться по нему как вперед , так и назад.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2007, 11:30 |
|
||
|
Может ли PosgreSQL вернуть из хранимой процедуры набор данных?
|
|||
|---|---|---|---|
|
#18+
domanixDECLARE name CURSOR WITH HOLD FOR select ... Насколько я помню, такая конструкция не возможна внутри хранимки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2007, 12:07 |
|
||
|
Может ли PosgreSQL вернуть из хранимой процедуры набор данных?
|
|||
|---|---|---|---|
|
#18+
Я так понял, что должен написать SetOf Имя_таблицы? В моём случае у меня нет таблицы. Я выбираю данные из нескольких таблиц, да ещё с использованием объединения (union). Или можно этим SetOf ещё как-нибудь воспользоваться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2007, 12:30 |
|
||
|
Может ли PosgreSQL вернуть из хранимой процедуры набор данных?
|
|||
|---|---|---|---|
|
#18+
ParamedicЯ так понял, что должен написать SetOf Имя_таблицы? В моём случае у меня нет таблицы. Я выбираю данные из нескольких таблиц, да ещё с использованием объединения (union). Или можно этим SetOf ещё как-нибудь воспользоваться? Только указывая setof_тип_данных (в вашем случае таблица). По любому, SETOF не очень хорошее решение в плане перформанса. Результат вернется только после финального RETURN (все промежуточные RETURN NEXT будут храниться в памати). Всё же очень рекомендую реализацию через refcursor'ы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2007, 12:43 |
|
||
|
Может ли PosgreSQL вернуть из хранимой процедуры набор данных?
|
|||
|---|---|---|---|
|
#18+
domanix st_serg курсоры в пг работают только в рамках транзакции Зачем так категорично? А волшебное слово WITH HOLD ? Код: plaintext При такой декларации есть возможность использовать курсор и вне транзакции. Физически это происходит так- делается селект - и результат помещается во временный файл - который существует пока открыт курсор. Вне зависимости от транзакции вы можете навигироваться по нему как вперед , так и назад.... мой косяк, про волшебное слово забыл но с рефкурсорами такой фокус, имхо, все равно не пройдет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2007, 12:46 |
|
||
|
Может ли PosgreSQL вернуть из хранимой процедуры набор данных?
|
|||
|---|---|---|---|
|
#18+
курсоры это хорошо, но как получить из него данные? В блоке pl/pgsql с ними всё понятно. А вот как вернуть набор данных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2007, 13:14 |
|
||
|
Может ли PosgreSQL вернуть из хранимой процедуры набор данных?
|
|||
|---|---|---|---|
|
#18+
Код: 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. Я ответил на вопрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2007, 14:08 |
|
||
|
Может ли PosgreSQL вернуть из хранимой процедуры набор данных?
|
|||
|---|---|---|---|
|
#18+
Paramedicкурсоры это хорошо, но как получить из него данные? В блоке pl/pgsql с ними всё понятно. А вот как вернуть набор данных? Код: 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. 29. 30. 31. 32. 33. 34. 35. 36. 37. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2007, 14:58 |
|
||
|
Может ли PosgreSQL вернуть из хранимой процедуры набор данных?
|
|||
|---|---|---|---|
|
#18+
domanix , если и ответил, то я всё равно не понял, как данные попадут за пределы pl/pgsql блока? Thamerlan , у меня уже давно написана функция, возвращающая курсор. И она его действительно возвращает. И похожий пример есть в доке на PostgrerSQL. И в psql всё работает на ура. Но фишка в том, что мне нужно получить данные не в psql, а на стороне клиента. Вот тут-то у меня и не хватает ума, чтобы догнать -- как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2007, 17:17 |
|
||
|
Может ли PosgreSQL вернуть из хранимой процедуры набор данных?
|
|||
|---|---|---|---|
|
#18+
может чтото вроде этого? pgsql_query("begin") $res1 = pgsql_query("select func() ") // получаем имя курсора $res2 = pgsql_query("fetch all from \"полчученное имя курсора\"") pgsql_query("commit") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2007, 17:25 |
|
||
|
Может ли PosgreSQL вернуть из хранимой процедуры набор данных?
|
|||
|---|---|---|---|
|
#18+
Ну я пробовал вот так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Ничего не выводит, хотя должно быть 11 записей. Да, и ещё pg_free_result($res); жалуется, что $res не валидный ресурс. Попробую переписать по строке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2007, 17:36 |
|
||
|
Может ли PosgreSQL вернуть из хранимой процедуры набор данных?
|
|||
|---|---|---|---|
|
#18+
Не совсем понимаю в чем проблема? Ну, напрмер, в Delphi это будет что-то типа: dbconnection.start_transaction; query1.sql:='SELECT * FROM fnc_get_data ()'; query1.open; any_string_var := query1.getvaluebycolumnname('fnc_get_data').asstring; query1.close; query1.sql:='FETCH FORWARD 5 FROM "'+some_var+'"'; query1.open; Ну и далее как обычно с селектом: while not query1.eof do ... P.s. За точную правильность кода не ручаюсь, delphi под рукой нет ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2007, 17:42 |
|
||
|
Может ли PosgreSQL вернуть из хранимой процедуры набор данных?
|
|||
|---|---|---|---|
|
#18+
ParamedicНу я пробовал вот так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Ничего не выводит, хотя должно быть 11 записей. Да, и ещё pg_free_result($res); жалуется, что $res не валидный ресурс. Попробую переписать по строке. Ну это точно не правильно. Во первых что есть cur1? Во вторых вы закрываете транзакцию коммитом до pg_fetch_array ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2007, 17:45 |
|
||
|
Может ли PosgreSQL вернуть из хранимой процедуры набор данных?
|
|||
|---|---|---|---|
|
#18+
cur1 -- это поименованный курсор. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2007, 17:55 |
|
||
|
Может ли PosgreSQL вернуть из хранимой процедуры набор данных?
|
|||
|---|---|---|---|
|
#18+
ЙОУ!!!! Благодарю. Оно работает :) Переписал вот так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Всем участникам от меня по пиву. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2007, 18:00 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=296&tid=2005406]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 253ms |
| total: | 384ms |

| 0 / 0 |
