Champ calculé dans une table GENERATED AS ALWAYS

RPG (3 et 4, free), CL, SQL, etc...
Répondre
steph_62
Messages : 10
Enregistré le : mar. 27 sept. 2022, 11:59:55

Champ calculé dans une table GENERATED AS ALWAYS

Message 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.

nbonnet
Messages : 228
Enregistré le : mar. 11 sept. 2018, 08:20:13
Localisation : Lyon

Re: Champ calculé dans une table GENERATED AS ALWAYS

Message 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.
Nathanaël

Hurri
Messages : 66
Enregistré le : lun. 02 nov. 2020, 16:04:59

Re: Champ calculé dans une table GENERATED AS ALWAYS

Message 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.

Répondre