试图找出如何使用plpgsql编写预处理语句来清理我的代码。
PREPARE statements(text, text, text, text, text, text, text, text, text, text, text, text) AS
'SELECT
*
FROM
articles
WHERE
' || $1 || ' AND
' || $2 || ' AND
primary_category LIKE ''' || $3 || ''' AND
' || $4 || ' AND
' || $5 || ' AND
' || $6 || ' AND
' || $7 || ' AND
' || $8 || ' AND
' || $9 || ' AND
' || $10 || ' AND
' || $11 || ' AND
is_template = ' || §12 || ' AND
status <> ''DELETED''
ORDER BY ' || $13 || ' LIMIT 500';
RETURN QUERY EXECUTE statements(search_term, publication_date_query, category_filter, tags_query, districts_query, capability_query, push_notification_query, distance_query, revision_by, publication_priority_query, status_query, only_templates, order_by);
上面的代码返回
ERROR: syntax error at or near "'SELECT
*
FROM
articles
WHERE
'"
LINE 67: 'SELECT
我声明我的变量如下:
DECLARE
tags_query text := 'true';
BEGIN
IF char_length(search_term) > 0 THEN
order_by := 'ts_rank_cd(textsearchable_index_col, to_tsquery(''' || search_term || ':*''))+GREATEST(0,(-1*EXTRACT(epoch FROM age(last_edited)/86400))+60)/60 DESC';
search_term := 'to_tsquery(''' || search_term || ':*'') @@ textsearchable_index_col';
ELSE
search_term := 'true';
END IF;
...
我是新手,请不要立刻吓坏,如果是傻事,我没注意到。
编辑:PostgreSQL版本9.6
编辑:我知道documentation。
答案 0 :(得分:0)
我看到更多问题。
EXECUTE
命令与PLpgSQL EXECUTE
命令不同。 PLpgSQL EXECUTE
命令的参数是SQL字符串 - 不是准备命令的名称。有没有干净的方法,如何从PLpgSQL执行SQL显式编写的命令。因此,PLpgSQL中的组合PREPARE cmd(); EXECUTE cmd()
没有任何意义。