Oracle の「Create Table As Select」機能を使用して高速更新を試みています。私が見ている問題は、「Null」フィールドが保持されていないことです。
次の表を定義しました。
create table mytable(
accountname varchar2(40) not null,
username varchar2(40)
);
生の CTAS を実行すると、アカウントの NOT NULL が保持されます。
create table ctamytable as select * from mytable;
describe ctamytable;
Name Null Type
----------- -------- ------------
ACCOUNTNAME NOT NULL VARCHAR2(40)
USERNAME VARCHAR2(40)
ただし、accountname を置換すると、NOT NULL は保持されません。
create table ctamytable as
select replace(accountname, 'foo', 'foo2') accountname,
username
from mytable;
describe ctamytable;
Name Null Type
----------- ---- -------------
ACCOUNTNAME VARCHAR2(160)
USERNAME VARCHAR2(40)
accountname
フィールドに null がなくなり、varchar2
フィールドが 40 文字から 160 文字になったことに注意してください。誰もこれを見たことがありますか?