小编kev*_*kev的帖子

在 Oracle 中的大表上将列类型从 varchar2 更改为数字的最快方法

我有一个包含 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

2
推荐指数
1
解决办法
1万
查看次数

标签 统计

oracle ×1