ただし、CTAS は各列のデフォルト値をコピーしないことに気付きました
理由は単純明快。CTAS は、メタデータではなくデータのみをコピーすることを目的としています (テーブル構造を除く)。
したがって、あなたは失うことになります:
- すべての制約
- すべてのインデックス
- すべての助成金
基本的に、オプションでテーブルに関連するすべてのもの。
メタデータを取得してテーブルを変更し、明示的に適用する必要があります。
alter table new_table_name modify (column default 1);
または、次のこともできます。
- dbms_metadata.get_ddlを使用してテーブルDDLを取得します
- テーブルの名前を新しい名前に変更します
- 古いテーブルから新しいテーブルにデータを挿入します。
もちろん、後者ははるかに遅くなります。
アップデート
CTASでnull 制約ではなくデフォルト値を提供する方法があります。
設定
SQL> create table t1 (id number default 1 not null, text varchar2(10));
Table created.
SQL> insert into t1 (text) values ('a');
1 row created.
CTAS
SQL> create table t2 (id default 1 not null, text )
2 as select * from t1;
Table created.
SQL> select *from t2;
ID TEXT
---------- ----------
1 a
新しいテーブルは、古いテーブルのデータとともにデフォルト値で作成されます。