[pgsql-jp: 26378] PL/pgSQLの質問です。「'」でくくった中での変数展開について。

Takeshi Yoshida yoshida @ tkm.att.ne.jp
2002年 6月 15日 (土) 00:04:34 JST


いつも勉強させて頂いております。吉田と申します。


シングルクォーテーションでくくった中に、変数を展開できずに悩んで
おります。

PL/pgSQLの内部で「'」を使用する時は「''」でくくる(又は「\'」)と
オンラインマニュアルに書いてありますが、「'」を使用する関数内部に
変数を展開したい場合、変数名がそのまま文字列だと認識されて関数に
渡ってしまってエラーになってしまいます。
(当たり前だといえば当たり前ですけど・・・)

例えば以下(本文最下)のようなストアドプロシージャの場合、引数(int)
で渡した数値を24とした場合、

	(CURRENT_TIMESTAMP - (' 24 HOUR '::INTERVAL))

としたいのに、

	(CURRENT_TIMESTAMP - (' time HOUR '::INTERVAL))

となってしまい、

	ERROR:  Bad interval external representation ' time HOUR '

というエラーが出力されてしまいます。


どなたか変数の展開方法をご教授下さい。

宜しくお願い致します。


////////////////////////////////////////////////////////////////

CREATE FUNCTION chk_regist(int, int) RETURNS int AS '
    DECLARE
        id alias for $1;
        time alias for $2;
        buff_regist  regist_info%ROWTYPE;

    BEGIN

        SELECT INTO buff_regist * FROM regist_info
          WHERE regist_id = id
          AND (CURRENT_TIMESTAMP - ('' time HOUR ''::INTERVAL)) > regist_date;

        IF buff_regist.regist_id ISNULL THEN
            return 0;
        ELSE
            return 1;
        END IF;

    END;
' LANGUAGE 'plpgsql';

////////////////////////////////////////////////////////////////


-- 
Takeshi Yoshida <yoshida @ tkm.att.ne.jp>

-- 
Takeshi Yoshida <yoshida @ tkm.att.ne.jp>




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