如何更改char数据类型大小,如果在列值中也有



我正在尝试更改CHAR数据类型的大小。

create table test1(name char2(7));
select * from test1;   //table empty

然后:

alter table test1 modify name char(4);

更改CHAR数据类型。

但是:

create table test2(name char2(7));
insert into test2 values('aaa');

然后我尝试更改CHAR数据类型的大小:

alter table test2 modify name char(4);

但它返回错误:

Error starting at line : 4 in command -
alter table test modify name char(4)
Error report -
ORA-01441: cannot decrease column length because some value is too big
01441. 00000 -  "cannot decrease column length because some value is too big"
*Cause:    
*Action:

如何更改CHAR数据类型的大小?

CHAR是一个固定大小的字符串,如果您试图将一个较短的字符串放入列中,则它将用空格填充。

使用VARCHAR2,或者创建第二个较短的CHAR列,然后从较大的列中插入SUBSTR

选项1

CREATE TABLE test1( name CHAR(7) );
INSERT INTO test1 ( name ) VALUES ( '123' );
SELECT name, LENGTH( name ) FROM test1;

输出:

NAME|LENGTH(NAME(:---------------|---------------:123|7

然后,如果您这样做:

ALTER TABLE test1 ADD ( name2 CHAR(4) );
UPDATE test1
SET name2 = SUBSTR( name, 1, 4 );
ALTER TABLE test1 DROP COLUMN name;
ALTER TABLE test1 RENAME COLUMN name2 TO name;
SELECT name, LENGTH( name ) FROM test1;

输出:

NAME|LENGTH(NAME(:---|----------------:123|4

选项2

或者,您可以使用VARCHAR2:

CREATE TABLE test2( name VARCHAR2(7) );
INSERT INTO test2 ( name ) VALUES ( '123' );
ALTER TABLE test2 MODIFY ( name VARCHAR2(4) );

这很管用。

db<gt;fddle此处

最新更新