[pgsql-jp: 31481] Re: Function関数の対象テーブル名を変数化

斎見 浩平 saimi_at_qs @ ybb.ne.jp
2003年 11月 16日 (日) 00:30:49 JST


サイミです。

> CREATE FUNCTION counter(date,text)
> RETURNS bigint
> AS '
> SELECT count(*) FROM $2
> WHERE date = $1
> 'LANGUAGE 'sql';

試してませんが、

CREATE FUNCTION counter(date, text) RETURNS bigint AS '
DECLARE
  datetext  text;
  cnt       bigint;
  rec       RECORD;
BEGIN
  datetext := to_char(timestamp($1), ''YYYY-MM-DD'');

  FOR rec IN EXEXUTE
    ''SELECT count(*) AS cnt FROM '' || quote_indent($2) ||
    ''WHERE date = '' || quote_literal(datetext)
  LOOP
    cnt := rec.cnt;
  END LOOP;

  RETURN cnt;
END;
' LANGUAGE 'plpgsql';

ではいかがでしょう。

-- 
斎見 浩平 <saimi_at_qs @ ybb.ne.jp>




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