[pgsql-jp: 34968] PL/pgsql内での漢字

Koyama Manabu sm-bunbun-ll @ mx9.tiki.ne.jp
2005年 3月 6日 (日) 17:40:47 JST


OS:Fedora Core1
PostgreSQL7.4.5
です。

データベース名:hanbaidb
テーブル名:ninusi_mastert (4806件)
-------PL/pgSQL--------------------------------
create or replace function
nmaster_func1(integer,text,text,text,text,text,integer) returns setof
ninusi_mastert as '
declare
code alias for $1;
huri alias for $2;
kanji alias for $3;
telno alias for $4;
yubin alias for $5;
jusyo alias for $6;
j_select alias for $7;
colume_name text;

rec record;

begin
if j_select=1 then
 for rec in select * from ninusi_mastert where ninusi_code=ninusi_code loop
 return next rec;
elseif j_select=2 then
 for rec in select * from ninusi_mastert where hurigana like ''%'' || huri
|| ''%'' loop
 return next rec;
elseif j_select=3 then
 for rec in select * from ninusi_mastert where ninusi_name like ''%'' ||
kanji || ''%'' loop
 return next rec;
elseif j_select=4 then
 for rec in select * from ninusi_mastert where tel like ''%'' || telno ||
''%'' loop
 return next rec;
elseif j_select=5 then
 for rec in select * from ninusi_mastert where yubinbango like ''%'' ||
yubin || ''%'' loop
 return next rec;
elseif j_select=6 then
 for rec in select * from ninusi_mastert where jusyo like ''%'' || jusyo ||
''%'' loop
 return next rec;
end if;

end loop;
return;
end;
' language plpgsql;
-------------------------------------------------------
>set client_encoding to 'UTF-8';
>set
>select * from ninusi_mastert where jusyo like '%' || '岡山' || '%'; --B
とすると条件にあったデータ(住所が岡山とあるデータ130件ほど)が表示されま
す。

しかし上記のFUNCTION(nmaster_func1)を呼び出して実行
>select * from nmaster_func1(10,'10','10','10','10','岡山',6); --A
とすると全てのデータ(この場合登録している全都道府県の住所
4806行)が抽出されてしまいます。

>$  psql -l
hanabaidb EUC_JP
と表示されます。

Bのように普通にSELECTして条件を指定するとうまくいきますが
AのようにFUNCTIONを使うとなぜかうまくいきません。

どこかに落ち度がありそうなのですが、よく分かりません。
ご存知の方がいらっしゃったらよろしくお願いします。








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