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.