如何在tableg作为参数的postgresql中创建一个函数,该函数返回table的结果集,该表作为查询的参数传递" select * from TABLE"。这里的TABLE是传递给函数的参数。
答案 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;