質問
い高速右にある小さな矢印をクリックのためのかを判定する分野が存在しない表示します。
実際に私はこれを使って文
Select 1
from dual
where exists (select 1
from all_tab_columns
where table_name = 'MYTABLE'
and column_name = 'MYCOLUMN')
と思いがある必要がありますの道であるか否かを判定するためにカラムが存在しますので、ORACLE社
更新
私の最適化により大きなソフトウェアシステムと複数の通話をこのクエリができません修正のソースコード(のみの変更は可能でクエリに格納された外部ファイルです。
のテーブルall_tab_columnsは、百万円で記録しています。
解決
all_tab_columns
の主キーがそれほど速くなる(またはowner, table_name, column_name
を使用する)であろう特定の所有者を探しuser_tab_columns
されます。
他のヒント
私はこのAskTomの記事を読んでお勧めします。これはチェックする最速の方法は全くチェックしないことを説明します。
ます。http:// asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:698008000346356376する
Oracleデータ・ディクショナリの照会 - あなたの例では、実際にそうであるよう、おそらく最速の方法です。
。データ・ディクショナリは、メモリにキャッシュされており、かなり迅速にクエリを満たすことができるはずです。あなたがテーブルの実際のスキーマ所有者を知っている場合は、わずかに速い結果を得ることができるかもしれ - あなたはすべてのスキーマに対して検索のコストが発生しないように、
。このクエリは:
SELECT null
FROM user_tab_columns
WHERE table_name = 'MYTABLE' and column_name = 'MYCOLUMN'
の最速の方法はクエリから直接内部テーブル ではない方におすすめ および必要な助成金の上sysオブジェクト
select null
from sys.col$ c
, sys.obj$ o
, sys.obj$ ot
where o.name = 'MYTABLE'
and c.name = 'MYCOLUMN'
and o.obj# = c.obj#
and o.owner# = userenv('SCHEMAID')
and ot.type#(+) = 13
and (o.type# in (3, 4)
or
(o.type# = 2
and
not exists (select null
from sys.tab$ t
where t.obj# = o.obj#
and (bitand(t.property, 512) = 512 or
bitand(t.property, 8192) = 8192))))
このクエリから USER_TAB_COLUMNS
の定義および 変更することができ様々なリリース(10gR2私の場合).このクエリは私の参照情報を求めなかったです。
とにかく、なぜでチェックしたい。
このSQLクエリは、ユーザーのすべての表持つ列「NAVIGATION_ID」の名前を与える「DSGIDEV」
を選択* all_tab_colsどこからCOLUMN_NAME = 'NAVIGATION_ID' と所有者= 'DSGIDEV' の
だから、あなたの所有者のID名で検索したい列と所有者で列名を変更します。
イージー、最速の方法は、ちょうどこのように関数を作成されます:
Create function exist(v_table in varchar2, v_col in varchar2)
Return integer is
Res integer:= 0;
Begin
Begin
Execute immediate 'select ' || v_col || ' from '|| v_table;
Res:=1;
Exception when other then null;
End;
Return (res);
End;