SQL 错误 [42804]:错误:查询结构与函数结果类型不匹配

问题描述 投票:0回答:1
CREATE OR REPLACE FUNCTION display_columns_data(table_name varchar, columns_to_display varchar[])
RETURNS TABLE (result_row json) AS
$$
BEGIN
    RETURN QUERY EXECUTE
    'SELECT ' || array_to_string(columns_to_display, ',') || ' FROM ' || table_name;
END;
$$
LANGUAGE plpgsql;
SELECT * FROM display_columns_data('employees', ARRAY['first_name', 'last_name']);

详细信息:返回的类型字符不同(20)与第 1 列中的预期类型 json 不匹配。 其中:SQL 语句“SELECT first_name,last_name FROMEmployees” PL/pgSQL 函数 display_columns_data(character Var变量,character Var变量[]) 第 3 行位于 RETURN QUERY

postgresql parameter-passing plpgsql set-returning-functions
1个回答
0
投票

该方法内的 SQL 查询返回一个结果集,其中包含字符变化(20)或字符串类型的列,这就是您遇到问题的原因。函数 display_columns_data 旨在返回具有 json 类型的单列的表。该问题是由定义的返回类型与实际结果集之间的差异引起的。

尝试使用此代码来定义函数;

CREATE OR REPLACE FUNCTION display_columns_data(table_name varchar, columns_to_display varchar[])
RETURNS TABLE (result_row record) AS
$$
BEGIN
    RETURN QUERY EXECUTE
    'SELECT ' || array_to_string(columns_to_display, ',') || ' FROM ' || table_name;
END;
$$
LANGUAGE plpgsql;

上述代码中的 RETURNS TABLE 子句指定该函数应生成一个包含名为 result_row 且类型为 record 的单列的表。这将与动态 SQL 查询生成的结果集相匹配,该结果集可能具有不同类型的列,具体取决于输入要显示的列。

希望它有效:)

© www.soinside.com 2019 - 2024. All rights reserved.