|
Perform в запрсе с With внутри функции
|
|||
---|---|---|---|
#18+
Здесь foo - функция не возвращающая значений Я для себя нашёл такое решение (то есть используется костыль в виде select count(*) into i ): Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Выглядит не слишком кошерно, но работает. Кто-нибудь может подсказать более красивое решение? И ещё - в документации есть такая фраза: Для запросов WITH после PERFORM нужно поместить запрос в скобки. Можете объяснить о чём речь? Приведите пример запроса ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2021, 22:14 |
|
Perform в запрсе с With внутри функции
|
|||
---|---|---|---|
#18+
Kr_Yury, PERFORM ( WITH .... ) ; ровно как в документации написано. Т.е. вашем случае наверное Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
-- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2021, 12:54 |
|
Perform в запрсе с With внутри функции
|
|||
---|---|---|---|
#18+
Maxim Boguk, во первых из документации совсем не следует, что конструкция должна быть именно такой: PERFORM ( WITH .... ) ; Я эту фразу понял как Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Но и приведенная конструкция при использовании в Pl/Pgsql функции не работает, возвращается ошибка "WITH clause containing a data-modifying statement must be at the top level" ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2021, 12:36 |
|
Perform в запрсе с With внутри функции
|
|||
---|---|---|---|
#18+
И самое поганое с функциями, не возвращающими значение, что конструкция Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
выполняется без ошибок, но реально вызовы foo не выполняются. По крайней мере так работает в версии 10.10 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2021, 12:43 |
|
Perform в запрсе с With внутри функции
|
|||
---|---|---|---|
#18+
Kr_Yury Maxim Boguk, во первых из документации совсем не следует, что конструкция должна быть именно такой: PERFORM ( WITH .... ) ; Я эту фразу понял как[src PLSQL] Уж сколько раз писали не читать русскую (или любую другую переводную) документацию... а только английский оригинал. В английском все однозначно This executes query and discards the result. Write the query the same way you would write an SQL SELECT command, but replace the initial keyword SELECT with PERFORM. For WITH queries, use PERFORM and then place the query in parentheses. (In this case, the query can only return one row.) -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2021, 13:08 |
|
Perform в запрсе с With внутри функции
|
|||
---|---|---|---|
#18+
Kr_Yury, Как ни странно тот синтаксис к которому вы пришли в итоге в первом посте - единственный рабочий на данный момент. Я и сам не знал что PERFORM / WITH с DML - не работают в связке. Так что вот только так как вы сделали. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2021, 13:33 |
|
|
start [/forum/topic.php?fid=53&msg=40045409&tid=1994194]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 256ms |
total: | 380ms |
0 / 0 |