次のクエリを実行すると:
select count(*) from all_tab_columns
where column_name = 'foo'
and table_name = 'VIEW0';
結果として 0 を取得します。1を期待しています。
しかし、次のクエリを実行すると、多くの (予想される) 行が返されます。
select foo from VIEW0;
なんで?ばかげた構文ミスを犯しているか、理解が途方に暮れていると思います。
次のクエリを実行すると:
select count(*) from all_tab_columns
where column_name = 'foo'
and table_name = 'VIEW0';
結果として 0 を取得します。1を期待しています。
しかし、次のクエリを実行すると、多くの (予想される) 行が返されます。
select foo from VIEW0;
なんで?ばかげた構文ミスを犯しているか、理解が途方に暮れていると思います。
おそらくその理由は、大文字と小文字を区別する設定をしているためです。
以下のように機能を追加してみてくださいUPPER。
select count(*) from all_tab_columns
where column_name = upper('foo')
and table_name = 'VIEW0';
ALL_TAB_COLUMNS は、現在のユーザーがアクセスできるテーブル、ビュー、およびクラスターの列を示します。このクエリを実行しているユーザーが目的のテーブルにアクセスできるかどうかを確認します。
少なくとも 11g では、PL/SQL からデータ ディクショナリ テーブルにアクセスできないようです。PL/SQL 内で all_tab_columns に対して select を実行すると、常に結果が返されません。dba_tab_columns にアクセスしようとしてもコンパイルされません。これは、コンパイラがテーブル (またはビュー) が存在しないと見なすためです。
PL/SQL からデータ ディクショナリにアクセスする方法を知りたいです。