我正在尝试在DB2中执行以下语句。
这很有效。
SELECT NEXT VALUE FOR SCPYMNT.REM_QUERY_NO_SEQ
FROM sysibm.sysdummy1
但是,这会引发数据库错误。
SELECT (
CASE WHEN PYMT_SYS = 1 THEN NEXT VALUE FOR SCPYMNT.REM_QUERY_NO_SEQ
WHEN PYMT_SYS = 2 THEN 'dummy'
else 'dummy'
END )
FROM sysibm.sysdummy1
所以Db2给出了以下错误。
Category Timestamp Message
Statusbar 18.04.2016 11:47:39 DB2 Database Error: ERROR [428F9] [IBM][DB2] SQL0348N "NEXT VALUE FOR SCPYMNT.REM_QUERY_NO_SEQ" cannot be specified in this context. SQLSTATE=428F9
在我看来,没有语法错误.Db2不允许这样的查询包含案例条件和序列吗?
@ MichaelTiefenbacher,我把选择的例子作为演示。(我真正想要实现的是下面的内容。
SELECT NAME, QUERYNO
FROM FINAL TABLE (INSERT INTO EMPSAMP (NAME, SALARY, QUERYNO)
VALUES('Mary Smith', 35000.00,
CASE WHEN PYMT_SYS = 1 THEN NEXT VALUE FOR REM_SEQ
CASE WHEN PYMT_SYS = 2 NEXT VALUE FOR EFT_SEQ
));
我认为问题现在更清楚了。
答案 0 :(得分:0)
在将数据插入表格时,序列可用于生成唯一键或数字。 选择数据时,它们不用于生成唯一数字。 为此,您可以从插入时使用序列的表中检索字段,也可以在SELECT中使用row_number()。
告诉你想要实现的目标会更有帮助。
答案 1 :(得分:0)
答案 2 :(得分:0)
从选择联合中插入:
SELECT NAME, QUERYNO
FROM FINAL TABLE
(
INSERT INTO EMPSAMP
SELECT
'Mary Smith', 35000.00, NEXT VALUE FOR REM_SEQ
FROM SYSIBM.SYSDUMMY1
WHERE PYMT_SYS = 1
UNION ALL
'Mary Smith', 35000.00, NEXT VALUE FOR EFT_SEQ
FROM SYSIBM.SYSDUMMY1
WHERE PYMT_SYS = 2
)