PostgreSQL:选择string_agg为变量

时间:2014-07-14 05:42:34

标签: postgresql dynamic-sql

我有一个字符串,用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

1 个答案:

答案 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;