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