osc*_*tin 4 oracle alter-table varchar2
它目前是VARCHAR2(200)
数据库中的一个,但它需要被提升到VARCHAR(1000)
,所以我试图运行这个脚本:
ALTER TABLE CONTRACTOR MODIFY
(
NOTE VARCHAR2(1000)
);
Run Code Online (Sandbox Code Playgroud)
Oracle给了我这个:
ORA-01429:索引组织表:没有用于存储溢出行块的数据段
这是一个10g的数据库.有什么想法吗?我可以创建一个重复的列,复制数据,然后删除旧列,但我想知道在我这样做之前这个错误是什么.
Vin*_*rat 12
根据文档,您需要为可能很大的行指定溢出段以适合单个块.
考虑(10.2.0.3 - 8k块):
SQL> CREATE TABLE contractor (
2 ID NUMBER PRIMARY KEY,
3 data_1 CHAR(1000),
4 data_2 CHAR(1000),
5 data_3 CHAR(1000),
6 data_4 CHAR(1000),
7 data_5 CHAR(1000),
8 NOTE VARCHAR2(200)
9 )
10 ORGANIZATION INDEX;
ORA-01429: Index-Organized Table: no data segment to store overflow row-pieces
Run Code Online (Sandbox Code Playgroud)
但是,当您指定溢出段时:
SQL> CREATE TABLE contractor (
2 ID NUMBER PRIMARY KEY,
3 data_1 CHAR(1000),
4 data_2 CHAR(1000),
5 data_3 CHAR(1000),
6 data_4 CHAR(1000),
7 data_5 CHAR(1000),
8 NOTE VARCHAR2(200)
9 )
10 ORGANIZATION INDEX
11 OVERFLOW TABLESPACE USER_DATA;
Table created
Run Code Online (Sandbox Code Playgroud)