sql – Postgres动态查询功能

前端之家收集整理的这篇文章主要介绍了sql – Postgres动态查询功能前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要创建一个函数来运行一个查询,并返回结果,并将表名称和列名称赋予函数.我目前有这个:
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,使构建此字符串更容易.

猜你在找的MsSQL相关文章