[pgsql-jp: 35285] 動的SQLの文字列のシングルクォーテーション

Koyama Manabu sm-bunbun-ll @ mx9.tiki.ne.jp
2005年 4月 18日 (月) 20:25:28 JST


小山といいます。
PostgreSQL7.4.5 + Fedora Core1です。

"select * from ninusi_mastert where jusyo like '%岡山市%' or jusyo like '%3丁目%'”;"
といった select文を作り、複数のレコードを返すようなストアドを作成しました。
(where条件以下は動的に作成される。)

=======PL/PgSQL================================
create or replace function nmaster_func3(text) returns setof ninusi_mastert 
as '
declare
jouken alias for $1;
sql text;
rec record;

begin
 sql:="select * from ninusi_mastert where " || jouken;
 for rec in execute sql loop
 return next rec;
 end loop;

return;
end;
' language plpgsql;
================================================
エミュレータから関数を呼び出しましたが、エラーが出てしまいます。

->set client_encoding to 'UTF-8';
->SET

->select * from nmaster_func3(' jusyo like %岡山市%');
->ERROR:column "ect * from ninusi_mastert where " does not exist
->CONTEXT: PL/pgSQL function "nmaster_func3" line 7 at assignment
とエラー表示されてしまいます。
(その他:' jusyo like '''%岡山市%''''、'' jusyo like '%岡山市%'''など)

"For文"での"execute"の使い方が間違っているのかなと思ったのですが、以下の
アドレスを見ると問題ないような気がします。
http://www.postgresql.jp/document/pg800doc/html/plpgsql-control-structures.html#PLPGSQL-CONTROL-STRUCTURES-LOOPS

やはりシングルクォーテーションのつけ方が間違っているのでしょうか?
SQLを動的に作成した場合とLIKE条件と組合せた場合
SQLの文字列をどのように作成すればよろしいのでしょうか?

よろしくお願いします。





pgsql-jp メーリングリストの案内