如何在 ORACLE 中使用 GET_DDL 获取 table 中具有 DEFAULT 值的列
how to get coulmns with DEFAULT value in table using GETDDL in ORACLE
我使用 dbms_metadata 编写了一个自动化脚本来为模式中的所有表生成 CTAS 脚本。
SELECT ' CREATE TABLE '
||SUBSTR(TABLE_NAME,1,26)
||'_BKK ('
||COL
||')'
|| ' NOLOGGING AS SELECT '
|| COL
|| ' FROM '
|| TABLE_NAME
||';' QUERY
FROM DATA2;
但是注意到 CTAS 不会复制每列的默认值。有什么方法可以获得默认列和值,以便我可以围绕它创建自动脚本吗?
However noticed that CTAS does not copy the default value for each columns
原因很简单。 CTAS 旨在仅复制数据而不复制元数据(table 结构除外)。
所以,你会输:
- 所有约束
- 所有索引
- 所有赠款
基本上,与 table.
可选相关的所有内容
您将必须提取元数据并更改 table 并明确应用它。
alter table new_table_name modify (column default 1);
或者,您可以:
- 使用dbms_metadata.get_ddl得到tableDDL
- 重命名 table 新名称
- 将数据从旧 table 插入到新 table。
当然,后者会慢很多
更新
有一种方法可以使用CTAS提供默认值和非空约束 :
设置
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
新 table 是使用默认值以及旧 table 中的数据创建的。
感谢@Lalit Kumar B 对 CTAS 工作原理的详细描述。但是,我想在 table 中获取具有默认值的库尔姆,以便我可以在其上编写一些自动化脚本。
Select TABLE_NAME, COLUMN_NAME, DATA_DEFAULT
from DBA_TAB_COLUMNS
where DATA_DEFAULT is not null
上面的查询帮助获取所有具有 DEFAULT 的列,并使用它附加到自动脚本的结果
我使用 dbms_metadata 编写了一个自动化脚本来为模式中的所有表生成 CTAS 脚本。
SELECT ' CREATE TABLE '
||SUBSTR(TABLE_NAME,1,26)
||'_BKK ('
||COL
||')'
|| ' NOLOGGING AS SELECT '
|| COL
|| ' FROM '
|| TABLE_NAME
||';' QUERY
FROM DATA2;
但是注意到 CTAS 不会复制每列的默认值。有什么方法可以获得默认列和值,以便我可以围绕它创建自动脚本吗?
However noticed that CTAS does not copy the default value for each columns
原因很简单。 CTAS 旨在仅复制数据而不复制元数据(table 结构除外)。
所以,你会输:
- 所有约束
- 所有索引
- 所有赠款
基本上,与 table.
可选相关的所有内容您将必须提取元数据并更改 table 并明确应用它。
alter table new_table_name modify (column default 1);
或者,您可以:
- 使用dbms_metadata.get_ddl得到tableDDL
- 重命名 table 新名称
- 将数据从旧 table 插入到新 table。
当然,后者会慢很多
更新
有一种方法可以使用CTAS提供默认值和非空约束 :
设置
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
新 table 是使用默认值以及旧 table 中的数据创建的。
感谢@Lalit Kumar B 对 CTAS 工作原理的详细描述。但是,我想在 table 中获取具有默认值的库尔姆,以便我可以在其上编写一些自动化脚本。
Select TABLE_NAME, COLUMN_NAME, DATA_DEFAULT
from DBA_TAB_COLUMNS
where DATA_DEFAULT is not null
上面的查询帮助获取所有具有 DEFAULT 的列,并使用它附加到自动脚本的结果