我需要创建一个函数来运行一个查询,并返回结果,并将表名称和列名称赋予函数.我目前有这个:
CREATE OR REPLACE FUNCTION qa_scf(tname character varying,cname character varying) RETURNS SETOF INT AS $BODY$ BEGIN RETURN QUERY SELECT * FROM tname WHERE cname !='AK' AND cname!='CK'; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100 ROWS 1000;
这给我的错误“关系”tname“不存在”运行时.我是新的功能创建Postgres,所以任何帮助是赞赏.我觉得return int是错误的,但是我不知道还有什么要让返回的行返回所有的列.谢谢!
解决方法
您不能使用变量代替这样的标识符.您需要使用动态查询.它看起来像这样:
EXECUTE 'SELECT * FROM ' || quote_ident(tname) || ' WHERE ' || quote_ident(cname) || ' NOT IN (''AK'',''CK'');' INTO result_var;
如果您使用Postgresql 9.1或更高版本,您可以使用the format() function,使构建此字符串更容易.