我有一个返回表的 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 block 在提取数据时出现问题。从此函数返回表时,如何获取行和列中的数据?换句话说:为什么 PL/pgSQL 函数不以列的形式返回数据?
最佳答案
要获取单个列而不是行类型,请调用函数:
SELECT * FROM testfunction();
就像您从表格中选择所有列一样。
还要考虑这种经过审查的测试功能形式:
CREATE OR REPLACE FUNCTION testfunction()
RETURNS TABLE(a int, b int)
LANGUAGE plpgsql AS
$func$
DECLARE
_a int := 0;
_b int := 0;
BEGIN
CREATE TABLE tempTable AS SELECT _a, _b;
RETURN QUERY SELECT * FROM tempTable;
DROP TABLE tempTable;
END
$func$;
特别是:
DECLARE
关键字只需要一次。
避免在 RETURNS TABLE (...)
子句中声明已经(隐式)声明为 OUT
参数的参数。
不要在 Postgres 中使用不带引号的 CaMeL 大小写标识符。它有效,未加引号的标识符被转换为小写,但它会导致混淆错误。见:
示例中的临时表完全没有用(可能过于简化)。给出的示例归结为:
CREATE OR REPLACE FUNCTION testfunction(OUT a int, OUT b int)
LANGUAGE plpgsql AS
$func$
BEGIN
a := 0;
b := 0;
END
$func$;
关于sql - Postgres函数返回表不返回列中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14628771/