在postgresql中使用tablename作为参数的函数

时间:2016-01-25 06:58:07

标签: postgresql plpgsql stored-functions

如何在tableg作为参数的postgresql中创建一个函数,该函数返回table的结果集,该表作为查询的参数传递" select * from TABLE"。这里的TABLE是传递给函数的参数。

1 个答案:

答案 0 :(得分:4)

你想要什么是可能的,但完全无用。

你要求的功能是:

CREATE FUNCTION selectall(tbl name) RETURNS SETOF record AS $$
BEGIN
  RETURN QUERY EXECUTE format('SELECT * FROM %I', tbl);
END; 
$$ LANGUAGE plpgsql;

您需要一个集合返回函数(SRF),因为表可能有多行。它需要返回record,因为不同的表返回不同的列集。您无法在选择列表中使用此SRF:

test=# SELECT selectall('student');
ERROR:  set-valued function called in context that cannot accept a set
CONTEXT:  PL/pgSQL function selectall(name) line 3 at RETURN QUERY

您可以将其用作行源,但查询会变得比简单SELECT * FROM student更长。您不能使用它:

test=# SELECT * FROM selectall('student');
ERROR:  a column definition list is required for functions returning "record"
LINE 1: SELECT * FROM selectall('student');

只能使用指定别名和列定义:

test=# SELECT * FROM selectall('student') AS t(id int, first_name text, col3 boolean, ...);

现在将其与:

进行比较
test=# SELECT * FROM student;