-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

マニュアルに従って、関数定義をドル引用符 (のように$BODY$、または単に$$) で引用します。

execute ... using文字列置換の代わりに使用します。識別子を置き換えるには%I、関数の書式指定子を使用しformatます。

絶対||に文字列連結を使用する必要がある場合、たとえば古いバージョンの PostgreSQL を使用している場合は、引用符の問題や潜在的なセキュリティの問題を回避するために関数quote_literalと関数を使用する必要があります。quote_ident

それを超えて、アプローチ全体が完全に不必要であるように見えます。単純な SQL で実行できるように見える何かを実行しています。

于 2013-03-11T07:23:31.983 に答える