PostgreSQL:如何在不使用“列定义列表"的情况下从表返回动态行? [英] PostgreSQL: How to return dynamic rows from table without using "column definition list"?
本文介绍了PostgreSQL:如何在不使用“列定义列表"的情况下从表返回动态行?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何在不使用列定义列表"的情况下从表中动态检索行?
How to retrieve rows from table dynamically without using "column definition list"?
我正在尝试通过使用多态类型"anyelement"(伪类型)来做同样的事情,但是出现错误查询的结构与函数结果类型不匹配".
I am trying to do same by using polymorphic type "anyelement"(pseudo type) but getting error "structure of query does not match function result type".
例如:我有一个名为"table1"的表,其中包含以下详细信息.
For example: I have table called "table1" which consist of following details.
-表
create table table1
(
slno integer,
fname varchar,
lname varchar,
city varchar,
country varchar
)
-功能
create or replace function function1(column_name varchar,relation_name anyelement)
returns setof anyelement as
$fun$
declare
cname varchar;
add_column varchar;
group_column varchar;
select_query varchar;
begin
if column_name='fname' then
cname:=quote_ident(column_name);
add_column:='"city"'||','||'"country"';
group_column:='"slno"'||','||cname||','||'"city"'||','||'"country"';
else
cname:=quote_ident(column_name);
add_column:='"city"'||','||'"country"';
group_column:='"slno"'||','||cname||','||'"city"'||','||'"country"';
end if;
select_query:='select slno,'||cname||','||add_column||' from '||pg_typeof(relation_name) || 'group by '||group_column;
return query execute select_query;
end;
$fun$
language plpgsql;
---函数调用
select * from function1('fname',NULL::table1);
推荐答案
查看全文