我有一个字符串,用postgresql函数中的字符串聚合函数执行。以下是此脚本。
示例:
create or replace function f(colvalue int,colnvalue varchar)
returns void as
$$
declare
sql varchar;
var varchar;
begin
sql := 'Select var:= string_agg(................) /* Error occurred here near var:= */
from tablename where cola ='|| colvalue || ' AND coln ='|| colnvalue;
raise notice '%'sql;
execute sql into var;
raise notice var;
end;
$$
language plpgsql;
错误:
ERROR: syntax error at or near ":="
注意:我希望将string_agg
的结果导入var
。
答案 0 :(得分:2)
动态SQL只能包含SQL语句 - 但是":="是一个PL / pgSQL语句。接下来,从你的例子来看它很干净,所以在那里没用。第二个问题是SQL注入漏洞(仍然不能使用此代码)。较新的使用模式 ' || varcharvar || '
用于动态SQL中使用的SQL。
CREATE OR REPLACE FUNCTION f(colvalue int,colnvalue varchar)
RETURNS void AS $$
DECLARE
sql varchar;
var varchar;
BEGIN
sql := 'SELECT string_agg(..) FROM tablename WHERE cola=$1 AND coln=$2';
RAISE NOTICE '%', sql;
EXECUTE sql INTO var USING colvalue, colnvalue;
RAISE NOTICE '%', var;
END;
$$ LANGUAGE plpgsql;