Bonjour,
J'aimerais savoir s'il est possible d'obtenir la valeur générée lors d'un INSERT pour une colonne déclarée de cette manière :
ID INTEGER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 )
Bonjour,
J'aimerais savoir s'il est possible d'obtenir la valeur générée lors d'un INSERT pour une colonne déclarée de cette manière :
ID INTEGER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 )
C'est possible mais que dans un programme car la valeur d'une colonne IDENTITY ne peut être renvoyée que dans une variable comme le montre l'exemple ci-dessous extrait du Redbook IBM.
La variable ivar est déclarée en numérique quelque part dans le programme.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 /exec sql CREATE TABLE EMPLOYEE + (EMPNO INTEGER GENERATED ALWAYS AS IDENTITY + (START WITH 1 INCREMENT BY 1), + NAME CHAR(30), + SALARY DECIMAL(5,2), + DEPT SMALLINT) /end-exec /exec sql INSERT INTO EMPLOYEE + (NAME, SALARY, DEPT) + VALUES('Rupert', 989.99, 50) /end-exec /exec sql VALUES IDENTITY_VAL_LOCAL() INTO :ivar /end-exec
L'instruction VALUES IDENTITY_VAL_LOCAL() INTO ... doit suivre immédiatement l'instruction INSERT INTO ...
Parfait! merci![]()
Pour info voici le code java qui permet de récupérer l'id auto généré:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Statement stmt = conn.createStatement(); stmt.execute("INSERT INTO XX.YYY(COL1, COL2) VALUES (113, 'JFD')" ); ResultSet rs = stmt.executeQuery("SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1"); if(rs.next()) { System.out.println(rs.getString(1)); // ID auto généré }
Partager