Welcome Guest! Log in

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

More
22 Aug 2016 19:21 #1 by olivier
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

Please Log in or Create an account to join the conversation.

More
23 Aug 2016 14:10 #2 by Thomas BLETON
Replied by Thomas BLETON on 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.

Please Log in or Create an account to join the conversation.

More
24 Aug 2016 18:26 #3 by Emmanuel Rambeau
Replied by Emmanuel Rambeau on 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

Please Log in or Create an account to join the conversation.