是否可以在db2语句中使用序列?

时间:2016-04-18 08:55:45

标签: sql db2

我正在尝试在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 

));

我认为问题现在更清楚了。

3 个答案:

答案 0 :(得分:0)

在将数据插入表格时,序列可用于生成唯一键或数字。 选择数据时,它们不用于生成唯一数字。 为此,您可以从插入时使用序列的表中检索字段,也可以在SELECT中使用row_number()。

告诉你想要实现的目标会更有帮助。

答案 1 :(得分:0)

我发现答案是"否"根据IBM文档。

  

在以下上下文中无法指定NEXT VALUE表达式:   案例表达

以下是link

答案 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
)