我的数据库中有以下字段:
[NUMBER列中的所有数据都是数字。我想将VARCHAR类型更改为Integer NUmber类型。如何做到没有数据丢失?
Oracle不允许修改该列的数据类型,如果它不是空的,这是一种解决方法,您需要执行以下步骤
NUMBER
数据类型的列,比方说"NUMBER1"
。"NUMBER"
列的数据添加到新创建的列("NUMBER1"
)。"NUMBER"
列"NUMBER1"
重命名为"NUMBER"
如下:
Oracle设置:
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>
干杯!