|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
![]() ![]() Yoann MoreauIngénieur en laboratoire de recherche Inscription : septembre 2005 Messages : 723 ![]() |
Bonjour,
J'ai une table stockant des données avec une relation parent-enfant(s), les noms des éléments de cette table sont stockés dans une autre table. Les données représentes des balises XML. Citation:
Code :
Citation:
Je ne vois pas où le problème se situe exactement, la phrase du message d'erreur ne me parait pas très claire. Si quelqu'un peut m'éclairer, merci d'avance ! |
||||
|
00
|
|
|
#2 | |
|
Membre Expert
![]() Inscription : mars 2005 Messages : 1 565 ![]() |
Bonjour,
Quand vous dites : Citation:
Code :
SELECT CAST(names.tag_name AS VARCHAR(256)) || '/' || pathto.path, parent_tag Code :
SELECT CAST(names.tag_name || '/' || pathto.path AS VARCHAR(256)), parent_tag |
|
|
|
00
|
|
|
#3 |
![]() ![]() Yoann MoreauIngénieur en laboratoire de recherche Inscription : septembre 2005 Messages : 723 ![]() |
En effet je n'avais essayé que la première proposition, par contre en faisant un cast en VARCHAR pour que cela corresponde au retour de la fonction. Je viens d'essayer de convertir l'ensemble de l'expression comme suggéré, l'erreur est toujours la même.
Si j'essaye de tout convertir en varchar(256) ça fonctionne par contre, mais ça ne m'arrange pas trop, car c'est le nom de chaque élément qui est limité à 255 et donc leur concaténation pourrait dépasser cette limite. C'est peut être ma syntaxe CAST(tag_name AS VARCHAR) qui n'est pas bonne ? pour obtenir le type global character varying. |
|
00
|
|
|
#4 |
|
Membre Expert
![]() Inscription : mars 2005 Messages : 1 565 ![]() |
Si vous pouviez donner les requêtes testées et les messages obtenus au lieu de retranscrire tout ça en phrases, ce serait pas mal pour la compréhension.
Concernant la fonction, c'est anecdotique, commencez par régler les problèmes de la requête en ne travaillant que sur la requête jusqu'à ce qu'elle fonctionne et donne le résultat escompté. Vous verrez son encapsulation dans une fonction dans un deuxième temps si vous voulez bien. Concernant la requête récursive, vous avez bien compris, le but est de faire coïncider les types de la partie non récursive (requête avant l'union aussi appelé "anchor" dans le jargon de MS SQL) avec ceux de la partie récursive (requête après l'union). Pour le problème de restriction de longueur imposé par le type VARCHAR de tag_name de la partie non récursive, vous pouvez caster celui-ci vers une longueur plus grande. Cependant, en restant sur un type VARCHAR, vous êtes forcément limité par la définition de sa taille initiale. Comme votre arborescence n'a aucune limite en nombre de lignes, il y a une contradiction. Solutions : - Castez vers un VARCHAR de longueur plus importante que vous estimez suffisante pour votre résultat - Castez vers du TEXT qui n'impose pas de limite de taille |
|
|
00
|
|
|
#5 | ||
![]() ![]() Yoann MoreauIngénieur en laboratoire de recherche Inscription : septembre 2005 Messages : 723 ![]() |
Désolé si je n'étais pas clair, mon idée de départ était de faire un cast sur les varchar(256) vers du varchar tout court qui selon la doc est illimité en taille. Mais effectivement il ne m'était pas venu à l'esprit qu'on pouvait aussi passer ça en text, merci.
C'est donc ce que j'ai fait, et tout fonctionne bien, voilà la procédure modifiée : Code :
Merci beaucoup pour votre aide ! |
||
|
00
|
Copyright © 2000-2012 - www.developpez.com