アプリ版:「スタンプのみでお礼する」機能のリリースについて

pl/pgsqlで変数が文字列として扱われてしまうのですがどうすればいいのでしょうか。
具体的には以下のような感じです。

CREATE OR REPLACE FUNCTION test_func() RETURNS VOID AS $$
DECLARE

test_val TEXT ;
ofs_num INTEGER := 0;
lmt_num INTEGER := 0;
t_name TEXT := 'schema1.table1';

BEGIN

SELECT INTO ret_val * FROM t_name OFFSET ofs_num LIMIT lmt_num;

END;
$$ LANGUAGE plpgsql;

上記のofs_numやlmt_numは変数として認識してくれるのですが
FROMに続く「t_name」が変数ではなくそのままの文字列として認識されてしまいます。

t_nameを変数として認識させる方法はありませんでしょうか。

教えていただけると助かりますm(_)m

A 回答 (1件)

最新のバージョン9.2であっても、PL/pgSQL では SELECT INTO は使用できません。

(下記ページの注釈参照)
http://www.postgresql.jp/document/9.2/html/sql-s …
したがって、SELECT INTO の様なことを行う場合は CREATE TABLE AS に書き直してやる必要が有ります。

また、PL/pgSQL 内で動的にSQLを生成して実行する場合は EXECUTE を使う必要性が有るようです。
http://www.postgresql.jp/document/9.2/html/plpgs …


例)

BEGIN

EXECUTE 'CREATE TABLE ret_val AS SELECT * FROM ' || t_name::regclass || ' OFFSET ' || ofs_num || ' LIMIT ' || lmt_num;

END;
    • good
    • 1
この回答へのお礼

お礼が遅くなってしまいすみませんでした。
かなり悩んでいた部分だったので本当に助かりました。
お教えいただいたとおりにしたところ期待通りの結果が得られました。
参考リンクも載せていただきありがとうございます。
ありがとうございました。m(_)m

お礼日時:2013/03/28 01:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!