在db2中向一个identity列插入值

3

你好,我想通过一个脚本将数据插入到一个具有自增列的DB2表中。我了解到可以使用以下语法:

INSERT INTO SOME_TABLE OVERRIDING SYSTEM VALUE ...

看起来应该可行,但实际上却不行。以下是具体的查询语句:

INSERT INTO SCHEMA.MYTABLE OVERRIDING SYSTEM VALUE (
     IDENTITY_COLUMN
    ,SOMEVALUE
    ,CREATEDTIME
    ,UPDATEDTIME
) VALUES (
     2
    ,'656566'
    ,'2012-07-12 16:25:34'
    ,NULL
);

I get the following error:

SQL0104N  An unexpected token "VALUE" was found following "DE OVERRIDING 
SYSTEM".  Expected tokens may include:  "<space>".  SQLSTATE=42601

谢谢!


1
答案取决于您选择不与我们分享的确切表定义、DB2版本和平台。OVERRIDING SYSTEM VALUE子句似乎只在DB2 for i中有效。 - mustaccio
然而,IBM i使用7字节的错误代码(通常格式为AAAxxxx,3个字母和4个数字(现在是十六进制)),因此8个字符的错误代码来自其他地方。 - WarrenT
@WarrenT 这是在运行db2命令行代码时得到的完全正常的错误代码。相应的SQL错误代码为-104。 - Peter Schuetze
@Peter Schuetze:当您讨论DB2 for i时,"db2命令行代码"是什么意思?我不知道i上有任何"db2命令行"。 - user2338816
@user2338816 在db2 LUW中,那是一个完全正常的错误代码。 - Peter Schuetze
@mustaccio:这是标准的SQL功能,例如参见ISO/IEC 9075-2:2016(E) 14.11 <insert statement>。由于Db2相当符合标准,我认为这与版本和平台无关。 - Lukas Eder
1个回答

0

如果您正在使用Db2 for i,从语法上讲,该子句位于列列表之后,请参阅文档以及SQL标准规范ISO/IEC 9075-2:2016(E) 14.11 <insert statement>。因此,请编写:

INSERT INTO SCHEMA.MYTABLE (
     IDENTITY_COLUMN
    ,SOMEVALUE
    ,CREATEDTIME
    ,UPDATEDTIME
) 
OVERRIDING SYSTEM VALUE -- Put it here
VALUES (
     2
    ,'656566'
    ,'2012-07-12 16:25:34'
    ,NULL
);

此语法“OVERRIDING SYSTEM VALUE”仅适用于 Db2-for-i(as/400)遗留平台。它在当前2021年支持的版本的Db2-LUW或Db2-Z/OS上不可用。 - mao
@mao:好的,但考虑到这个错误只是一个简单的语法错误,我怀疑在这种情况下它并不重要。正如我所提到的,这也是SQL标准中定义的语法,并且至少PostgreSQL和H2也支持它。 - Lukas Eder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接