【问题标题】:Unable to use a sequence object with UNION无法将序列对象与 UNION 一起使用
【发布时间】:2016-10-01 22:54:13
【问题描述】:

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

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   

我收到此错误:

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

当我只尝试一个选择语句时,它工作正常:

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 个错误]

知道如何解决这个错误吗?

【问题讨论】:

    标签: db2 zos


    【解决方案1】:

    这是与Increment a sequence twice in DB2类似的解决方案

    这是来自SELECT 查询的INSERT,已重写以避免限制

    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,然后在最外层的SELECT 上添加SEQUENCE 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-23
      • 2016-05-06
      • 1970-01-01
      • 2016-12-05
      • 2012-01-19
      相关资源
      最近更新 更多