【问题标题】:How to create ROWID column in DB2?如何在 DB2 中创建 ROWID 列?
【发布时间】:2016-10-08 20:32:00
【问题描述】:

我试过了:

  CREATE TABLE rowid_type
  (
  col1 ROWID NOT NULL GENERATED ALWAYS,
  col2 int
  );

错误:

错误:DB2 SQL 错误:SQLCODE=-104, SQLSTATE=42601, SQLERRMC=GENERATED ALWAYS;col1 ROWID NOT NULL;, DRIVER=4.14.111

SQL 状态:42601

错误代码:-104

编辑

我参考了这个链接-https://www.ibm.com/support/knowledgecenter/en/SSEPEK_10.0.0/com.ibm.db2z10.doc.apsg/src/tpc/db2z_specifydirectrowaccess.html?view=embed

它显示:

CREATE TABLE EMPLOYEE
  (EMP_ROWID   ROWID NOT NULL GENERATED ALWAYS,
   EMPNO       SMALLINT,
   NAME        CHAR(30),
   SALARY      DECIMAL(7,2),
   WORKDEPT    SMALLINT);

编辑2

  • 产品名称:DB2/LINUXX8664
  • 版本:10.5.0.5

【问题讨论】:

  • 我希望GENERATED ALWAYS AS IDENTITY
  • 您在哪个 DB2 上?您添加的链接适用于 DB2 for z/OS,错误可能来自 DB2 LUW
  • 有一些严重的警告限制了ROWID 类型的有用性(在文档中提到)。特别是,由于可以在 reorg 上重新分配该值,因此只有在您有一个索引唯一键开头时它才真正有用...

标签: db2


【解决方案1】:

[我的回答适用于 DB2 LUW,问题已更新,现在指向 DB2 for z/OS]

试试这样的:

CREATE TABLE rowid_type
(
  col1 int NOT NULL GENERATED ALWAYS AS IDENTITY,
  col2 int
);

还有更多可用的选项,例如设置开始值和停止值。详情请见DB2 docs on identity columns

【讨论】:

  • 我现在很困惑。 ROWID 是您提到的 int 作为数据类型的类型吗?
  • 取决于您的 DB2 版本、平台和配置。大多数用户具有 INT 或其他数字类型,然后生成身份。您使用的是 z/OS 还是 LUW 还是 i?
  • 产品名称:DB2/LINUXX8664,版本:10.5.0.5
  • 所以您使用的是 DB2 LUW,但您阅读或链接的文档是针对另一个产品 DB2 for z/OS。我建议使用INT 数据类型,如我的回答中所示,因为 DB2 LUW 没有 ROWID 类型。
  • 我是 DB2 新手。很抱歉造成混乱。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-27
相关资源
最近更新 更多