加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – Postgres动态查询功能

发布时间:2020-12-12 08:46:59 所属栏目:MsSql教程 来源:网络整理
导读:我需要创建一个函数来运行一个查询,并返回结果,并将表名称和列名称赋予函数.我目前有这个: CREATE OR REPLACE FUNCTION qa_scf(tname character varying,cname character varying)RETURNS SETOF INT AS$BODY$BEGINRETURN QUERY SELECT * FROM tname WHERE cn
我需要创建一个函数来运行一个查询,并返回结果,并将表名称和列名称赋予函数.我目前有这个:
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,使构建此字符串更容易.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读