[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 メーリングリストの案内