Ein Benutzer kann nur die ST_ASSMT_NM- und CAN_DT-Spalten im ST_ASSMT_REF-Datensatz ändern. In unserem System behalten wir den Verlauf in der gleichen Tabelle und wir aktualisieren nie wirklich einen Datensatz. Wir fügen einfach eine neue Zeile ein, um den aktualisierten Datensatz darzustellen. Als Ergebnis ist der "aktive" Datensatz der Datensatz mit dem größten LAST_TS-Zeitstempelwert für eine VENDR_ID. Um die Möglichkeit einer Aktualisierung auf Spalten zu verhindern, die nicht geändert werden können, habe ich das logische UPDATE geschrieben, so dass es die nicht veränderbaren Werte aus dem ursprünglichen Datensatz abruft und sie in den neuen Datensatz kopiert, der gerade erstellt wird. Für die Felder, die geändert werden können, gebe ich sie als params,DB2: ungültige Verwendung einer der folgenden: eine untypisierte Parametermarkierung, das Schlüsselwort DEFAULT oder ein Nullwert
INSERT INTO GSAS.ST_ASSMT_REF
(
VENDR_ID
,ST_ASSMT_NM
,ST_CD
,EFF_DT
,CAN_DT
,LAST_TS
,LAST_OPER_ID
)
SELECT
ORIG_ST_ASSMT_REF.VENDR_ID
,@ST_ASSMT_NM
,ORIG_ST_ASSMT_REF.ST_CD
,ORIG_ST_ASSMT_REF.EFF_DT
,@CAN_DT
,CURRENT TIMESTAMP
,@LAST_OPER_ID
FROM
(
SELECT
ST_ASSMT_REF_ACTIVE_V.VENDR_ID
,ST_ASSMT_REF_ACTIVE_V.ST_ASSMT_NM
,ST_ASSMT_REF_ACTIVE_V.ST_CD
,ST_ASSMT_REF_ACTIVE_V.EFF_DT
,ST_ASSMT_REF_ACTIVE_V.CAN_DT
,CURRENT TIMESTAMP
,ST_ASSMT_REF_ACTIVE_V.LAST_OPER_ID
FROM
G2YF.ST_ASSMT_REF_ACTIVE_V ST_ASSMT_REF_ACTIVE_V --The view of only the most recent, active records
WHERE
ST_ASSMT_REF_ACTIVE_V.VENDR_ID = @VENDR_ID
) ORIG_ST_ASSMT_REF;
Allerdings erhalte ich diese Fehlermeldung:
DB2 SP
:
ERROR [42610] [IBM][DB2] SQL0418N The statement was not processed because the statement contains an invalid use of one of the following: an untyped parameter marker, the DEFAULT keyword, or a null value.
Es scheint, als ob DB2 wird mir nicht erlauben, eine Variable zu verwenden, in eine SELECT-Anweisung Zum Beispiel, wenn ich dies in TOAD für DB2 mache:
Ich bekomme ein Popup-Dialogfeld. Wenn ich einen String-Wert zur Verfügung stelle, bekomme ich den gleichen Fehler.
Ich benutze normalerweise SQL Server und ich bin ziemlich sicher, dass ich kein Problem dabei hätte, aber ich bin nicht sicher, wie man damit umgeht.
Vorschläge? Ich weiß, dass ich das in zwei separaten Befehlen machen könnte, 1 frage SELECT, um die ursprünglichen VALUES zu erhalten, und gebe dann die zurückgegebenen Werte und die modifizierten Werte an den INSERT-Befehl weiter, aber ich sollte Thios in einem tun können. Warum kann ich nicht?
Ich musste die @ Variablen umwandeln, um die Datentypen der Zielspalten zu entsprechen. – ChadD
Kann nicht als Antwort gepostet werden. Ich weiß nicht, warum diese Seite so oft Fehler gibt. Es tritt nur auf, wenn ich die Maschine meiner Firma benutze. – ChadD