Oracle не позволяет изменять тип данных столбца, если он не пустой, так что в качестве обходного пути. Необходимо выполнить следующие шаги
- создать другой столбец с данными
NUMBER
типа скажем "NUMBER1"
. - добавить данные столбца
"NUMBER"
в этот новый созданный столбец ("NUMBER1"
). - Удалить исходный столбец
"NUMBER"
- Переименуйте вновь созданный столбец
"NUMBER1"
в "NUMBER"
следующим образом:
Oracle setup:
SQL> CREATE TABLE YOUR_TABLE (
2 ID NUMBER(10, 0),
3 "NUMBER" VARCHAR(255)
4 );
Table created.
SQL> DESC YOUR_TABLE;
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER(10)
NUMBER VARCHAR2(255)
SQL> INSERT INTO YOUR_TABLE VALUES (1,'1');
1 row created.
SQL> COMMIT;
Commit complete.
Отображение ошибки при прямом изменении типа данных столбца:
SQL> ALTER TABLE YOUR_TABLE MODIFY "NUMBER" NUMBER;
ALTER TABLE YOUR_TABLE MODIFY "NUMBER" NUMBER
*
ERROR at line 1:
ORA-01439: column to be modified must be empty to change datatype
Решение:
SQL> ALTER TABLE YOUR_TABLE ADD "NUMBER1" NUMBER;
Table altered.
SQL>
SQL> UPDATE YOUR_TABLE
2 SET "NUMBER1" = "NUMBER";
1 row updated.
SQL>
SQL> ALTER TABLE YOUR_TABLE DROP COLUMN "NUMBER";
Table altered.
SQL>
SQL> ALTER TABLE YOUR_TABLE RENAME COLUMN "NUMBER1" TO "NUMBER";
Table altered.
SQL> DESC YOUR_TABLE;
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER(10)
NUMBER NUMBER
SQL>
Ура !!