【Oracle】既存テーブルの項目定義流用してテーブルCreateだけする(WHERE句に0=1つける)
あるテーブルをつくる(Createする)とき、既存テーブルの項目定義情報をそのまま流用したいときがある。
そのとき、いちいち流用したいテーブルの項目定義調べてCreate文書くのが面倒だったりするので、
Select+Createの要領で、かつ「絶対に結果が返ってこない条件」を意図的に書くことで、
テーブルの項目定義を簡単に流用することができる。
たとえばとあるテーブルTEST_TABが
create table TEST_TAB ( NO NUMBER(10) ,FIRST_NAME VARCHAR2(30) ,FAMILY_NAME VARCHAR2(30) ,BIKO VARCHAR2(30) ,PARENT_NO NUMBER(10) )
だったとして、
これを流用する(とりあえず項目抜粋して「NO」「FIRST_NAME」「FAMILY_NAME」「BIKO」だけ)としたとき
create table TEST_TAB2 as select no ,first_name ,family_name ,biko from TEST_TAB where 0=1
とすると、「TEST_TAB」の「NO」「FIRST_NAME」「FAMILY_NAME」「BIKO」の項目定義をそのまま流用して
件数0件の空っぽのテーブルだけをとりあえずCreateすることができる。
WHERE句に書いた「0=1」は絶対falseになる(イコールになるわけない)ので、
流用元のテーブル(ここでいう「TEST_TAB」)に例え何万件、何億件入っていようが、このSELECTの結果は0件になる。
ただしSELECTと同時に項目情報だけはテーブルからとってきているので、それを使ってテーブルを新規構成する、というやり方。
「中身のデータはいらないがとりあえずテーブルの外枠だけ作っておきたい」というときに使える。
WHERE句に書く条件はfalseになることが保障されていれば別に「0=1」にこだわらなくてもいい。
「0=1」を個人的に一番よく使うってだけである。
「'A'='B'」とかでもいいだろう。
好きな書き方すればいいと思う。
WHERE句の条件を取り除くか、あるいは特定の条件だけ抽出するよう記述すれば、
テーブルのCreateと同時にデータの格納も可能となる。
(というか↑で挙げた方法は0件のテーブルをまず作りたいときに使う、これのただの応用である)
ただしこの方法だと、流用元のテーブルについてるPK(Primary Key)やINDEXの定義はついてこない。
あくまでテーブル項目定義だけを流用してCreateするだけである。
「とりあえず手っ取り早くテーブルだけ作りたい」というときに有効な方法ということになる。