在while循环中执行命令

时间:2013-03-11 07:10:22

标签: postgresql

我有一个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;`

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

1 个答案:

答案 0 :(得分:2)

根据手册引用您的函数定义(如$BODY$$$)。

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

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

除此之外,整个方法看起来完全没必要;你正在做一些看似可以在简单的SQL中完成的事情。