问题:使用多态类型“anyelement”从表中返回选定的行时出错。
错误:查询结构与函数结果类型不匹配。
---表
CREATE TABLE tes1
(
rollno integer,
fname text,
lname text,
age integer,
branch text,
phno integer,
email text,
address text,
city text,
state text,
country text
)
---功能
create or replace function fun_test(column_name varchar,relation_name anyelement)
returns setof anyelement as
$body$
declare
str varchar;
grouping varchar;
additional_column varchar;
select_query varchar;
begin
if column_name='fname' then
str:=quote_ident(column_name);
additional_column:=' max("address") as addr, max("city") as cty, max("state") as st, max("country") as cntry';
grouping:='"rollno"'||','||quote_ident(column_name);
else
str:=quote_ident(column_name);
additional_column:=' max("address") as addr, max("city") as cty, max("state") as st, max("country") as cntry';
grouping:='"rollno"'||','||quote_ident(column_name);
end if;
select_query:= 'select rollno,'||str||','||additional_column||' from '||pg_typeof(relation_name)||
' group by '|| grouping;
raise info '%',select_query;
return query execute select_query;
end;
$body$
language plpgsql;
---调用函数
select * from fun_test('fname',NULL::test)
答案 0 :(得分:3)
也许是一个简单的拼写错误?
CREATE TABLE tes1
...
select * from fun_test('fname',NULL::test)
关于评论的后续行动
错误详细信息:返回的类型文本与第4列中的预期类型整数不匹配
错误信息非常明显。您需要将SELECT
语句中的第4个值转换为integer
或在类型定义中使用text
。在当前函数中,定义的类型与返回的内容之间存在更多不匹配。
答案 1 :(得分:0)
不确定,但似乎当您返回多个列时,返回类型应设置为记录。
create or replace function fun_test(column_name varchar,relation_name anyelement)
returns setof record as
...