Page 1 sur 1

Champ calculé dans une table GENERATED AS ALWAYS

Posté : jeu. 23 juil. 2026, 18:41:56
par steph_62
Bonjour,

Je cherche à créer un champ calculé dans une table basé sur un numéro auto

pour faire très simple voici le create table :

create table toto(
quantite integer,
prix decimal(10,2),
montant decimal (15,2) generated always as (quantite * prix)
)
Cette commande renvoie une erreur, il semblerait que ce soit réservé à l'audit.

Error: [SQL0104] Elément syntaxique * n'est pas correct. Eléments possibles : . ACCTNG USERID APPLNAME PROGRAMID WRKSTNNAME.
SQLState: 42601
ErrorCode: -104


Après avoir cherché un bon moment et n'avoir pas trouvé d'exemples probants chez IBM je me suis tourné vers l'IA qui me dit qu'en principe en V7R5 c'est supporté mais ses réponses sont parfois hasardeuses je trouve et la conclusion est que ça devrait fonctionner mais en fait ce n'est pas le cas. Je peux contourner avec une vue mais j'aime bien savoir pourquoi ça ne fonctionne pas !

Cordialement,
Stéphane.

Re: Champ calculé dans une table GENERATED AS ALWAYS

Posté : ven. 24 juil. 2026, 07:32:06
par nbonnet
Bonjour,

vous ne pouvez pas utiliser de colonne provenant de la table pour une valeur générée.
La doc (cf https://www.ibm.com/docs/en/i/7.6.0?top ... eate-table) indique, à la section "as-generated-expression-clause", que l'on peut utiliser special-register et built-in-global-variable.

Pour faire ce calcul automatiquement, vous pouvez utiliser un trigger avant insertion/modification.

Re: Champ calculé dans une table GENERATED AS ALWAYS

Posté : ven. 24 juil. 2026, 07:45:16
par Hurri
Bonjour,

GENERATED ALWAYS ne sert qu'à générer des colonnes "identité", selon des règles diverses, mais çà reste une colonne identité.
Elle ne peut pas servir à générer des valeurs calculées.
L'utilisation d'une vue peut-être une bonne idée effectivement.

Re: Champ calculé dans une table GENERATED AS ALWAYS

Posté : lun. 27 juil. 2026, 13:28:07
par steph_62
nbonnet a écrit :
ven. 24 juil. 2026, 07:32:06
Bonjour,

vous ne pouvez pas utiliser de colonne provenant de la table pour une valeur générée.
La doc (cf https://www.ibm.com/docs/en/i/7.6.0?top ... eate-table) indique, à la section "as-generated-expression-clause", que l'on peut utiliser special-register et built-in-global-variable.

Pour faire ce calcul automatiquement, vous pouvez utiliser un trigger avant insertion/modification.
Bonjour,
Mon profil étant réactivé je peux répondre :D
Donc le fait que je n'ai rien trouvé est normal, l'IA se plante donc totalement, peut-être un amalgame avec la version ZOS de DB2 ?
Merci beaucoup
Cordialement,
Stéphane.

Re: Champ calculé dans une table GENERATED AS ALWAYS

Posté : lun. 27 juil. 2026, 13:29:31
par steph_62
Hurri a écrit :
ven. 24 juil. 2026, 07:45:16
Bonjour,

GENERATED ALWAYS ne sert qu'à générer des colonnes "identité", selon des règles diverses, mais çà reste une colonne identité.
Elle ne peut pas servir à générer des valeurs calculées.
L'utilisation d'une vue peut-être une bonne idée effectivement.
Apparemment pas mal de moteur BDD supportent, c'est dommage car une vue reste une vue avec les limitations qu'elle implique.

Re: Champ calculé dans une table GENERATED AS ALWAYS

Posté : lun. 27 juil. 2026, 13:30:55
par nbonnet
N'hésitez pas à soumettre vos idées/besoins ici : https://ideas.ibm.com/