【发布时间】:2016-03-02 17:57:14
【问题描述】:
我在这里看到过类似的帖子,但我的情况与我目前发现的情况略有不同。我正在尝试使用参数调用 postgres 函数,因为它们与 jsonb 查询有关,所以我可以在函数逻辑中利用这些参数。这是我尝试使用参数重新创建的查询示例。
SELECT *
from edit_data
where ( "json_field"#>'{Attributes}' )::jsonb @>
'{"issue_description":"**my description**",
"reporter_email":"**user@generic.com**"}'::jsonb
我可以在 PGAdmin 中很好地运行此查询,但到目前为止,我所有尝试在带有“my description”和“user@generic.com”值参数的函数内运行它的尝试都失败了。这是我正在尝试创建的函数的一个简单示例:
CREATE OR REPLACE FUNCTION get_Features(
p1 character varying,
p2 character varying)
RETURNS SETOF edit_metadata AS
$BODY$
SELECT * from edit_metadata where ("geo_json"#>'{Attributes}' )::jsonb @> '{"issue_description":**$p1**, "reporter_email":**$p2**}'::jsonb;
$BODY$
LANGUAGE sql VOLATILE
COST 100
ROWS 1000;
我知道语法不正确,我为此苦苦挣扎了一两天。谁能帮我理解如何最好地处理这些值周围的双引号并在此处利用参数?
TIA
【问题讨论】:
-
它是一个字符串,只要像
'{"issue_description":"'||yourParam||'"这样连接它。 -
我也尝试了一些类似的方法: CREATE OR REPLACE FUNCTION get_customentitywithserializeddatatest7( p1 字符变化,p2 字符变化) RETURNS SETOF edit_metadata AS $BODY$ SELECT * from edit_metadata where ( "geo_json"#>' {属性}')::jsonb @> '{"issue_description":COALESCE($1, issue_description), "reporter_email":COALESCE($2, report_email)}'::jsonb; $BODY$ LANGUAGE sql VOLATILE COST 100 ROWS 1000;
-
你还是不明白,这个
'{"issue_description":"**my description**", "reporter_email":"**user@generic.com**"}'是一个字符串,所以你不能在里面使用函数、命令或变量,希望postgresql能理解,它不是PHP,你必须对它说你正在形成一个新的字符串。它应该像(对于你的情况):'{"issue_description":"'||p1||'", "reporter_email":"'||p2||'"}'这样你就告诉 postgresql 你想在你的字符串中“注入”你的参数 -
嗨,Jorge,请看下一篇文章。
-
你在说什么帖子?其他问题或其他评论?
标签: database postgresql function stored-procedures pgadmin