[pgsql-jp: 27677] Re: 一時テーブルのmetadata 取得

Tatsuo Ishii t-ishii @ sra.co.jp
2002年 10月 18日 (金) 10:55:19 JST


石井です.

> > そもそも、一時表のメタデーターを取得しなければならない
> > というのは、どういうケースでしょうか。ちょっと必要性が
> > 思いつかないのですが。
> 
> 確かにそうでした。
> やりたいことを書けば、今回私がやろうとした
> 「一時テーブルからmetaデータを取りだして…」
> 等と言うことはやらなくても、済む方法をご教示いただけた
> 事ですね(^^;
> 実際やりたいことは言ったって単純です。
> 
> # ここからはPHPの話になり、またこのMLでPHPの話をすることを
> # 不快に思う方もいらっしゃると思いますが、ご容赦下さい。
> 
> これは赤マンモス本において石井様が書かれてものですが、簡単に
> 説明させていただきますと、
> 
> [1]metaデータを取得
> select a.attnum, a.attname, t.typname, a.attlen, a.atttypmod,
> a.attnotnull, a.atthasdef,c.oid from pg_class c, pg_attribute a,
> pg_type t where c.relname='table_name' and a.attnum>0
> and a.attrelid=c.oid and a.atttypid=t.oid order by a.attnum;
> 
> [2]同様に、それぞれの変数型事にオペレータ(= , >= 等)を取得
> select o.oprname as op, t1.typname as left_arg, t2.typname as right_arg,
> t0.typname as result, obj_description(p.oid) as description from
> pg_proc p, pg_type t0, pg_type t1, pg_type t2, 
> pg_operator o where t1.typname='$typename' and p.prorettype=t0.oid and 
> regproctooid(o.oprcode)=p.oid and p.pronargs=2 and o.oprleft=t1.oid and
> o.oprright=t2.oid and t0.typname='bool' and t1.typname=t2.typname;
> 
> [3]それらを元に、検索フォームを生成する。
> このメンバ関数名を print_form($table)とする。
> 
> と言う流れのクラスファイルがあります。
> 通常(参考書通り)では、検索フォームを生成する為のテーブルは
> 通常のテーブルなので、テーブルをメンバ変数にして、上記
> [1] , [2] をコンストラクタで実行します。
> 
> 今回私がやりたいことは、複数のテーブルにまたがったデータにたいして、
> 検索フォームを生成したいのです。
> その為、table は通常の変数として与え、また
> [1] , [2] をコンストラクタにはせずに、
> print_form($table) 内で実行するようにしました。
> 
> そこで、$tableを create temp table tmp_table as …
> で生成したかったのです。

この方法だと,PHPで次のページに行ったときには一時テーブルが消えている
ので,無理なような気がするのですが...

要は複数テーブルに跨る検索を行いたいわけですね.であれば,viewを定義し
て見掛け上テーブルを1個にしてしまうのが一番簡単だと思うのですが,いか
がでしょう.
--
Tatsuo Ishii



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