仮想列を持つテーブルに対してINSERTする時はカラム名を指定しないといけない。

ORACLE11gから追加された仮想列という機能がある。

列ごとに作ることができるビューみたいな機能なのだが、これで引っかかった。

INSERT文を実行した時に、「仮想列にはINSERTできません」みたいなエラーが起きる。

INSERT tbl1

SELECT col1,col2,v_col FROM tbl2;

上記のSQLを書いてた。

仮想列は表示するためだけの列なので、そりゃそうだ。

INSERTできるわけがない。

 

ということで書き換えた。

INSERT tbl1

SELECT col1,col2 FROM tbl2;

しかし、またエラーが起きた。

「列の指定が足りません。」

 

は?

 

まさかと思って再度書き換えた。

INSERT tbl1 VALUES ( col1, col2 )

SELECT col1,col2 FROM tbl2;

成功した。。。

 

どうやら、仮想列のあるテーブルのINSERT文は、省略すると、仮想列も挿入する項目として存在してしまうらしい。

 

こんなもの誰が使うんだ。。。ややこしい。

おすすめの記事