Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
с# + Хранимые процедуры (plpgsql)
|
|||
|---|---|---|---|
|
#18+
Преамбула: Есть приложение c# + хранимые процедуры СУБД (MSSQL, Oracle). Одной из функций приложения является получение выборок из базы через хранимые процедуры. С MSSQL все просто получаем из хранимых обычные селекты и парсим их. В случае с Oracle возвращаем sys_refcursor и так же парсим по полям. А вот при переводе на PostgreSQL встал в ступор. Судя по форуму и документации возможностей извлечения данных имеется несколько: 1. возвращать select *... через 'sql' - отбросил сразу, т.к. plpgsql заметно функциональнее и неплохо бы эту функциональность использовать, к тому же результат выходит сплошным текстовым полем, что не очень удобно. 2. возвращать refcursor. - был очень удивлен, что возвращается лишь одна строка с фактическим названием курсора и для работы необходима дальнейшаа обработка через fetch, что не очень удобно. 3. возвращать setof record. - это кажется самый оптимальный путь. Один большой вопрос - можно ли описать record внутри самой функции (что-то примеры не попадались), а то делать внешний селект к функции не очень удобно, т.к. в неё передаются параметры (через NpgsqlCommand). Если данная опция возможна - будьте добры кусочек кода! 4. получение результатов запроса через return query (установлена версия 8.3, так что вариант должен работать) - что-то не удалось победить синтаксис. ругается на то, что не описан "record" как я понимаю данный способ чем, то перекликается с предыдущим, только синтаксис более читабельный. Было бы очень неплохо получить небольшой примерчик по каждому из способов. Заранее благодарен! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2008, 11:24 |
|
||
|
с# + Хранимые процедуры (plpgsql)
|
|||
|---|---|---|---|
|
#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. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2008, 11:49 |
|
||
|
с# + Хранимые процедуры (plpgsql)
|
|||
|---|---|---|---|
|
#18+
Спасибо! Не очень красиво, но работает) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2008, 20:20 |
|
||
|
с# + Хранимые процедуры (plpgsql)
|
|||
|---|---|---|---|
|
#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. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2008, 16:21 |
|
||
|
с# + Хранимые процедуры (plpgsql)
|
|||
|---|---|---|---|
|
#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. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2008, 13:14 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=35454795&tid=2004094]: |
0ms |
get settings: |
10ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
77ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 288ms |
| total: | 462ms |

| 0 / 0 |
