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

yusaku matsuda yumatuda @ msoft.co.jp
2003年 11月 14日 (金) 11:22:54 JST


はじめまして、エムソフトの松田と申します。

うろ覚えで恐縮ですが、テーブル名を
quote_ident($1)
とすれば良かったと思います。

On Thu, 13 Nov 2003 22:17:04 +0900 (JST)
kenbooit @ excite.co.jp さんは書きました:

> 島田と申します。
> お世話になります。
> FUNCTION関数に関する質問です。
> 
> CREATE FUNCTION counter(date)
> RETURNS bigint
> AS '
> SELECT count(*) FROM table1
> WHERE
> AND date = $1
> 
> 'LANGUAGE 'sql';
> 
> 例えば、上記のような関数があったとします。
> 対象とするテーブル(ここでいうtalbe1)は同じ構造で沢山ある為に
> (データ量が多い為にやむを得ず、分けています。)、
> できれば、テーブル名も変数で渡して、
> 汎用性のあるものにしたいと考えています。
> 
> そこで、単純に下のようにすると、
> 
> CREATE FUNCTION counter(date,text)
> RETURNS bigint
> AS '
> SELECT count(*) FROM $2
> WHERE
> AND date = $1
> 
> 'LANGUAGE 'sql';
> 
> parser: parse error at or near "$2" at ・・・・・・・
> 
> となってしまいます。
> 
> テーブルがないから作りようがない、ってことだとは思うのですが、
> 何か良い手はないでしょうか。
> 
> お知恵を拝借したく存じます。
> よろしくお願い致します。





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