我有一个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;`
这里的问题是在查询和执行命令中关闭的单引号是冲突的。无论如何要解决这个问题。 提前谢谢。
答案 0 :(得分:2)
根据手册引用您的函数定义(如$BODY$
或$$
)。
使用execute ... using
代替字符串替换。对于替换标识符,请使用%I
函数中的format
格式说明符。
如果您绝对必须使用||
字符串连接,请说如果您使用的是某些古老版本的PostgreSQL,则需要使用quote_literal
和quote_ident
函数来避免引用问题和潜在的安全问题。
除此之外,整个方法看起来完全没必要;你正在做一些看似可以在简单的SQL中完成的事情。