menu

arrow_back Comment connaître la valeur générée dans un champ IDENTITY?

par Actif
(360 points) 13 26
dans Base de données
0 votes
Bonjour,

Comment fait-on pour connaître la valeur générée dans un champ IDENTITY suite à un INSERT sur la table qui le contient? Et ceux sans avoir à refaire un accès à la table?

Cordialement,

Olivier.

2 Réponses

par Actif
(360 points) 13 26
sélectionné par
 
Meilleure réponse
0 votes

Re-Bonjour, 

La solution m'a été fourni par IBM : https://www.ibm.com/support/pages/how-determine-last-value-identity-column-after-insert-statement

Déterminer la dernière valeur utilisée par une colonne IDENTITY

La requête suivante est à placer juste après la requête d'insertion:

SELECT IDENTITY_VAL_LOCAL() AS id FROM SYSIBM/SYSDUMMY1

Cordialement, 

Olivier.

par Averti
(979 points) 2 30 35
1 vote

Bonjour et bonne année !

On peut utiliser une instruction sql toute en un pour récupérer les valeurs générées par un insert :

  EXEC SQL
    SELECT ID,
           TS_MDF
      INTO :P_ENREG.ID,
           :P_ENREG.TS_MDF
      FROM FINAL TABLE (
          INSERT INTO MATABLE(
                NOM,
                INTITULE
              )
            VALUES
              (
                :P_ENREG.NOM,
                :P_ENREG.INTITULE
              )
        )
      WITH UR;                       

Ici on récupère l'identité ID dans la variable hôte P_ENREG.ID, ainsi qu'un horodatage généré TS_MDF dans P_ENREG.TS_MDF

2 Commentaires apportés

0
Bonjour Denis,

Je te souhaites mes meilleurs voeux pour cette année 2022.

Je vais essayer ta méthode. Vu comme tu l'as présenté, on peut mettre ça dans une sous-procédure référencée dans un programme de service.

Je te souhaites le meilleur,

Olivier.
0
merci,

effectivement c'est un programme de service qui gère toutes les opérations sur la table : création, contrôles sur les champs (hors contraintes sql), modification avec contrôle d'intégrité, ouverture dynamique de curseur sur la table, etc..., en paramètre des fonctions on a souvent une ds externe de la table ou d'une vue dépendante. c'est bien pratique et c'est à peu près un "DAO" (data access object).

Questions liées

0 votes
2 réponses 318 vues
Comment faire un Insert dans une table à partir d'une autre table équivalent à Eval-cor en RPGComment fait-on un INSERT d'une table à partir d'une autre dont les champs ont le même nom sans énumérer tous les champs dans la requête? En RPG, l'équivalent est Eval-c ...
par ibmiiste Confirmé
(1.4k points)
06-Juillet-2018 posée dans Base de données
0 votes
1 réponse 155 vues
Comment connaître le nombre d'enregistrements insérés par SQL dans un SQLRPGLEBonjour, Comment fait-on pour connaître le nombre d'enregistrements qui ont été créés dans une tables lorsque cela est fait par uns requête sql embarquée dans un program ...
par Denis Averti
(979 points)
09-Juillet-2018 posée dans Base de données
0 votes
1 réponse 34 vues
Comment faire une procédure stockée qui va faire des Insert/update en masse?Bonjour, Une application web va nous envoyer des données à stocker dans la base IBM i. Nous allons utiliser dans un premier temps une procédure stockée(en attendant l'ar ...
par Olivier Actif
(360 points)
18-Janvier posée dans Base de données
0 votes
1 réponse 298 vues
Comment récaler une valeur sur une colonne IDENTITY?J'ai effacé une table avec un colonne définit en IDENTITY. C'est à dire qu'elle s'incrémente automatiquement. Je veux la remplir de nouveau mais j'ai besoin de faire repr ...
par ibmiiste Confirmé
(1.4k points)
02-Aout-2018 posée dans Base de données
0 votes
1 réponse 51 vues
Comment teste t'on la nullité d'un champ en SQL?Bonjour, Dans une requête SQL contenant un Left Join, je souhaite rechercher un enregistrement qui ne soit pas nul dans la table se situant à droite du left join. Et po ...
par Olivier Actif
(360 points)
23-Décembre-2021 posée dans Base de données