Вот некоторые тестовые данные:
SQL> select * from MACAddresses
2 /
COMPUTER MACADDRESS
---------- ------------
100 123456789abc
200 acef35dd6ecc
SQL>
Добавление нового столбца довольно просто:
SQL> alter table MACAddresses
2 add corrected_MACAddress varchar2(17)
3 /
Table altered.
SQL>
Обратите внимание, что вы не можете сделать его NOT NULL на этом этапе, потому что вы ужеесть несколько записей в таблице.Поэтому, если вы хотите применить такое ограничение, вам нужно сначала его заполнить.
Это самый простой способ обновления нового столбца.
SQL> update MACAddresses
2 set corrected_MACAddress = substr(macaddress, 1,2)||':'||
3 substr(macaddress, 3,2)||':'||
4 substr(macaddress, 5,2)||':'||
5 substr(macaddress, 7,2)||':'||
6 substr(macaddress, 9,2)||':'||
7 substr(macaddress, 11,2)
8 /
2 rows updated.
SQL> select * from MACAddresses
2 /
COMPUTER MACADDRESS CORRECTED_MACADDR
---------- ------------ -----------------
100 123456789abc 12:34:56:78:9a:bc
200 acef35dd6ecc ac:ef:35:dd:6e:cc
SQL>
Теперь, если у вас более сложный паттерн или вы хотите выполнять эту операцию на регулярной основе, я предлагаю вам затратить усилия, чтобы превратить ее в функцию и, возможно, удалить это повторение вв то же время.
Наконец, если вы хотите применить обязательное ограничение, вы можете:
SQL> alter table MACAddresses
2 modify corrected_MACAddress not null
3 /
Table altered.
SQL>