[pgsql-jp: 40446] Re: 自作関数nvlの挙動について

toshihideka4316 @ zenrin.co.jp toshihideka4316 @ zenrin.co.jp
2010年 10月 13日 (水) 10:27:01 JST


 片山です。お世話になります。

> 「APが異常終了」だけでは症状が伝わりません。
> 正確なエラーメッセージ(APに返されるもの、DBのログに記録されるもの)
> があると、回答が得やすいと思います。
AP、DBのログ共にエラーメッセージなしでAPが落ちます。
追加で調査を行ったところ、
DeclearFetch=1を指定した状態で接続し(ODBC接続)、クライントカーソルを使
用して、
SQLを発行するとAPが異常終了することまでわかりました。
SQLの取得結果については、numeric(8桁)が100回連続で続き、その後にnumeric(9
桁)が現れます。
pgsql等のコンソールツールを用いてSQLを発行した場合は正常に取得できます。

この挙動についてなにかご存知でしたら教えていただけないでしょうか。

以上よろしくお願いいたします。

> -----Original Message-----
> From: pgsql-jp-bounces @ ml.postgresql.jp 
> [mailto:pgsql-jp-bounces @ ml.postgresql.jp] On Behalf Of 
> Itagaki Takahiro
> Sent: Thursday, September 09, 2010 5:48 PM
> To: PostgreSQL Japanese Mailing List
> Subject: [pgsql-jp: 40381] Re:自作関数nvlの挙動について
> 
> 2010/9/9  <toshihideka4316 @ zenrin.co.jp>:
> > サーバ、クライアント共にPostgreSQL ver8.2.4を使用しております。
> > nvl(numeric, integer)、nvl(integer, integer)と2つの関数を作成して使用し
てお
> > りますが、AP内で自作のnvl(numeric, integer)を使用するとAPが異常終了する場
合が
> > あり困っています。
> 
> 「APが異常終了」だけでは症状が伝わりません。
> 正確なエラーメッセージ(APに返されるもの、DBのログに記録されるもの)
> があると、回答が得やすいと思います。
> 
> --
> Itagaki Takahiro
> 

> -----Original Message-----
> From: 片山 年秀 
> Sent: Thursday, September 09, 2010 5:29 PM
> To: pgsql-jp @ ml.postgresql.jp
> Subject: 自作関数nvlの挙動について
> 
> 片山です。お世話になります。
> サーバ、クライアント共にPostgreSQL ver8.2.4を使用しております。
> nvl(numeric, integer)、nvl(integer, 
> integer)と2つの関数を作成して使用しておりますが、AP内で自作のnvl(numeric, 
> integer)を使用するとAPが異常終了する場合があり困っています。
> (ODBC接続を使用)
> numeric(8桁)を用いてnvl(numeric, 
> integer)を100回連続で呼び出した後に、第一引数をnumeric(9桁)でnvl呼び出した
場合APが異常終了するようです。
> (nvl(integer,integer)を明示的に呼び出すようにSQLを修正すると正常に動作しま
す)
> この挙動についてなにかご存知でしたら教えていただけないでしょうか。
> 
> ↓NVLのソース↓
> CREATE OR REPLACE FUNCTION nvl(numeric, integer)
>   RETURNS numeric AS
> $BODY$
> declare
>   n_str1 alias for $1;
>   i_str2 alias for $2;
> begin
>   if n_str1 is null then
>     return i_str2;
>   else
>     return n_str1;
>   end if;
> end;
> $BODY$
>   LANGUAGE 'plpgsql' VOLATILE;
> 
> 
> CREATE OR REPLACE FUNCTION nvl(integer, integer)
>   RETURNS integer AS
> $BODY$
> declare
>   i_str1 alias for $1;
>   i_str2 alias for $2;
>   ret integer;
> begin
>   if i_str1 is null then
>     ret := i_str2;
>   else
>     ret := i_str1;
>   end if;
>   return ret;
> end;
> $BODY$
>   LANGUAGE 'plpgsql' VOLATILE;
> 以上です。
> 




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