Intereting Posts
SQL Присоединение по полю, которое * может * быть пустым Shuold Я использую не существует или присоединяюсь к инструкции, чтобы отфильтровать NULL? Postgres: фильтрация результатов с использованием ARRAY_AGG и HAVING (вместо WHERE) Transact-SQL: как я токенизировать строку? Выполнение оператора sql и сохранение значения в переменной Разделить / разбить строку с разделителями-запятыми с помощью Sybase SQL Anywhere как я могу запросить базу данных SQLite с двумя условиями? SQL CTE подсчет рекурсии детей Почему запуск этого запроса с помощью EXECUTE IMMEDIATE приводит к сбою? количество студентов в каждом классе при перечислении имен классов Прикрепление базы данных к моему проекту Извлечение данных из строки sql Объединение значений записей в базе данных (MS Access) или на стороне сервера (ASP.NET) Рельсы включают в себя условия SQL-запрос для определения наличия в таблице

Функция Postgresql не возвращает таблицу при выборе

У меня есть следующая функция postgresql, в которой я пытаюсь вернуть 2 параметра с именем campusid и campusname.

CREATE OR REPLACE FUNCTION getall(IN a character varying, IN b character varying) RETURNS TABLE(id character varying, name character varying) AS $BODY$ BEGIN if $1 = 'PK' then SELECT * from table1; end if; END $BODY$ LANGUAGE plpgsql; 

Но я получаю следующую ошибку:

 ERROR: query has no destination for result data HINT: If you want to discard the results of a SELECT, use PERFORM instead. CONTEXT: PL/pgSQL function "getallcampuses" line 27 at SQL statement ********** Error ********** ERROR: query has no destination for result data SQL state: 42601 Hint: If you want to discard the results of a SELECT, use PERFORM instead. Context: PL/pgSQL function "getallcampuses" line 27 at SQL statement 

Что мне нужно изменить в функции, чтобы вернуть мне таблицу значений? Я также проверил выполнение запроса, но мне нужно вернуть результат.

У вас должен быть пункт назначения для выбора, и функция должна вернуть значение. Просто инструкция SELECT не делает ни того, ни другого. Единственное использование такого утверждения, как правило, заключается в проверке разрешений или выполнении запуска триггера, для которого результаты не используются. Вам нужно будет использовать одно из операторов RETURN для получения значений из функции.

 RETURN QUERY( SELECT * from "SIS_campus" ); 

Это добавит результаты этого запроса к возвращаемым результатам функции и будет делать то, что вам нужно, поскольку вы можете возвращать только 0 или 1 результат. Возможно, вам придется добавить простой RETURN в самом конце функции (также, несмотря на документы, я не очень разбираюсь, когда это или не нужно, я сам).