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