Oracle устанавливает столбец неиспользуемым, а затем создает новый столбец с тем же именем - PullRequest
2 голосов
/ 20 октября 2011

Итак, у меня есть скрипт, который создает столбец с именем ID.

alter table table_name add (ID NUMBER(2))

Теперь, как часть сценария отката, для этого столбца установлено значение UNUSED, поскольку практически невозможно удалить этот столбец

alter table table_name set unused column ID;

Теперь, поскольку у нас есть тот же дельта-скрипт, который ранеесоздавал этот столбец, если мы снова запустим дельту, чтобы «добавить» этот столбец, все будет в порядке?Какой подход следует использовать для решения этой проблемы?

Я помню, что установка столбца неиспользованный удаляла бы его из словаря и добавляла нулевое значение в 1 байт, но добавляя тот же столбец с тем жеимя, это будет хорошо?

1 Ответ

7 голосов
/ 20 октября 2011

Это достаточно просто проверить:

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> 

Конечно, мой пример не совсем совпадает с вашим сценарием, но в основном вы можете повторять циклы SET UNUSED и ADD столько раз, сколько захотите.Однако я бы порекомендовал вам в какой-то момент запустить очистку:

SQL> alter table t23 drop unused columns
  2  /

Table altered.

SQL> 

Вы можете сделать это в медленное время.

...