mrg*_*mrg 1 postgresql plpgsql stored-functions
如何在 postgresql 中创建一个以表名作为参数的函数,该函数返回作为查询“select * from TABLE”的参数传递的表的结果集。这里的 TABLE 是传递给函数的参数。
你想要的东西是可能的,但完全没有用。
您要求的功能是这样的:
CREATE FUNCTION selectall(tbl name) RETURNS SETOF record AS $$
BEGIN
RETURN QUERY EXECUTE format('SELECT * FROM %I', tbl);
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
您需要一个集合返回函数 (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
Run Code Online (Sandbox Code Playgroud)
您可以将其用作行源,但查询会变得比简单的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');
Run Code Online (Sandbox Code Playgroud)
您只能通过指定别名和列定义来使用它:
test=# SELECT * FROM selectall('student') AS t(id int, first_name text, col3 boolean, ...);
Run Code Online (Sandbox Code Playgroud)
现在将其与:
test=# SELECT * FROM student;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2181 次 |
| 最近记录: |