Функция Postgres возвращает таблицу, не возвращающую данные в Столбцах
у меня есть функция Postgres, которая возвращает таблицу:
CREATE OR REPLACE FUNCTION testFunction() RETURNS TABLE(a int, b int) AS
$BODY$
DECLARE a int DEFAULT 0;
DECLARE b int DEFAULT 0;
BEGIN
CREATE TABLE tempTable AS SELECT a, b;
RETURN QUERY SELECT * FROM tempTable;
DROP TABLE tempTable;
END;
$BODY$
LANGUAGE plpgsql;
эта функция не возвращает данные в форме строки и столбца. Вместо этого он возвращает данные как:
(0,0)
это вызывает проблему в блоке ColdFusion cfquery при извлечении данных. Как получить данные в строках и столбцах, когда таблица возвращается из этой функции? Другими словами: Почему функция PL/pgSQL не возвращает данные в виде столбцов?
1 ответов
чтобы получить отдельные столбцы вместо строк, вызов функции:
SELECT * FROM testfunction();
как выбрать все столбцы из таблицы.
Также рассмотрите эту пересмотренную форму вашей тестовой функции:
CREATE OR REPLACE FUNCTION testfunction()
RETURNS TABLE(a int, b int) AS
$func$
DECLARE
_a int := 0;
_b int := 0;
BEGIN
CREATE TEMP TABLE tbl AS SELECT _a, _b;
RETURN QUERY SELECT * FROM tbl;
DROP TABLE tempTable;
END
$func$ LANGUAGE plpgsql;
в частности:
-
DECLARE
ключевое слово требуется только один раз. - избегайте объявления параметров, которые уже (неявно) объявлены как
OUT
параметрыRETURNS TABLE (...)
предложения. - не использовать unquoted CaMeL-идентификаторы регистра в Postgres. Он работает, без кавычек идентификаторы приведены в нижнем регистре, но это приводит к запутанным ошибкам. Видеть
временная таблица полностью бесполезна в примере (возможно, чрезмерно упрощена). Вы могли бы сократить до:
CREATE OR REPLACE FUNCTION testfunction(OUT a int, OUT b int) AS
$func$
BEGIN
a := 0;
b := 0;
END
$func$ LANGUAGE plpgsql;