|
|
|
Функция не возвращает результат , а при выполнении запроса он есть
|
|||
|---|---|---|---|
|
#18+
Доброго всем времени суток. Первый раз столкнулся с проблемой, не знаю что делать. C postgres работаю не давно до этого в основном с oracle. Там было все ясно и просто, написал запрос, работает , значит работает функция. Здесь какое то шаманство, запрос рабочий. В дебагере выполняется, возвращает результаты. Запускаю из вне pgadmin например получаю: ОШИБКА: в запросе нет назначения для данных результата HINT: Если вам нужно отбросить результаты SELECT, используйте PERFORM. CONTEXT: функция PL/pgSQL getcountpostforuadmin(character varying,integer), строка 3, оператор SQL-оператор шаманство уже не знаю что делать и в какую сторону рыть. текст функции CREATE OR REPLACE FUNCTION sam.getcountpostforuadmin ( date_start varchar, num_day integer ) RETURNS TABLE ( useradmin_id bigint, name varchar, date_crt varchar, cnt_post integer ) AS $body$ BEGIN select p.useradmin_id, u.name, date(p.date_create) as date_crt, count(p.useradmin_id) as cnt_post from post p , useradmin u where p.useradmin_id = u.id and p.date_create between to_date(date_start,'dd.mm.yyyy')-num_day and to_date(date_start,'dd.mm.yyyy') group by p.useradmin_id,u.name, date(p.date_create) order by date(p.date_create); RETURN ; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; END; $body$ LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY DEFINER COST 100 ROWS 1000; Буду благодарен за любую помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2015, 09:33 |
|
||
|
Функция не возвращает результат , а при выполнении запроса он есть
|
|||
|---|---|---|---|
|
#18+
AndryDl44, почитайте внимательно http://www.postgresql.org/docs/9.4/interactive/plpgsql-control-structures.html#PLPGSQL-STATEMENTS-RETURNING у вас просто ошибка в синтаксисе Pl/pgsql. -- Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2015, 09:52 |
|
||
|
Функция не возвращает результат , а при выполнении запроса он есть
|
|||
|---|---|---|---|
|
#18+
Спасибо конечно за ссылку. Но что то ничего напоминающего мой случай я не нашел. Там нет примера возврата таблицы. То что написал я так то же взял из доки по созданию функции возвращающей таблицу. return next и return query приводит к тому же результату , если бы все было так просто я бы не писал. Все это уже пробовалось и проверялось. Ни к чему не приводит попытка вернуть refcursor как в oracle , но там тупо ругается на составной тип и не компилится. И вопрос тогда такого плана если ошибка в синтаксисе почему компилится ? И если не трудно тыкнете пальцем в чем ошибка. Я хоть убей не вижу, сколько не перечитывай ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2015, 10:52 |
|
||
|
Функция не возвращает результат , а при выполнении запроса он есть
|
|||
|---|---|---|---|
|
#18+
То что я return воткнул выше exeption дело ни как не поправляет. После переноса в нужное место ни чего не изменилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2015, 11:02 |
|
||
|
Функция не возвращает результат , а при выполнении запроса он есть
|
|||
|---|---|---|---|
|
#18+
Главное что текст ОШИБКА: в запросе нет назначения для данных результата , а данные есть и если запрос выполнять в не тела функции все хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2015, 11:07 |
|
||
|
Функция не возвращает результат , а при выполнении запроса он есть
|
|||
|---|---|---|---|
|
#18+
AndryDl44Спасибо конечно за ссылку. Но что то ничего напоминающего мой случай я не нашел. Там нет примера возврата таблицы. То что написал я так то же взял из доки по созданию функции возвращающей таблицу. return next и return query приводит к тому же результату , если бы все было так просто я бы не писал. Все это уже пробовалось и проверялось. Ни к чему не приводит попытка вернуть refcursor как в oracle , но там тупо ругается на составной тип и не компилится. И вопрос тогда такого плана если ошибка в синтаксисе почему компилится ? И если не трудно тыкнете пальцем в чем ошибка. Я хоть убей не вижу, сколько не перечитывай Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2015, 11:13 |
|
||
|
Функция не возвращает результат , а при выполнении запроса он есть
|
|||
|---|---|---|---|
|
#18+
Работает только так. Может кому пригодится. plpgsql -в топку, убираем его убираем begin end и вуаля запрос (функция возвращает значения). CREATE OR REPLACE FUNCTION sam.getcountpostforuadmin ( date_start varchar, num_day integer ) RETURNS TABLE ( useradmin_id bigint, name varchar, date_crt date, cnt_post bigint ) AS $body$ select p.useradmin_id, u.name, date(p.date_create) as date_crt, count(p.useradmin_id) as cnt_post from post p , useradmin u where p.useradmin_id = u.id and p.date_create between to_date(date_start,'dd.mm.yyyy')-num_day and to_date(date_start,'dd.mm.yyyy') group by p.useradmin_id,u.name, date(p.date_create) order by date(p.date_create); $body$ LANGUAGE 'sql' VOLATILE CALLED ON NULL INPUT SECURITY DEFINER COST 100 ROWS 1000; А Вам Maxim Boguk уважаемый если не чего подсказать, то не надо умничать и давать бесполезные ссылки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2015, 13:57 |
|
||
|
Функция не возвращает результат , а при выполнении запроса он есть
|
|||
|---|---|---|---|
|
#18+
AndryDl44 .... А Вам Maxim Boguk уважаемый если не чего подсказать, то не надо умничать и давать бесполезные ссылки. упс вата в ассортименте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2015, 14:05 |
|
||
|
Функция не возвращает результат , а при выполнении запроса он есть
|
|||
|---|---|---|---|
|
#18+
AndryDl44А Вам Maxim Boguk уважаемый если не чего подсказать, то не надо умничать и давать бесполезные ссылки. Вам уже ответили правильным кодом. Выделяю ключевые слова (если лень залезать в документацию): BEGIN -- накопление выходного набора данных, можно выполнять несколько раз, результаты добавляются к выходному НД. RETURN QUERY select ... ; -- продолжение тела функции ... -- выход из функции и возврат накопленного НД (не обязательно, если выход совпадает с окончанием тела функции) RETURN; END P.S. можно возвращать по одной записи RETURN NEXT select ... ; или комбинировать RETURN QUERY и RETURN NEXT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 12:28 |
|
||
|
Функция не возвращает результат , а при выполнении запроса он есть
|
|||
|---|---|---|---|
|
#18+
Подскажите пожалуйста, а можно ли получить результаты select из блока выполняемого кода вне процедуры? Тут нельзя использовать RETURN авторdo $$ declare p1 int; p2 int; p3 int; begin p3 = p1+ p2; --некоторые вычисления select col2,col3, p3 from foo_table; end; $$ LANGUAGE 'plpgsql' я понимаю что для кого-то большого смысла в этом нет. Но бывают к примеру задачи когда надо сделать UPDATE произведя некоторые вычисления ну и что бы быстро посмотреть правильность UPDATE можно поменять его на SELECT . Либо надо просто получить какие либо расчетные данные с помощью SELECT и.т.д. НУ вобщем можно ли как-то получить результаты SELECT из DO $$ BEGIN END;$$ ? Мне не лень обернуть все в процедуру, просто хочется понять что не так. Почему надо указывать назначение для данных запроса. Если из функции возвращается record через RETURN NEXT то там понятно что необходимо указать столбцы при вызове, потому что record может быть любой. а тут то все однозначно - SELECT со столбцами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2015, 14:29 |
|
||
|
Функция не возвращает результат , а при выполнении запроса он есть
|
|||
|---|---|---|---|
|
#18+
tortilka, RTFM, тащемта http://www.postgresql.org/docs/current/static/sql-do.html The code block is treated as though it were the body of a function with no parameters, returning void. It is parsed and executed a single time. хинт: нотификацию [RAISE NOTICE] никто не отменял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2015, 14:42 |
|
||
|
Функция не возвращает результат , а при выполнении запроса он есть
|
|||
|---|---|---|---|
|
#18+
qwwq, Спасибо! Да, теперь понятно как это работает, хотя не совсем понятно почему именно так. И наверно у многих кто перешел с других СУБД возникал этот вопрос. RAISE NOTICE действительно выручает, им и пользуюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2015, 17:47 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38963597&tid=1997607]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
187ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 485ms |

| 0 / 0 |
