Welcome Guest! Log in
×

Notice

The forum is in read only mode.
Due to some maintenance operations, stambia.org will be switched to read-only mode during the 13th November. It will be possible to read and download, but impossible to post on the forums or create new accounts. For any question please contact the support team.

Topic-icon Question Récupérer un à un les noms de colonne d'une table

More
22 Aug 2016 19:21 #1 by olivier
olivier created the topic: Récupérer un à un les noms de colonne d'une table
Bonjour,

est-il possible de récupérer les noms d'une colonne une à une pour ensuite les récupérer pour faire un traitement spécifique suivant le contexte.

pour ensuite les exploiter dans un lien bind

j'ai affecter un tag

je récupéré mes champs
%x{md:patternList($SOURCE/ref:columns()[tech:tag()='XPO'], 'head.[name]', ',\n')}x%

mais je les ai en liste champs1, champs2, etc...

je voudrais obtenir
plusieurs lignes
champs1,
champs2,
etc....

merci de votre aide
More
23 Aug 2016 14:10 #2 by Thomas BLETON
Thomas BLETON replied the topic: Récupérer un à un les noms de colonne d'une table
Bonjour,
La présence du \n devrait générer un saut de ligne.
Avez-vous consulté le résultat dans un éditeur qui affiche bien les "\n" comme des sauts de lignes ?
Dans la vue 'step details' du Designer, de mon côté cela produit bien des sauts de ligne.
More
24 Aug 2016 18:26 #3 by Emmanuel Rambeau
Emmanuel Rambeau replied the topic: Récupérer un à un les noms de colonne d'une table
Bonsoir,

Pas forcément besoin d'un bind :)
Je suis en 18.1, je ne sais pas si cette façon marche sur des versions antérieures. Tu peux faire ainsi :

- Un process père, sur lequel tu glisses ta table comme pour une connexion
- A l'intérieur du process : une "xsl variable", de type "xpath" avec le code "$this/metaDataLink/mdj:getMetaDataRef(.)" . Tu l'appelles "TABLE_NAME"
- Sur le traitement que tu souhaites répéter (un process, un SQL...), dans l'onglet "Generation", partie "Repetition"
- Xpath query : $TABLE_NAME/ref:columns()
- Variable Name : CURRENT_COLUMN
- Si tu as besoin d'une connexion, remplis le paramètre SQL_CONNECTION avec %connection{$TABLE_NAME}%

Et à partir de là, tu peux appeler ta variable qui correspond au nom de colonne avec la syntaxe %x{$CURRENT_COLUMN/tech:name()}x% (au lieu de :{CURRENT_COLUMN}: pour un bind classique)

L'avantage de faire comme ça, c'est que tu as un SQL généré par requête (contrairement au bind qui ne montre pas le SQL exact généré, et surtout ne donne pas la valeur de variable pour laquelle tu aurais une erreur).
Il existe des moyens pour exclure certaines colonnes, n'hésite pas à demander, je t'ai donné la version courte.


Par contre, cela implique que ta métadonnée soit identique à ce qui existe physiquement.
Pour un besoin similaire sur Oracle, j'ai fini par passer par la table dictionnaire (DBA_TAB_COLUMNS de mémoire)...
Et cette fois-ci, tu peux bien y aller avec un bind.

Bonne soirée :)

Emmanuel