- 締切済み
ダイレクトインサートでテーブル作成時カラム長を指定
oracle10g standard 下記のようなsqlでviewをtable化するとvarchar2のカラム長が固定で4000になります。 長さを指定することはできますか? create table test as select * from view;
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- scarbo
- ベストアンサー率50% (1/2)
ビューの参照先の表で、列定義が VARCHAR2(4000) となっているのではないでしょうか。 こちらで試す限り、ビューの参照先の列が VARCHAR2(256) であれば、 CREATE TABLE ... SELECT ... しても、VARCHAR2(256) になるようです。 ---------------------------------------------------------------------- create table test1 (text varchar2(256)); create view test1v as select text from test1; desc test1v create table test2 as select * from test1v; desc test2 ---------------------------------------------------------------------- 【実行結果】 SQL> desc test2 Name Null? Type ---------------- -------- ------------------ TEXT VARCHAR2(256) 4000よりも小さい値を指定しても桁あふれが発生しないことが予め分かっている場合には、 以下のように、明示的に CREATE TABLE でデータ型を指定した後に、 INSERT INTO ... SELECT ... すればいいのではないでしょうか。 ---------------------------------------------------------------------- create table test3 (text varchar2(4000)); insert into test3 values ('abc'); commit; create view test3v as select text from test3; create table test4 (text varchar2(16)); insert into test4 select text from test3v; commit; ----------------------------------------------------------------------