Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Поможите плиз ERROR: SELECT query has no destination for result data
|
|||
|---|---|---|---|
|
#18+
Вопрос к гуру или к тем, кто наступал уже на это. Почему при выборке из функции SELECT * FROM getscheduledata();, база ругается ERROR: SELECT query has no destination for result data код далее Код: 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. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2004, 15:24 |
|
||
|
Поможите плиз ERROR: SELECT query has no destination for result data
|
|||
|---|---|---|---|
|
#18+
Вот так попробуй SELECT getscheduledata(); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2004, 17:08 |
|
||
|
Поможите плиз ERROR: SELECT query has no destination for result data
|
|||
|---|---|---|---|
|
#18+
Неее, не работает - та же ошибка ERROR: SELECT query has no destination for result data ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2004, 17:58 |
|
||
|
Поможите плиз ERROR: SELECT query has no destination for result data
|
|||
|---|---|---|---|
|
#18+
тут уже обсуждалось - при возвращение record нужно вызывать как select * from f(x,y) as (a int2,b text,c varchar) иначе как парсер поймет какого типа данные на выход отправлять. неудобно, но афаик это единственный способ возвращать различные выборки с разным сожержимым ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2004, 20:31 |
|
||
|
Поможите плиз ERROR: SELECT query has no destination for result data
|
|||
|---|---|---|---|
|
#18+
ps - вроде как по функции планируешь возвращать набор типа www_type а сам в функции возвращаешь record var_rec ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2004, 20:33 |
|
||
|
Поможите плиз ERROR: SELECT query has no destination for result data
|
|||
|---|---|---|---|
|
#18+
Как ты заметил, у меня на выходе www_type а не record и то что ты рекомендуешь выдает в моем случае вот такую ошибку ERROR: a column definition list is only allowed for functions returning "record" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 11:44 |
|
||
|
Поможите плиз ERROR: SELECT query has no destination for result data
|
|||
|---|---|---|---|
|
#18+
А если я выставляю все таки RECORD и использую вывод типа SELECT * FROM "getwwwdata"() AS data(...) то получаю опять эту ошибку ERROR: SELECT query has no destination for result data ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 11:50 |
|
||
|
Поможите плиз ERROR: SELECT query has no destination for result data
|
|||
|---|---|---|---|
|
#18+
Хмм.. посмотрел свои коды - у меня так только с Language 'sql' сделано... по твоему коду не совсем ясно вот что 1. SELECT object_id FROM www_temp WHERE step=i-1; раз у тебя pgsql - будь добр выбирать куда либо - попробуй declare xxx type.xxx ... select into xxx object_id FROM www_temp WHERE step=i-1; if xxx 2. повторюсь - ты объявляешь что будешь возвращать тип ВВВ, а возвращаешь рекорд... думаю (не на чем проверить ща) тут будет затык - рекорд вряд ли автоматически преобразуется к ВВВ, т.е. тебе нужно или объявлять переменную типа ВВВ и в цикле ее заполнять и возвращать, или возвращать из функции рекорд ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 12:01 |
|
||
|
Поможите плиз ERROR: SELECT query has no destination for result data
|
|||
|---|---|---|---|
|
#18+
centurтут уже обсуждалось - при возвращение record нужно вызывать как select * from f(x,y) as (a int2,b text,c varchar) иначе как парсер поймет какого типа данные на выход отправлять. неудобно, но афаик это единственный способ возвращать различные выборки с разным сожержимым Может чё пропустил, но где это обсуждалось? Так вот такое Код: plaintext 1. 2. Дальше. Объясните мне назначение последнего RETURN перед END Код: plaintext 1. 2. 3. 4. И второе - пропиши на всяк случай тип var_rec не RECORD, а www_type - и понятнее и правильнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 12:59 |
|
||
|
Поможите плиз ERROR: SELECT query has no destination for result data
|
|||
|---|---|---|---|
|
#18+
не понимаю, че обсуждает народ. 1. Наименование ф-ции в SELECT * FROM getscheduledata(); не совпадает с таковым в CREATE OR REPLACE FUNCTION getwwwdata() т.ч. некоторым сыршенно не яасно, а таа ли вообще-тто этто функция? 2. Определение таблиц, участвующих в функции в коде не приведено - запустить проверку у себя, даже в предположении, что ф-я одна и та же, вряд ли кто сможет. 3. Ну и непонятно, зачем тип возврата определяется как (вообще) рекорд внутри, но как конкретный тип - в объявлении. Чаго этим добивается автор в данном конкретном случае? Что это ему дает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 14:02 |
|
||
|
Поможите плиз ERROR: SELECT query has no destination for result data
|
|||
|---|---|---|---|
|
#18+
43211. Наименование ф-ции в SELECT * FROM getscheduledata(); не совпадает с таковым в CREATE OR REPLACE FUNCTION getwwwdata() т.ч. некоторым сыршенно не яасно, а таа ли вообще-тто этто функция? рабочая функция - getscheduledata(); для теста переименовал в getwwwdata() так что тут не важно какая функция пробовал объявление типа внутри функции типа var_rec www_type; в EMS PostgreSQL при дебаге кричит на все это дело, потом пишу var_rec www_type%ROWTYPE - работает, но при селекте все та же ошибка :( mwolf LOOP RETURN NEXT var_rec; END LOOP; RETURN; -- <-- это зачем??? END;'; в доке сказано делайте так, первый ретурн возвращает строки по одной, второй ретурн говорит функции что она завершина, это как я понял, точной формулировки не скажу в примерах еще встречал второй ретурн типа RETURL null; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 14:29 |
|
||
|
Поможите плиз ERROR: SELECT query has no destination for result data
|
|||
|---|---|---|---|
|
#18+
centur1. SELECT object_id FROM www_temp WHERE step=i-1; раз у тебя pgsql - будь добр выбирать куда либо - попробуй declare xxx type.xxx ... select into xxx object_id FROM www_temp WHERE step=i-1; if xxx а зачем мне еще один тип объявлять? я проверяю при предыдущей итерации что-то выбролось, пора ли остановиться? мне хранить эти данные не нужно! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 14:33 |
|
||
|
Поможите плиз ERROR: SELECT query has no destination for result data
|
|||
|---|---|---|---|
|
#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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 14:39 |
|
||
|
Поможите плиз ERROR: SELECT query has no destination for result data
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. Код: plaintext Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 16:01 |
|
||
|
Поможите плиз ERROR: SELECT query has no destination for result data
|
|||
|---|---|---|---|
|
#18+
Я использовал для возврата переменную типа ROWTYPE. Для вызова функций используется: select * from func(x,y); если функция возвращает одно или более значение, и : select func(x,y); если возвращает одно значение. И еще вопрос, а версия постгреса у вас точно поддерживает возврат множественного результата? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 19:54 |
|
||
|
Поможите плиз ERROR: SELECT query has no destination for result data
|
|||
|---|---|---|---|
|
#18+
Версия PostgreSQL 7.4.6 on i386-portbld-freebsd4.9, compiled by GCC 2.95.4 Есть еще предложения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2004, 12:12 |
|
||
|
Поможите плиз ERROR: SELECT query has no destination for result data
|
|||
|---|---|---|---|
|
#18+
Да, я похоже соврамши про причину ошибки, - т.к. Код: plaintext Но прходит кажется следующее: Код: plaintext т.е. причина ошибки на самом деле в том, что вы не делаете SELECT INTO Note: One might expect that SELECT with no INTO clause would accomplish this result, but at present the only accepted way to do it is PERFORM. там же: Sometimes one wishes to evaluate an expression or query but discard the result (typically because one is calling a function that has useful side-effects but no useful result value). To do this in PL/pgSQL, use the PERFORM statement: PERFORM query; This executes query, which must be a SELECT statement, and discards the result. PL/pgSQL variables are substituted in the query as usual. Also, the special variable FOUND is set to true if the query produced at least one row or false if it produced no rows. еще раз мои извинения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2004, 12:14 |
|
||
|
Поможите плиз ERROR: SELECT query has no destination for result data
|
|||
|---|---|---|---|
|
#18+
Спасибо 4321SELECT object_id FROM www_temp WHERE step=i-1; Дело в том, что EMS 2 не ругается на такие ошибки при дебаге функции и отрабатывает все на ура Запустил все это дело из консоли и действительно увидел эту ошибку Код: plaintext 1. 2. 3. 4. Код: plaintext 4321PERFORM (SELECT object_id FROM www_temp WHERE step=(i-1)); Мне нравиться больше, по своей красоте :) Если нет доступа через консоль, какое средство в разработке будет отрабатывать коректно, а то что-то EMS2 меня разочаровал!? Ты чем пользовался для дебага? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2004, 12:34 |
|
||
|
Поможите плиз ERROR: SELECT query has no destination for result data
|
|||
|---|---|---|---|
|
#18+
Только что проверил вариант Код: plaintext 1. 2. 3. 4. Код: plaintext Не объясните в чем разница? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2004, 12:40 |
|
||
|
Поможите плиз ERROR: SELECT query has no destination for result data
|
|||
|---|---|---|---|
|
#18+
Запускал через PgAdminIII, но и он не без проблем - иногда сам падает при ошибках (видимо не все возвраты нормально съедает). В этих случаях просылаю через MSAccess (+ODBC) - пишу в окно запросов SQL запрос к серверу, в св-ва запроса - строку подключения - "ODBC;DRIVER={PostgreSQL Legacy};DATABASE=test;SERVER=ххх.ххх.ххх.ххх;PORT=хххх" И запущаю - вроде не падает, и ошибку можно прочесть. По поводу разницы - не знаю. Есть предположение, что должен по "идеалогическим соображениям" работать "правильно" PERFORM SELECT object_id FROM www_temp WHERE step=(i-1); но он не работает. Почему - не понял. (скудно в доке с этим) В случае PERFORM (SELECT ....) ; SELECT ххх - это видимо уже подзапрос а "(SELECT ....)" - соответственно выражение, долженствующее (?) вернуть одно (не более одного) значение (запись?). Вот и ругается. (Если нароешь в доке подробные указания - прошли ссылки). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2004, 14:51 |
|
||
|
Поможите плиз ERROR: SELECT query has no destination for result data
|
|||
|---|---|---|---|
|
#18+
ну собственно как и говорилось - SELECT INTO... но проверьте еще такой момент - то ли перформ то ли execute НЕ устанавливают переменную FOUND , т.е. в FOUND лежит то что установилось предыдущими выборками... проверьте в вашей ситуации конструкцией типа perform (select * from xxx where нереальные условия) и проверьте FOUND.. именно после этих граблей я предпочитаю выбирать во что-то и проверять конкретный параметр, береженного бог бережет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2004, 21:43 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=350&tid=2007562]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
26ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
81ms |
get tp. blocked users: |
2ms |
| others: | 260ms |
| total: | 407ms |

| 0 / 0 |
