[pgsql-jp: 31559] Re: sql関数の戻り値について
T.Suzuki
t_suzuki @ kenwood-eng.co.jp
2003年 11月 21日 (金) 11:56:42 JST
鈴木@KEGと申します。
松田さん wrote:
> CREATE FUNCTION getRitsu(varchar) RETURNS numeric
> AS '
> select
> COALESCE(ritsu,100)
> from table
> where CD = $1'
> LANGUAGE 'sql';
このSQLだと、ritsu がNULLを返せば、
期待する100が返りますが、
"CD = $1" が真とならない場合、
SELECTの結果自体が "0 row"となりますよね。
問い合わせ結果が0件なので、戻り値はNullをnumericに
キャストしようとして、そのままNullが返ったのでしょう。
> select getRitsu('ありえないデータ');
> getRitsu
> ------------
>
> (1 row)
ですので、これは当然の結果となります。
ご希望の動作をさせるには、COALESCEではなくて、
SELECTの結果数を調べて、戻り値を操作する必要があります。
PL/pgSQLであれば、
# If NOT FOUND THEN 〜 END IF
という感じです。
-----------------------------------------
鈴木 徹 (SUZUKI Toru)
KENWOOD ENGINEERING CORPORATION
E-mail:t_suzuki @ kenwood-eng.co.jp
-----------------------------------------
pgsql-jp メーリングリストの案内