函数返回表

时间:2012-05-10 11:31:03

标签: plpgsql

我想要一个plpgsql函数,它返回给定名称的任何表的内容。下面的功能虽然因为很多原因而无法正常工作,但会让你了解一般的想法。除了安全和编码实践,最简单的方法是什么?

最后,我希望通过Java CallableStatement获得这些结果。

CREATE OR REPLACE FUNCTION get_table(tablename VARCHAR)
RETURNS SETOF RECORD AS $PROC$
BEGIN
    RETURN QUERY SELECT * FROM tablename;
END;
$PROC$ LANGUAGE 'plpgsql';

1 个答案:

答案 0 :(得分:3)

你可以让你的功能像这样工作:

CREATE OR REPLACE FUNCTION get_table(tablename VARCHAR)
RETURNS SETOF RECORD AS $PROC$
BEGIN
    RETURN QUERY EXECUTE 'SELECT * FROM ' || quote_ident(tablename);
END;
$PROC$ LANGUAGE 'plpgsql';

要调用它,必须为所有返回的列指定名称和数据类型。如果你想列出表格" t"它有两列,您可以使用这样的函数:

SELECT * FROM get_table('t') x(id int, val text);

当然,这比其中任何一个更长,更麻烦:

SELECT * FROM t;

或同等的:

TABLE t;

我真的无法想象这样一个功能会让事情变得更好的用例。