一時表
社内のDBが別のDBに移行され、かなり使い勝手が悪くなったがいろいろエラーが出るのでそれを解消していくのが勉強になる。
そこで今回は【一時表】について。
アーカイブログを出力しないと言うことで一時表を使うことになりました。
黒本にはCREATEしか載ってなく、INDEXとかVIEWも普通のテーブルと同じように作れるとしか書いてない。
で何にてこずったかというと、セッション内保有の一時表を作って最後にいらなくなった時点でDROPしようとしたらエラーになった。
ORA-14452:
すでに使用されている一時表で索引を作成、変更または削除しようとしました
なんだそれ。と調べてみると、一時表内にデータがあると削除することができないようで。多分ね。で対処方法はDROPの前にTRUNCATE するとDROPが出来ると。
テーブル作成時はCREATE GLOBAL TEMPORARY TABLE ~ AS SELECT~で作成と同時にデータを作成。これをトランザクション保有で作成したところ枠しか作られなかった。ddlだからだ。。。(アホなことした)
基本的にはCREATEしてINSERTしてCOMMITせず使って、不要な時点でCOMMITしてDROPみたいな感じか。
でもやっぱややこしいのでTRUNCATE分をいやだが入れてDROPすることにする。
続いて、INDEX。
これも同じエラーが出た。普通のテーブルとちゃうやんけと調べる。
この場合は、テーブル作成は枠を作った後にちゃんとINSERTしてる。でCREATE INDEX。この順番がダメみたい。
INDEXをINSERTの前に作れば正常に作成される。ややこし。まぁここは順番入れ替えるだけなんで採用!
ふーっ、ちょっとしたスキルアップしたぞぉ。
そうそう、試験を7月に延期したといいましたが、もっと遅らせます。。。