尝试在两列之间添加db2列时出错

尝试在两列之间添加db2列时出错,db2,alter,Db2,Alter,我正在尝试在两个现有列之间添加一个新列。这里我使用“after”子句插入新列。下面是我的问题 alter table doc add column alt_title varchar(10) after title; 我看到下面的错误 An unexpected token "title" was found following "varchar(10) after". Expected tokens may include: "REFERENCES".. SQLCODE=-104

我正在尝试在两个现有列之间添加一个新列。这里我使用“after”子句插入新列。下面是我的问题

   alter table doc add column alt_title varchar(10) after title;
我看到下面的错误

An unexpected token "title" was found following "varchar(10) after".  
Expected tokens may include:  "REFERENCES".. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.8.86
Elapsed Time:  0 hr, 0 min, 0 sec, 0 ms.

我甚至尝试了before子句,得到了相同的结果。有人能帮我解决这个问题吗?< /p> 没有办法通过在中间添加一个列来修改表,但是可以用好的结构重新创建表。

  • 您可以创建第二个表,该表的列数与第一个表的列数相同,并且具有所需的顺序
  • 您可以通过提供列名来执行插入选择
  • 将第一列的约束添加到第二列中
  • 在第一个表中删除约束
  • 最后,重命名表

您可以通过使用db2look获得所有这些信息。

对于DB2来说,前面的
和后面的
都不是有效的语法。我无法想象为什么有人会关心DDL中的列位置,但如果你这样做,你需要删除表,并在需要的地方用新列重新创建它。@mustaccio为了减少日志使用,列中的顺序很重要:@AngocA--顺便问一下这个问题,我非常怀疑OP是在日志优化之后进行的。毕竟,VARCHAR列被添加到表的中间。@ MuStucIO确实是这样的,问题似乎更像是“select *”的列顺序,然而,作为我们的回答者,我们必须提供开放的答案。这个问题可以帮助其他人提高性能,中间的VARCHAR有助于减少在更新时列不改变的日志记录。DB2forIBMiV7.1及更高版本支持
BEFORE
子句。@我不知道这一点。听起来很有趣。通过在第9列中指定DDL,可以(我没有尝试)使用ADMIN_MOVE_表: