2016-06-02 19 views
0

Wenn ich mehrere Zeilen in einem Satz einzufügen:kann nicht mit UNION ein Sequenzobjekt verwenden

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 

ich diesen Fehler:

[INSERT - 0 row(s), 0.265 secs] [Error Code: -348, SQL State: 428F9] NEXT VALUE FOR OR4ADM.SQ_REFCRU CANNOT BE SPECIFIED IN THIS CONTEXT. SQLCODE=-348, SQLSTATE=428F9, DRIVER=4.18.60

Wenn ich versuche, nur mit einer select-Anweisung, es funktioniert :

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 statement(s) executed, 1 row(s) affected, exec/fetch time: 0.110/0.000 sec [1 successful, 0 warnings, 0 errors]

Jede Idee, wie kann ich diesen Fehler beheben?

Antwort

2

Dies ist eine ähnliche Lösung Increment a sequence twice in DB2

Hier ist die INSERT aus SELECT Abfrage, neu geschrieben, die Beschränkung zu vermeiden

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) 

Das Geheimnis ist, die Daten als ein CTE zuerst zu erstellen, fügen Sie dann die SEQUENCE Objekt auf der äußersten SELECT.