こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

TIMESTAMP型が含まれるテーブルの列名の取得

Oracle 11gを使用しているSQL初心者です。

テーブルの列名を取得する方法についての質問です。
テーブルの列名を取得するときは以下のSQLで取れると思っています。
select column_name from user_tab_columns where table_name = 'テーブル名';
--実行結果--
COLUMN_NAME
------------------------------
NAME1
NAME2

しかし、テーブルにTIMESTAMP型が含まれていると
「レコードが選択されませんでした。」
と表示されます。

TIMESTAMP型が含まれるテーブルは上記のSQLでは取得できないのでしょうか。
TIMESTAMP型が含まれるテーブルの列名の取得方法をご存知の方がいらっしゃいましたら、
ご教示ください。よろしくお願い致します。

投稿日時 - 2013-07-16 00:27:50

QNo.8178132

困ってます

質問者が選んだベストアンサー

こんにちわ。

> 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 で、どの所有者のどのようなオブジェクトにアクセスしているか
  確認してみて下さい。

投稿日時 - 2013-07-16 23:34:19

お礼

丁寧な回答ありがとうございます。
おかげで解決することができました。なんと仕様書上大文字小文字が混ざっていたのですが、実際には全て大文字でテーブル名が作られていたことが原因でした。
回答を試している内に気付きました。

投稿日時 - 2013-07-20 00:39:45

このQ&Aは役に立ちましたか?

14人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問