前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >出现 DB2 SQL Error: SQLCODE = -798, SQLSTATE = 428C9 错误的原因及解决方法

出现 DB2 SQL Error: SQLCODE = -798, SQLSTATE = 428C9 错误的原因及解决方法

作者头像
CG国斌
发布2018-01-08 18:04:28
2.1K0
发布2018-01-08 18:04:28
举报
文章被收录于专栏:维C果糖维C果糖

1 错误描述

在通过「DbVisualizer」执行 SQL 语句插入数据的时候,报出如下错误:

2 错误原因

通过观察上述标记出来的错误描述:

DB2 SQL Error: SQLCODE = -798, SQLSTATE = 428C9, SQLERRMC = ID

然后,查询「史上最全的 DB2 错误代码大全」可知,此错误的原因为:

-798 428C9 不能把一个值插入到用 GENERATED ALWAYS 定义的 ROWID 列

现在,我们在来看看我所使用的表的创建语句:

代码语言:javascript
复制
CREATE TABLE TBL_USER_CARD (
    ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY,
    VERSION INTEGER,
    USER_NAME VARCHAR(126) NOT NULL,
    CARD_NAME VARCHAR(16) NOT NULL,
    PRIMARY KEY (ID)
);

观察上述 SQL 语句及报出信息,我们可以发现在建表语句中,字段 ID 的后面确实定义了GENERATED ALWAYS AS IDENTITY的列属性,而报出信息里面也提到了 ID,因此我们可以确定问题就出在 ID 字段上面啦!那么在插入数据的时候,为什么会报这个错误呢?

实际上,在 DB2 中对于自增字段,我们可以通过如下两种方式指定:

  • 第 1 种GENERATED BY DEFAULT AS IDENTITY
  • 第 2 种GENERATED ALWAYS AS IDENTITY

两者的区别在于,第 1 种方式在插入数据时允许指定自增字段的值,只要不重复即可,并且数据库会自动设置下一个值;第 2 种方式则不允许指定,只能由数据库自动分配并插入。

通过观察建表语句,显然我们在建表的时候,是用第 2 种方式将字段 ID 设置为自增字段的,而我在插入语句的时候,却指定了 ID 字段的值。例如,

代码语言:javascript
复制
-- 错误的插入方法
INSERT INTO TBL_USER_CARD values(100, 0, 'charies', 'IQ_CARD'); 

如上面所示,此为错误的插入方式,错误的原因就在于我们设置了 ID 的值。

3 解决方法

既然我们已经知道了此错误发生的原因,那么修改就简单多了,方法有两种:

  • 第 1 种:修改建表语句,为
代码语言:javascript
复制
CREATE TABLE TBL_USER_CARD (
    ID BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY,
    VERSION INTEGER,
    USER_NAME VARCHAR(126) NOT NULL,
    CARD_NAME VARCHAR(16) NOT NULL,
    PRIMARY KEY (ID)
);
  • 第 2 种:插入数据时,将 ID 的值设置为default,例如
代码语言:javascript
复制
-- 正确的插入方法
INSERT INTO TBL_USER_CARD values(default, 0, 'charies', 'IQ_CARD'); 

如上所述,此两种方法都可以解决此错误,二者择一即可。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-11-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 错误描述
  • 2 错误原因
  • 3 解决方法
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档