dポイントプレゼントキャンペーン実施中!

oracle10g standard

下記のようなsqlでviewをtable化するとvarchar2のカラム長が固定で4000になります。
長さを指定することはできますか?

create table test as select * from view;

A 回答 (1件)

ビューの参照先の表で、列定義が 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;
----------------------------------------------------------------------
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!