如何在 Oracle 10G 中更改列的长度字符?

问题描述

我正在使用 Oracle 10 G,我想将列大小从 30 个字符减少到 20 个字符。 表名是 member,列是 member_name,它是一个 varchar2(30) 数据类型。

我的问题:有什么查询可以做吗?如果是,那是什么?

解决方法

如果 VARCHAR2 列有一些数据,您不能直接减小它的大小。

你需要

  1. 创建大小减小的新列。
  2. 在新列中填充数据
  3. 删除旧列
  4. 重命名新列

查询应如下:

alter table member add member_name_new varchar2(20);
update member set member_name_new = member_name;
alter table member drop column member_name;
alter table member rename column member_name_new to member_name; 
,

可以就地更改字符串列的长度。但是如果现有值太大,则会出现错误。因此,只需先缩短列:

update t
    set col = substr(col,1,20)
    where length(col) > 20;

那么:

alter table t modify x varchar2(20)

Here 是一个 dbfiddle。

强烈推荐这种方法,因为它与现有的约束和索引兼容。