-4

我有一个运行以下循环的 postgres 函数

while x<=colnum LOOP EXECUTE
'Update attendrpt set slot'||x||' = pres from (SELECT branch, semester, attend_date , div, array_to_string(ARRAY_AGG(first_name||':'||alias_name||':'||lect_type||':'|| to_char(present,'99')),';') As pres from attend1 where lecture_slot_no ='||x||' group by branch, semester, attend_date , div ) j where attendrpt.branch=j.branch and attendrpt.semester=j.semester and attendrpt.attenddate=j.attend_date and attendrpt.div=j.div;';

        `x:=x+1;
  END LOOP;`

这里的问题是它与查询中的单引号和执行命令冲突。无论如何要解决这个问题。提前致谢。

4

1 回答 1

2

根据手册,用美元引用(like$BODY$或 just $$)引用您的函数定义。

使用execute ... using而不是字符串替换。对于替换标识符,请使用函数中的%I格式说明符format

如果您绝对必须使用||字符串连接,比如您使用的是某个古老版本的 PostgreSQL,您需要使用quote_literalandquote_ident函数来避免引用问题和潜在的安全问题。

除此之外,看起来整个方法完全没有必要。您正在做的事情看起来可以用简单的 SQL 完成。

于 2013-03-11T07:23:31.983 回答