Oracle将列设置为unused,然后创建同名的新列

x.5*_*509 2 sql oracle ddl

所以我有一个脚本,它创建一个名为ID的列.

alter table table_name add (ID NUMBER(2))
Run Code Online (Sandbox Code Playgroud)

现在作为回滚脚本的一部分,此列被设置为UNUSED,因为它几乎不可能删除此列

alter table table_name set unused column ID;
Run Code Online (Sandbox Code Playgroud)

现在,由于我们之前创建此列的delta脚本相同,如果我们再次运行delta以"添加"此列,那么它可以吗?应该采取什么方法来解决这个问题?

我记得设置一个未使用的列将从字典中删除它并将1个字节的空值添加到列但添加相同名称的相同列,它会没事吗?

APC*_*APC 7

检查这个很容易:

SQL> create table t23 (
  2  id number
  3  , col1 varchar2(10)
  4  );

Table created.

SQL> alter table t23
  2      set unused column id;

Table altered.

SQL> desc t23
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COL1                                               VARCHAR2(10)

SQL> alter table t23 
  2      add (id number)   
  3  /

Table altered.

SQL> desc t23
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COL1                                               VARCHAR2(10)
 ID                                                 NUMBER

SQL> 
Run Code Online (Sandbox Code Playgroud)

当然,我的示例与您的场景并不完全相同,但基本上您可以根据需要重复SET UNUSED和ADD循环.但是我建议你在某些时候进行清理:

SQL> alter table t23 drop unused columns
  2  /

Table altered.

SQL> 
Run Code Online (Sandbox Code Playgroud)

你可以在慢的时候做到这一点.