|
|
|
Помогите с функцией
|
|||
|---|---|---|---|
|
#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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. select get_min_max_rate_for_code_deck('A_Z',1619,0,'2014-08-09'::date) ERROR: set-valued function called in context that cannot accept a set CONTEXT: PL/pgSQL function get_min_max_rate_for_code_deck(character varying,integer,integer,timestamp with time zone) line 23 at RETURN NEXT ********** Ошибка ********** ERROR: set-valued function called in context that cannot accept a set SQL-состояние: 0A000 Контекст: PL/pgSQL function get_min_max_rate_for_code_deck(character varying,integer,integer,timestamp with time zone) line 23 at RETURN NEXT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2016, 23:31 |
|
||
|
Помогите с функцией
|
|||
|---|---|---|---|
|
#18+
Perederiy, Как функцию вызываете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2016, 12:10 |
|
||
|
Помогите с функцией
|
|||
|---|---|---|---|
|
#18+
Perederiy, select * FROM get_min_max_rate_for_code_deck('A_Z',1619,0,'2014-08-09'::date) не вникал. пишу что бросилось в глаза... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2016, 13:50 |
|
||
|
Помогите с функцией
|
|||
|---|---|---|---|
|
#18+
По документации, RETURN NEXT r; не заменяет RETURN - выход их функции. после end loop; можно добавить return; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2016, 17:18 |
|
||
|
Помогите с функцией
|
|||
|---|---|---|---|
|
#18+
Perederiy, Кроме отсутствия RETURN в функции, еще и её вызов не правильный. Для функций, которые возвращают SET необходимо указывать сигнатуру вывода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2016, 17:59 |
|
||
|
Помогите с функцией
|
|||
|---|---|---|---|
|
#18+
big-trotДля функций, которые возвращают SET необходимо указывать сигнатуру вывода. Не все SRF, а SETOF record, как в данном случае. Если функция возвращает таблицу, при этом также являясь SRF, то сигнатура вывода не требуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2016, 19:35 |
|
||
|
Помогите с функцией
|
|||
|---|---|---|---|
|
#18+
vyegorovНе все SRF, а SETOF record, как в данном случае. Если функция возвращает таблицу, при этом также являясь SRF, то сигнатура вывода не требуется. Конечно речь идет о рекорд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2016, 19:38 |
|
||
|
Помогите с функцией
|
|||
|---|---|---|---|
|
#18+
vyegorovbig-trotДля функций, которые возвращают SET необходимо указывать сигнатуру вывода. Не все SRF, а SETOF record, как в данном случае. Если функция возвращает таблицу, при этом также являясь SRF, то сигнатура вывода не требуется. в принципе, она ещё не требуется при той форме вызова, которую поюзал ТС Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. но вот из под plpgsql что--то у меня этот трюк не работает как и у ТС Код: sql 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. откуда какбе мораль -- то ли я забыл, как это делать именно с plpgsql (что возможно, но маловероятно). либо "что--то пошло не так" пока всё говорит за то, что д'артаньян тут стоит весь в белом [, красивая вся] с нашей с ТС стороны. думаецца. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2016, 21:21 |
|
||
|
Помогите с функцией
|
|||
|---|---|---|---|
|
#18+
qwwqно вот из под plpgsql что--то у меня этот трюк не работает как и у ТС Возможно из-за того, что оптимизатор понимает SQL функции (подсматривает, ага), а PL/pgSQL для него — черный ящик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2016, 21:26 |
|
||
|
Помогите с функцией
|
|||
|---|---|---|---|
|
#18+
vyegorovqwwqно вот из под plpgsql что--то у меня этот трюк не работает как и у ТС Возможно из-за того, что оптимизатор понимает SQL функции (подсматривает, ага), а PL/pgSQL для него — черный ящик.и поэтому разработчику (а не оптимизатору) надо накосячить с реализацией, прикрутив чек, идущий противу обычаев мочь вызывать SRF в SELECT-листе, а не только во FROM-е ? ну да, ну да, и ещё 200 причин пустить петуха что-- то я начал сомневаться, все стандартные и половину не очень в select листе вызвать можно. я кажется до существования lateral и свои самописки так вызывал. неужто не натыкался ? или всё--таки трючок есть, но немного забытый ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2016, 21:36 |
|
||
|
Помогите с функцией
|
|||
|---|---|---|---|
|
#18+
vyegorovqwwqно вот из под plpgsql что--то у меня этот трюк не работает как и у ТС Возможно из-за того, что оптимизатор понимает SQL функции (подсматривает, ага), а PL/pgSQL для него — черный ящик.более вероятно, что разраб плпгшной реализации не был знаком с пг--шными традициями возвращать SRF в SELECT листе. ну вот так -- из оракела заскочил ненадолго, и понаписал всякого разного. в свойственной ему манере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2016, 21:41 |
|
||
|
Помогите с функцией
|
|||
|---|---|---|---|
|
#18+
vyegorov, vyegorovВозможно из-за того, что оптимизатор понимает SQL функции (подсматривает, ага), а PL/pgSQL для него — черный ящик. В данном случае срабатывает инструмент inline вставки тела функции в запрос. inline вставка выполняется не всегда, в только при определенных условий. Для PL/pgSQL тоже такое возможно, но количество условий и ограничений в этом случае еще больше. См. здесь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 08:34 |
|
||
|
Помогите с функцией
|
|||
|---|---|---|---|
|
#18+
big-trot, в данном случае задокументированы все особенности (читай багофичи) реализации -- "как есть" это хороший паттерн -- документировать в стиле "так получилось" [i.e. "не шмогла"]. но это не отвечает на вопрос "как оно должно быть концептуально". (а отвечает на вопрос откуда выросли руки у а. реализаторов и б. "разъяснителей" ) всё это печально. да. инструмент ,долго и довольно честно обещавший быть концептуально более прозрачным , чем оракел, так и не добравшись до навороченности [интеллектуальности] последнего, пустился во все тяжкие в духе "старшего товаристча": "тут играем, тут не играем. а тут рыбу заворачивали" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 11:06 |
|
||
|
Помогите с функцией
|
|||
|---|---|---|---|
|
#18+
qwwq, таки плохо лежал, мало думал. наехал на, не по делу на. приношу извинения вики--писателям. вот уточнение -- это не имеет никакого отношения к инлайн разворачиванию планером Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. -- т.е. мы защитились от возможности развернуть тело в ан оно всё равно не ругается. (и не должно). потому что в тексте исподников очевидно для plpgsql что--то другое написано, чем для sql ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 11:25 |
|
||
|
Помогите с функцией
|
|||
|---|---|---|---|
|
#18+
Postgres "знает" про функции на языке SQL. Это не процедурный язык, это всё тот же SQL, к которому добавили плюшек. Поэтому функции на нём предпочтительней, т.к. оптимизатор умеет трансформировать их. В данном случае — оптимизатор банально может заменить вызов функции на подзапрос, пэтому сигнатура не нужна. Все остальные языки процедурные — запускается handler и читается то, что он вернёт. И оптимизатор никак не знает, что вернёт функция, потому сигнатуры тут — обязательны. Язык SQL стоит в стороне от остальных PL и сравнивать функции на нём с функциями на любом другом PL неправильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 11:26 |
|
||
|
Помогите с функцией
|
|||
|---|---|---|---|
|
#18+
vyegorov, не может он security definer развернуть в подзапрос для другого усера. усерится, простите. это в коде у него записано -- если усер другой -- низзя. т.е. эти отмазки не канают. а то, что для других языков "не шмогла" , и наложила куда--то лишнего -- так это просто констатация факта. вопрос лишь в том, как к оному факту относиться как к допустимому, или как к возмутительному. Мне ,как потребиелю концепций, отхождение от стройности -- возмутительно. вам, как продавцу доступа к Провалу -- это мелкая фича, скорее достойная заметания под коврик. ну так спорить об этом и не имеет смысла. -- это ваша родина, сынок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 11:35 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=39173926&tid=1997427]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
40ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
| others: | 241ms |
| total: | 370ms |

| 0 / 0 |
