我有一个包含 VARCHAR2 列的表,我必须将其更改为 NUMBER。
该表包含超过 3000 万行。
表定义:
CREATE TABLE EFF (
MOD VARCHAR2(6) NOT NULL,
MP VARCHAR2(6) NOT NULL,
PROG VARCHAR2(1) NOT NULL,
RNK VARCHAR2(4) NOT NULL,
EFF_STS VARCHAR2(1),
EFF_PART VARCHAR2(1),
CONSTRAINT PK_EFF PRIMARY KEY (MOD, MP, PROG, RNK)
);
Run Code Online (Sandbox Code Playgroud)
我在 Oracle 11g 上用于更改RNK
列类型的代码:
ALTER TABLE EFF ADD (NRNK NUMBER(5));
UPDATE EFF SET NRNK = TO_NUMBER(RNK);
ALTER TABLE EFF MODIFY (NRNK NUMBER(5) NOT NULL);
Run Code Online (Sandbox Code Playgroud)
然后我会修改主键并删除旧列:
ALTER TABLE EFF DROP PRIMARY KEY DROP INDEX;
ALTER TABLE EFF ADD …
Run Code Online (Sandbox Code Playgroud) oracle ×1