合并命令DB2 AIX(更新确定,插入不正常)

时间:2013-06-22 20:39:24

标签: merge db2

我目前正在使用AIX DB2 9.7上的merge命令。 我想要实现的只是编写一个命令,当已经检查了主键的行时执行和更新,如果没有,则执行Insert语句。 这就是我期望的merge命令可以用于。

选择一些东西    如果存在则更新    如果不存在那么isert

更新语句有效(我可以在我的Toad中看到),当然也可以在数据库中使用,例如时间戳。但插入不起作用。 没有显示合成错误,但没有插入。 Toad显示“已成功执行”。

感谢任何帮助。 WHERE子句显示表的主键。

    MERGE INTO DSPTMCP.KENNZAHL_DEFINITION as KD
USING(Select NR_MANDANT, SL_GRUPPE_KENNZAHL, SL_KENNZAHL
FROM DSPTMCP.KENNZAHL_DEFINITION
WHERE NR_MANDANT = 5472 AND SL_GRUPPE_KENNZAHL = '_VBH' AND SL_KENNZAHL = 104) as KD1
ON(KD.NR_MANDANT = KD1.NR_MANDANT AND KD.SL_GRUPPE_KENNZAHL = KD1.SL_GRUPPE_KENNZAHL AND KD.SL_KENNZAHL = KD1.SL_KENNZAHL)
WHEN MATCHED Then
UPDATE SET
BEZ_KENNZAHL_ABS = 'MEFGA',
BEZ_KENNZAHL_REL = 'Aufgaben',
BEZ_EINHEIT_ABS = '%',
BEZ_EINHEIT_REL = '%',
SL_MODIFIZIERUNG = 3,
ANZ_NACHKOMMASTELLEN_ABS = 2,
ANZ_NACHKOMMASTELLEN_REL = 2,
KZ_QUALITAETSZIEL_ABS = 'H',
KZ_QUALITAETSZIEL_REL = 'H',
BEZ_ERMITTLUNGSFREQUENZ = 'Monatl.',
BEZ_ERMITTLUNGSART = 'Automat',
BEZ_DATENLIEFERANT = 'Geschäftsfelddaten',
TXT_QUELLINFORMATION = 'Geschäftsfelddaten',
TXT_KNZ_BESCHREIBUNG = 'Aufgaben',
FAK_REF_GEWICHT = 1,
KZ_HILFSGROESSE = 'N',
SL_GRUPPE_KENNZAHL_REL = 'ALLG',
SL_KENNZAHL_REL = 10,
FAK_ERGEBNIS_REL = 1,
BEZ_EINHEIT_QUELLE = '%',
FAK_UMRECHNUNG_QUELLE = 1,
KZ_REF_OHNE_VORZEICHEN = 'N'
WHEN Not MATCHED Then
INSERT (NR_MANDANT,
SL_GRUPPE_KENNZAHL,
SL_KENNZAHL,
SYS_DWH_TSP,
SL_MODIFIZIERUNG,
UID_ERFASSUNG,
TSP_ERFASSUNG,
UID_AENDERUNG,
TSP_AENDERUNG,
BEZ_EINHEIT_ABS,
ANZ_NACHKOMMASTELLEN_ABS,
SL_GRUPPE_KENNZAHL_REF,
SL_KENNZAHL_REF,
KZ_REF_OHNE_VORZEICHEN,
SL_REF_VERDICHTUNG,
BEZ_KENNZAHL_ABS,
BEZ_KENNZAHL_REL,
KZ_HIERARCHIESUMME,
KZ_QUALITAETSZIEL_ABS,
KZ_QUALITAETSZIEL_REL,
BEZ_ERMITTLUNGSFREQUENZ,
BEZ_ERMITTLUNGSART,
IHT_MINIMAL,
IHT_MAXIMAL,
IHT_MINIMAL_REL,
IHT_MAXIMAL_REL,
BEZ_DATENLIEFERANT,
TXT_QUELLINFORMATION,
DAT_ERFASSUNG_AB,
DAT_ERFASSUNG_BIS,
TXT_KNZ_BESCHREIBUNG,
FAK_REF_GEWICHT,
KZ_HILFSGROESSE,
SL_GRUPPE_KENNZAHL_REL,
SL_KENNZAHL_REL,
FAK_ERGEBNIS_REL,
BEZ_EINHEIT_QUELLE,
FAK_UMRECHNUNG_QUELLE,
BEZ_EINHEIT_REL,
ANZ_NACHKOMMASTELLEN_REL)
VALUES(5472,
'_VBH',
'104',
current timestamp,
3,
'AUTOMAT',
current timestamp,
'AUTOMAT',
current timestamp,
'%',
2,
null,
null,
'N',
null,
'Aufgaben',
'Aufgaben',
'N',
'H',
'H',
'Monatl.',
'Automat',
null,
null,
null,
null,
'Geschäftsfelddaten',
'Geschäftsfelddaten',
'01.01.2000',
'31.12.9999',
'Aufgaben',
1,
'N',
'ALLG',
'10',
1,
'%',
1,
'%',
2);

1 个答案:

答案 0 :(得分:1)

问题解决了。来自using子句的目标表不必为空。 将它切换到sysdummy,现在可以正常工作。

像这样的东西

MERGE INTO DSPTMCP.KENNZAHL_DEFINITION as KD
USING(Select 5472 AS NR_MANDANT, '_KCR' AS SL_GRUPPE_KENNZAHL, 
600 AS SL_KENNZAHL FROM sysibm.sysdummy1) as KD1
ON(KD.NR_MANDANT = KD1.NR_MANDANT AND KD.SL_GRUPPE_KENNZAHL = KD1.SL_GRUPPE_KENNZAHL AND KD.SL_KENNZAHL = KD1.SL_KENNZAHL)
WHEN MATCHED THEN