2009-08-24 11 views
2

プライマリキー名を使用して2番目のカラムとしてユーザテーブルの名前を表示するにはどうすればいいですか?テーブルのプライマリキーの名前を取得

私は仕事の半分をしていますが、もっと何をすべきかはわかりません。

select table_name from user_tables ORDER BY (table_name) ASC 

どのように知っていますか?

+0

を使用することができますか? – rogeriopvl

+0

特定のユーザーによって作成されたテーブルの名前(私はoracleで作業しているので、ユーザーごとにスキーマのようなものが作成されます)。 – Sheldon

答えて

3

この単純なクエリでは、あなたのPK制約名(ただし、列名)と一緒にテーブルのリストを与える:

select  ut.table_name, uc.constraint_name 
from  user_tables ut 
left join user_constraints uc 
    on  ut.table_name = uc.table_name 
    and  uc.constraint_type = 'P'; 

あなたは、列名をしたい場合は、PKは複数の列を持つことができることを覚えておいてください!ネストされたタブの書式が気に入らない場合、あなたが入力としてNTを取るユーティリティ関数を書くことができます

create type ty_varchar_nt as table of varchar2(4000); 

select  ut.table_name, uc.constraint_name, cast(collect (uic.column_name) as ty_varchar_nt) as pk_cols 
from  user_tables ut 
left join user_constraints uc 
    on  ut.table_name = uc.table_name 
    and  uc.constraint_type = 'P' 
left join user_ind_columns uic 
    on  uc.index_name = uic.index_name 
group by ut.table_name, uc.constraint_name; 

:我々は理由コレクト()集約関数の最初の効用型を作成する必要があります連結されたカンマ区切りの文字列を出力として提供します。ちょうどそれを自分自身を行うための時間を持っていない;)

1

USER_CONSTRAINTSUSER_TABLESに参加してみていただきありがとうございます。 USER_CONSTRAINTSフィルタにおいて

CONSTRAINT_TYPE有するすべての行は、 'P'(主キー)に等しいです。そこにindex_nameindex_ownerの値をUSER_INDEXESと結合でき、PRIMARY KEYから列名を取得できます。

私はこれを行うもっと簡単な方法を知りたがっていればいいと思います...しかし、私はしません。

幸運を祈る!

1

あなたは、「ユーザーテーブル名」で何を意味するか、次のクエリ

SELECT cols.table_name, cols.column_name, cols.position, cons.status, cons.owner 
FROM all_constraints cons, all_cons_columns cols 
WHERE cons.constraint_type = 'P' 
AND cons.constraint_name = cols.constraint_name 
AND cons.owner = cols.owner 
ORDER BY cols.table_name, cols.position; 
関連する問題