如何更改 Oracle 10G 中列的长度(以字符为单位)?
How to alter a column's length (in character) in Oracle 10G?
我正在使用 Oracle 10 G,我想将列大小从 30 个字符减少到 20 个字符。
Table 名称是 member
,列是 member_name
,它是 varchar2(30)
数据类型。
我的问题:有什么查询可以做到吗?如果有,那是什么?
如果 VARCHAR2
列有一些数据,则不能直接减小其大小。
你需要
- 创建大小减小的新列。
- 在新列中填写数据
- 删除旧列
- 重命名新列
查询应该如下:
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 是一个 db<>fiddle.
我强烈推荐这种方法,因为它与现有的约束和索引兼容。
我正在使用 Oracle 10 G,我想将列大小从 30 个字符减少到 20 个字符。
Table 名称是 member
,列是 member_name
,它是 varchar2(30)
数据类型。
我的问题:有什么查询可以做到吗?如果有,那是什么?
如果 VARCHAR2
列有一些数据,则不能直接减小其大小。
你需要
- 创建大小减小的新列。
- 在新列中填写数据
- 删除旧列
- 重命名新列
查询应该如下:
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 是一个 db<>fiddle.
我强烈推荐这种方法,因为它与现有的约束和索引兼容。