column名

今日のOracleメモ。


あるスキーマに存在する全テーブル内で hoge というカラムを持つテーブル一覧が知りたい
という事で以下のSQLで取得

select table_name from user_tab_columns where column_name = 'hoge';

ここで期待していた該当テーブルが取得出来ないので少し調査。



テーブル定義の際に

create table test(hoge number)

とした場合はカラムhogeデータディクショナリ上はHOGEとして認識されます。

create table test ("hoge" number)

とした場合はidとして認識されます
明示的に小文字のカラム名にしたい場合は定義時に""で囲みます。

create table test (HOGE number)
create table test (hoge number)

テーブル定義時に""で囲まない場合はすべてデータディクショナリ上、大文字化(HOGE)さ
れます。

select句で指定するときは大文字でも小文字でも問題ありません。

select hoge from test;
select HOGE from test;

あまりやらないとは思いますが、"HogeNumber"と定義した場合は少し面倒な事になりま
す。
都度、下記のようにしなければいけないので。

select "HoGe" from test;


逆に""を付けずに

create table test (HoGe number)

と定義した場合であれば

select hoge from test;

で問題ありません。

結論としてOracleデータディクショナリ上はHOGEという大文字で格納されているから
user_tab_columnsなどでcolumn_nameを検索するときは大文字指定する必要があるという

事でした。
最終的には、HOGEと指定して無事に知りたいテーブル一覧を取得。

select table_name from user_tab_columns where column_name = 'HOGE';