- ベストアンサー
TIMESTAMP型が含まれるテーブルの列名の取得方法
- Oracle 11gを使用しているSQL初心者です。テーブルの列名を取得する方法についての質問です。
- テーブルの列名を取得するときは以下のSQLで取れると思っています。しかし、テーブルにTIMESTAMP型が含まれていると「レコードが選択されませんでした。」と表示されます。
- TIMESTAMP型が含まれるテーブルは上記のSQLでは取得できないのでしょうか。TIMESTAMP型が含まれるテーブルの列名の取得方法をご存知の方がいらっしゃいましたら、ご教示ください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんにちわ。 > TIMESTAMP型が含まれるテーブルは上記のSQLでは取得できないのでしょうか。 通常、そのような事はありません。 問題のテーブルにアクセスできるユーザからuser_tab_columns ビューを 参照している前提で、考えられる原因が3つあります。 1) 別スキーマにテーブルがある。 user_tab_columns ビューは、自スキーマに定義されているテーブルの 列情報を持ちます。 all_tab_columns ビューで情報が取得できるか確認して下さい。 ※ all_tab_columns ビューのowner 列にテーブルの所有者名が 格納されています。 2) テーブルが大文字/小文字混在で作成されている。 テーブルを大文字/小文字混在でCreate table しても、大文字でテーブルが 作成されますが、テーブル名をダブルクォーテーションで囲むと大文字/小文字 混在で作成させる事ができます。 その場合、ディクショナリにもテーブル名は大文字/小文字混在で格納されて います。 where upper(table_name) = upper('テーブル名') で確認してみて下さい。 3) Synonym 経由で別の表にアクセスしている。 Synonum 経由で別の表にアクセスしている場合も、user_tab_columns や all_tab_columns ビューには列情報は格納されません。 select owner, object_type, object_name from all_objects where object_name = '先に指定したテーブル名'; 上のSQL で、どの所有者のどのようなオブジェクトにアクセスしているか 確認してみて下さい。
お礼
丁寧な回答ありがとうございます。 おかげで解決することができました。なんと仕様書上大文字小文字が混ざっていたのですが、実際には全て大文字でテーブル名が作られていたことが原因でした。 回答を試している内に気付きました。