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