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.