Db2 单个alter table语句中的多个alter column语句导致';行长度超出限制';

Db2 单个alter table语句中的多个alter column语句导致';行长度超出限制';,db2,ddl,alter-table,Db2,Ddl,Alter Table,我在9.7.0.2版中使用DB2 我使用以下DDL创建了一个表: CREATE TABLE atable ( id int PRIMARY KEY NOT NULL, int1 int NOT NULL, int2 int NOT NULL, smallint1 smallint NOT NULL, dec1 decimal(11,2) DEFAULT 0 NOT NULL, dec2 decimal(11,2) DEFAULT

我在9.7.0.2版中使用DB2

我使用以下DDL创建了一个表:

  CREATE TABLE atable (
     id int PRIMARY KEY NOT NULL,
     int1 int NOT NULL,
     int2 int NOT NULL,
     smallint1 smallint NOT NULL,

     dec1 decimal(11,2) DEFAULT 0 NOT NULL,
     dec2 decimal(11,2) DEFAULT 0 NOT NULL,
     dec3 decimal(11,2) DEFAULT 0 NOT NULL,
     dec4 decimal(11,2) DEFAULT 0 NOT NULL,
     dec5 decimal(11,2) DEFAULT 0 NOT NULL,
     dec6 decimal(11,2) DEFAULT 0 NOT NULL,
     dec7 decimal (11,2) DEFAULT 0 NOT NULL,
     dec8 decimal(11,2) DEFAULT 0 NOT NULL
  );

  CREATE INDEX i_atable_int1 ON atable(int1);
  CREATE UNIQUE INDEX pk_atable ON atable(id);
我想放大所有十进制列的长度。因此,我运行一个
altertable
语句,如下所示:

    ALTER TABLE atable
        ALTER COLUMN dec1 SET DATA TYPE decimal(23, 4)
        ALTER COLUMN dec2 SET DATA TYPE decimal(23, 4)
        ALTER COLUMN dec3 SET DATA TYPE decimal(23, 4)
        ALTER COLUMN dec4 SET DATA TYPE decimal(23, 4)
        ALTER COLUMN dec5 SET DATA TYPE decimal(23, 4)
        ALTER COLUMN dec6 SET DATA TYPE decimal(23, 4)
        ALTER COLUMN dec7 SET DATA TYPE decimal(23, 4)
        ALTER COLUMN dec8 SET DATA TYPE decimal(23, 4);
这导致:
表的行长度超过了“4005”字节的限制。(表空间“USERSPACE1”。)。SQLCODE=-670,SQLSTATE=54010,DRIVER=3.59.81 SQL代码:-670,SQL状态:54010

在16k页面大小的表空间中创建表时,该语句不会失败,但请记住,手工计算的行长度远远超过4005字节

当我将语句拆分为多个
alter table
时,事情也变得很奇怪:

    ALTER TABLE atable
        ALTER COLUMN dec1 SET DATA TYPE decimal(23, 4);
    ALTER TABLE atable
        ALTER COLUMN dec2 SET DATA TYPE decimal(23, 4);
    ALTER TABLE atable
        ALTER COLUMN dec3 SET DATA TYPE decimal(23, 4);
    ALTER TABLE atable   
        ALTER COLUMN dec4 SET DATA TYPE decimal(23, 4);
    ALTER TABLE atable
        ALTER COLUMN dec5 SET DATA TYPE decimal(23, 4);
    ALTER TABLE atable
        ALTER COLUMN dec6 SET DATA TYPE decimal(23, 4);
    ALTER TABLE atable
        ALTER COLUMN dec7 SET DATA TYPE decimal(23, 4);
    ALTER TABLE atable
        ALTER COLUMN dec8 SET DATA TYPE decimal(23, 4);
运行所有语句,并放大列


这种令人惊讶的行为的原因是什么?

检查您的脚本,我运行了它,我得到了:在atable(id)SQL0605W上创建唯一索引pk_atable该索引没有创建,因为具有匹配定义的索引“SYSIBM.SQL130507163010350”已经存在。SQLSTATE=01550BTW,其余的在v9.7.4 64位中为我工作。整个脚本在我的版本上运行@AngocA你能第二次修改一行吗?我可以在创建表之后执行它,但是我不能第二次执行它。