无法使用UNION的序列对象

时间:2016-06-02 09:29:26

标签: db2 zos

当我在一个句子中插入多行时:

INSERT INTO ORG01.RC_REFERENCIA(O9030_IDEMPR,O9030_COD_INT,O9030_TIP_REF,O9030_ID_REFER,O9030_FEC_ALT,O9030_UIDALTA )  
SELECT '0015',(NEXT VALUE FOR OR4ADM.SQ_REFCRU),'NT','10001','2008-12-31 00:00:00.000','ab110699' FROM SYSIBM.SYSDUMMY1 UNION ALL  
SELECT '0015',(NEXT VALUE FOR OR4ADM.SQ_REFCRU),'NT','10002','20 08-12-31 00:00:00.000','ab017705' FROM SYSIBM.SYSDUMMY1   

我收到此错误:

  

[INSERT - 0行,0.265秒] [错误代码:-348,SQL状态:428F9]   OR4ADM.SQ_REFCRU的下一个值不能在此上下文中指定。   SQLCODE = -348,SQLSTATE = 428F9,DRIVER = 4.18.60

当我只尝试使用一个select语句时,它可以正常工作:

INSERT INTO ORG01.RC_REFERENCIA(O9030_IDEMPR,O9030_COD_INT,O9030_TIP_REF,O9030_ID_REFER,O9030_FEC_ALT,O9030_UIDALTA )  
SELECT '0015',(NEXT VALUE FOR OR4ADM.SQ_REFCRU),'NT','10001','2008-12-31 00:00:00.000','ab110699' FROM SYSIBM.SYSDUMMY1  
  

..已执行1条语句,1行受影响,执行/获取时间:   0.110 / 0.000秒[1成功,0警告,0错误]

知道如何解决此错误?

1 个答案:

答案 0 :(得分:2)

这是Increment a sequence twice in DB2

的类似解决方案

以下是来自INSERT查询的SELECT,为避免限制而重写

INSERT INTO ORG01.RC_REFERENCIA(O9030_IDEMPR,O9030_COD_INT,O9030_TIP_REF,O9030_ID_REFER,O9030_FEC_ALT,O9030_UIDALTA )  
SELECT a,OR4ADM.SQ_REFCRU.NEXTVAL,b,c,d,e
FROM ( 
  SELECT '0015','NT','10001','2008-12-31 00:00:00.000','ab110699' FROM SYSIBM.SYSDUMMY1
  UNION ALL 
  SELECT '0015','NT','10002','2008-12-31 00:00:00.000','ab017705' FROM SYSIBM.SYSDUMMY1   
) AS t(a,b,c,d,e)

秘诀是首先以CTE创建数据,然后在最外面的SEQUENCE添加SELECT对象。