当我在一个句子中插入多行时:
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错误]
知道如何解决此错误?
答案 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
对象。