Bonjour, J'ai un problème dont l'énoncé est un peu long, mais je tente quand même. Merci de votre aide.
J'ai plusieurs tables, par exemple :
table app_toto, colonnes : intdate char(8), inttime char(5), formula varchar(99), result NUMBER, resdate DATE, zyxw NUMBER, vutsr NUMBER, ...
table app_titi, colonnes intdate char(8), inttime char(5), formula varchar(99), result NUMBER, resdate DATE, abcd NUMBER, efgh NUMBER, ijkl NUMBER, ...
table app_...
Le nombre de tables app_% dans un même schéma n'est pas connu à l'avance.
Pour chacune de ces tables, les 5 premières colonnes (intdate, inttime, formula, result, resdate) sont toujours là.
Les autres ne sont pas connues à l'avance, ni leur nom, ni leur nombre.
Pour chaque ligne, le champ formula de la table app_toto contient une formule du style "zyxw + vutsr" ou "zyxw * vutsr". Cette formule peut changer suivant les lignes,
mais il s'agit toujours d'une formule qui est fonction des colonnes.
De même, pour chaque ligne de la table app_titi, le champ formula contient une formule du style "if (abcd + efgh) * ijkl >= 95% then 100%", dans un langage à trouver.
Chaque table a un état avant traitement puis un état après traitement, le but étant d'écrire ce qu'il faut pour réaliser ce traitement.
J'ai donc besoin d'aide pour écrire une ou plusieurs procédure(s) et/ou fonction(s) qui permette(nt) à un curseur se baladant
d'une ligne à une autre (donc d'une date à une autre) pour chaque table, d'évaluer la formule en fonction des colonnes et
d'inscrire le résultat dans le champ result et d'inscrire dans le champ resdate la date à laquelle le calcul est fait (sysdate).
Il s'agit donc de convertir une chaîne de caractères en code interprété ! (en évitant de développer un langage, donc en considérant que
la chaîne de caractères est directement interprétable)
Exemple :
Table APP_TOTO avant traitement :
INTDATE | INTTIME | FORMULA | RESULT | RESDATE | zyxw | vutsr | ...
09/02/19 | 1400 | "zyxw + vutsr" | NULL | NULL | 1 | 1 |
09/02/19 | 1500 | "zyxw + vutsr" | NULL | NULL | 1 | 0 |
09/02/19 | 1600 | "zyxw * vutsr" | NULL | NULL | 1 | 0 |
09/02/19 | 1700 | "zyxw * vutsr" | NULL | NULL | 1 | 1 |
...
table APP_TOTO après traitement
INTDATE | INTTIME | FORMULA | RESULT | RESDATE | zyxw | vutsr | ...
09/02/19 | 1400 | "zyxw + vutsr" | 2 | 20.02.2009 14:05:10 | 1 | 1 |
09/02/19 | 1500 | "zyxw + vutsr" | 1 | 20.02.2009 14:05:10 | 1 | 0 |
09/02/19 | 1600 | "zyxw * vutsr" | 0 | 20.02.2009 14:05:10 | 1 | 0 |
09/02/19 | 1700 | "zyxw * vutsr" | 1 | 20.02.2009 14:05:10 | 1 | 1 |
...
Les formules peuvent être de différents types :
"zyxw + vutsr"
"if (abcd + efgh) * ijkl >= 95% then 100%"
"max (zyxw, vutsr)"
et elles sont toujours fonction des colonnes.
L'exercice, plus complexe en réalité, voudrait que le champ formula contienne un identifiant
qui "pointe" sur une formule dans une autre table.
Si quelqu'un a compris cette pseudo spécification, arriverait-il à me proposer quelque chose ?
Ou quelque chose qui n'a rien à voir mais qui permet le traitement de façon générique.
Si impossible, en perl, ça me va aussi...
Merci beaucoup !
Partager