1

我想要一个 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';
4

1 回答 1

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;

我真的无法想象这样的功能可以使任何事情变得更好的用例。

于 2012-05-10T17:58:15.283 回答