Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
многострочный результат функции
|
|||
|---|---|---|---|
|
#18+
Опять-таки, портируя код с MSSQL на Postgre, вот с чем столкнулся. У меня была в мs ф-ция, которая по заданным параметрам формировала селект, и выкидывала на выход его результат. в Постгре я не смог найти вариант, как это сделать, вопрос тут в том, как выполнить в plpgsqlной фции select * from my_table а на выходе получить результат в setof my_table? выяснилось, что plpgsqlная фция не может вызывать селект, а sqlная - не умеет юзать конструкции языка типа переменных и ветвлений (ну, последние только до from). я не прав? (ваще дивлюсь, зачем так издеваться над разработчиком?) как можно из plpgsql фции вернуть результат селекта, если это не один ров? зы: у меня родился вариант создавать в строке запрос на создачу вью, а потом его вызывать, но это два вызова, то есть придется переписывать сёвый код, а это нельзя. там четко прописан вызов хп и забор ее результата :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2007, 11:09 |
|
||
|
многострочный результат функции
|
|||
|---|---|---|---|
|
#18+
Tertium OrganumОпять-таки, портируя код с MSSQL на Postgre, вот с чем столкнулся. У меня была в мs ф-ция, которая по заданным параметрам формировала селект, и выкидывала на выход его результат. в Постгре я не смог найти вариант, как это сделать, вопрос тут в том, как выполнить в plpgsqlной фции select * from my_table а на выходе получить результат в setof my_table? выяснилось, что plpgsqlная фция не может вызывать селект, Chto-to vy ne tak ponimaete... Illustratsia to, chto select * from i vozvrashenie SETOF v PL/PgSQL vozmnozhny: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. V dannoi konkretnoi realizatsii tolko nado tolko pomnit' chto vse rez-ty zaprosa vo vremia ispolnenia PL/PGSQL'iny budut nakaplivatsia v pamiati. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2007, 11:56 |
|
||
|
многострочный результат функции
|
|||
|---|---|---|---|
|
#18+
Tertium Organumкак можно из plpgsql фции вернуть результат селекта, если это не один ров? Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2007, 12:17 |
|
||
|
многострочный результат функции
|
|||
|---|---|---|---|
|
#18+
спасибо, и правда получилось. правда пока не совсем понятно как оно работает,но и ладно. Но что значит "накапливаться"? то есть если я делаю селект от функции, получаю кортеж и закрываю соединение, там чтото висит в буфере? а если просто делается select * from mytable без фции? то результат его тоже будет в памяти или нет? то есть я хочу сказать, на сколько это страшно, что результат в памяти? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2007, 12:30 |
|
||
|
многострочный результат функции
|
|||
|---|---|---|---|
|
#18+
Tertium OrganumНо что значит "накапливаться"? то есть я хочу сказать, на сколько это страшно, что результат в памяти? Nu on nakaplivaetsia kogda idet ispolnenie "vnutrennego" selecta. T.e. PL/PgSQL'ina vyplevyvaet strochki ne po odnoi, a snachala zhdet, chto vnutrennii select poluchit vse rezultaty, i potom srazu vse vozvrashaet iz pamiati. Tak chto nichego strashnogo v etom net. Esli vy tolko ne chitaete v takom odnom selecte sotni megabyt.... Nadeus' bolee ili menee poniatno.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2007, 13:46 |
|
||
|
многострочный результат функции
|
|||
|---|---|---|---|
|
#18+
да нет, вроде там не сотни мегабайт. спасибо за ответы! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2007, 15:15 |
|
||
|
многострочный результат функции
|
|||
|---|---|---|---|
|
#18+
Tertium Organumспасибо, и правда получилось. правда пока не совсем понятно как оно работает,но и ладно. Но что значит "накапливаться"? то есть если я делаю селект от функции, получаю кортеж и закрываю соединение, там чтото висит в буфере? соединение закрыто -> процесс умер -> память фтопку а если просто делается select * from mytable без фции? то результат его тоже будет в памяти или нет? то есть я хочу сказать, на сколько это страшно, что результат в памяти? так же страшно как SELECT ... ORDER BY ... LIMIT ... OFFSET ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2007, 23:44 |
|
||
|
многострочный результат функции
|
|||
|---|---|---|---|
|
#18+
СергейК Tertium OrganumОпять-таки, портируя код с MSSQL на Postgre, вот с чем столкнулся. У меня была в мs ф-ция, которая по заданным параметрам формировала селект, и выкидывала на выход его результат. в Постгре я не смог найти вариант, как это сделать, вопрос тут в том, как выполнить в plpgsqlной фции select * from my_table а на выходе получить результат в setof my_table? выяснилось, что plpgsqlная фция не может вызывать селект, Chto-to vy ne tak ponimaete... Illustratsia to, chto select * from i vozvrashenie SETOF v PL/PgSQL vozmnozhny: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. V dannoi konkretnoi realizatsii tolko nado tolko pomnit' chto vse rez-ty zaprosa vo vremia ispolnenia PL/PGSQL'iny budut nakaplivatsia v pamiati. А как быть, если в теле функции стоит не простенький SELECT * FROM ..., а сложный запрос из нескольких таблиц, тогда что же указывать в качестве возвращаемого типа SETOF? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2007, 11:34 |
|
||
|
многострочный результат функции
|
|||
|---|---|---|---|
|
#18+
а) вы можете объявить свой тип б) начиная с 8.1 в параметрах процедуры можно явно указывать IN/OUT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2007, 08:17 |
|
||
|
многострочный результат функции
|
|||
|---|---|---|---|
|
#18+
Указанный Serik Akhmetov`ым запрос на формирование функции у меня не сработал, но сработала следующая конструкция (версия субд 8.2): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Но есть в продолжении темы вопрос: а что если я заранее не знаю сколько мне необходимо столбцов в результате, т.е., например, в зависимости от входных параметров мне необходимо вернуть либо 2, либо 5, либо набор записей из 20 столбцов? Таким образом, в принципе, можно сформировать в функции произвольный набор записей в качестве результата. Возможно ли такое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2007, 22:03 |
|
||
|
многострочный результат функции
|
|||
|---|---|---|---|
|
#18+
Прочитал документацию и понял, что мой предыдущий вопрос имеет отрицательный ответ :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2007, 16:04 |
|
||
|
многострочный результат функции
|
|||
|---|---|---|---|
|
#18+
до refcusor'ов добрались? ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2007, 17:34 |
|
||
|
многострочный результат функции
|
|||
|---|---|---|---|
|
#18+
st_sergдо refcusor'ов добрались? ) Это намек на то, что с их помощью можно реализовать то, что указано в моем вопросе? ) Если да, то не могли бы Вы привести пример. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2007, 13:29 |
|
||
|
многострочный результат функции
|
|||
|---|---|---|---|
|
#18+
в главе 37.8. Cursors см. примеры ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2007, 13:37 |
|
||
|
многострочный результат функции
|
|||
|---|---|---|---|
|
#18+
гм, както грубо получилось ) сори я имею ввиду что в конце главы приведены несколько примеров ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2007, 13:40 |
|
||
|
|

start [/forum/topic.php?fid=53&tid=2005364]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 331ms |

| 0 / 0 |
