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.
Je voudrais récupérer tous les ancêtres d'un élément donné et en faire une chaine de type XPath, j'ai trouvé un article donnant des exemples de requêtes faisant exactement cela, j'ai tenté de reprendre le code en l'adaptant :tags (bigint id_tag PK, int id_tag_name, int parent_tag)
tag_names (int id_tag_name PK, varchar(256) tag_name)
Et j'obtiens cette erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 CREATE FUNCTION get_path(id INTEGER) RETURNS VARCHAR AS $$ SELECT '/' || path FROM (WITH RECURSIVE pathto(path, id) AS ( SELECT tag_name, parent_tag FROM tags NATURAL JOIN tag_names WHERE id_tag = $1 UNION SELECT names.tag_name || '/' || pathto.path, parent_tag FROM tags NATURAL JOIN tag_names AS names, pathto WHERE tags.id_tag = pathto.id) SELECT * FROM pathto) AS pathto(path, id) WHERE parent_tag IS NULL; $$ LANGUAGE 'sql';
J'ai donc tenté (pour voir) de changer le type renvoyé par la fonction en varchar(256), ou de faire un cast sur tag_name ligne 4, celui ligne 6, et les deux en même temps. L'erreur ne change pas.ERREUR: dans la requête récursive « pathto », la colonne 1 a le type character varying(256) dans le terme non récursif mais le type global character varying
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 !
Partager