Функция 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;