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.
Champ calculé dans une table GENERATED AS ALWAYS
Re: Champ calculé dans une table GENERATED AS ALWAYS
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.
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.
Nathanaël
Re: Champ calculé dans une table GENERATED AS ALWAYS
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.
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
Bonjour,nbonnet a écrit : ↑ven. 24 juil. 2026, 07:32:06Bonjour,
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.
Mon profil étant réactivé je peux répondre
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
Apparemment pas mal de moteur BDD supportent, c'est dommage car une vue reste une vue avec les limitations qu'elle implique.Hurri a écrit : ↑ven. 24 juil. 2026, 07:45:16Bonjour,
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
N'hésitez pas à soumettre vos idées/besoins ici : https://ideas.ibm.com/
Nathanaël