Un utilisateur ne peut modifier que les colonnes ST_ASSMT_NM et CAN_DT dans l'enregistrement ST_ASSMT_REF. Dans notre système, nous conservons l'historique dans la même table et nous ne mettons jamais vraiment à jour un enregistrement, nous insérons simplement une nouvelle ligne pour représenter l'enregistrement mis à jour. Par conséquent, l'enregistrement "actif" est l'enregistrement avec la plus grande valeur d'horodatage LAST_TS pour un VENDR_ID. Pour éviter la possibilité d'une mise à jour des colonnes qui ne peuvent pas être modifiées, j'ai écrit le UPDATE logique afin qu'il récupère les valeurs non modifiables de l'enregistrement d'origine et les copie vers le nouveau en cours de création. Pour les champs qui peuvent être modifiés, je les passe comme params,DB2: utilisation non valide de l'un des éléments suivants: un marqueur de paramètre non typé, le mot-clé DEFAULT ou une valeur nulle
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;
Cependant, je reçois cette erreur:
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.
Il semble que DB2 ne me permet pas d'utiliser une variable une instruction SELECT. Par exemple, lorsque je le fais dans TOAD pour DB2:
select 1, @vendorId from SYSIBM.SYSDUMMY1
Je reçois une boîte de dialogue contextuelle. Lorsque je fournis une valeur de chaîne, j'obtiens la même erreur.
J'ai l'habitude d'utiliser SQL Server et je suis assez sûr que je n'aurais pas de problème à faire cela, mais je ne suis pas sûr de savoir comment le gérer.
Suggestions? Je sais que je pourrais le faire en deux commandes séparées, 1 interroger SELECT pour récupérer les valeurs d'origine et ensuite fournir les valeurs retournées et celles modifiées à la commande INSERT, mais je devrais être capable de faire des thios en un. Pourquoi je ne peux pas?
J'ai dû convertir les variables @ pour correspondre aux types de données des colonnes cibles. – ChadD
Impossible de poster ceci comme réponse. Je ne sais pas pourquoi ce site donne des erreurs si souvent. Cela ne se produit que lorsque j'utilise la machine de mon entreprise. – ChadD