-PR-
  • 困ってます
  • 質問No.8178132
解決
済み

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

  • 閲覧数337
  • ありがとう数15
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 100% (2/2)

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

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

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

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

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

  • 回答No.1
レベル11

ベストアンサー率 72% (230/318)

こんにちわ。

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

お礼率 100% (2/2)

丁寧な回答ありがとうございます。
おかげで解決することができました。なんと仕様書上大文字小文字が混ざっていたのですが、実際には全て大文字でテーブル名が作られていたことが原因でした。
回答を試している内に気付きました。
投稿日時 - 2013-07-20 00:39:45
  • ありがとう数0
-PR-
-PR-
  • 回答数1
  • 気になる数0
このQ&Aのテーマ
このQ&Aで解決しましたか?

関連するQ&A

-PR-
-PR-
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


-PR-

ピックアップ

-PR-
ページ先頭へ