Bonjour tout le monde!

J'ai un problème dans une requête avec "contains...inpath". Voilà les détails:

La table ADDRESSES contient des numéros postaux et le code ISO du pays. La table TEXTS contient, entre autre, un champ TEXT de type CLOB. Ce champ CLOB contient du XML (une adresse en XML: <adr><zip>1000</zip><country>CH</country></adr>).

Je dois chercher toutes les adresses de la table ADDRESSES qui correspondent à une entrée de la table TEXTS. Voilà la requête:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
WITH adr AS (SELECT a.address_id, a.zip, a.country FROM addresses a)
SELECT p.name, p.firstname, adr.zip, adr.country
FROM adr, texts t, people p
WHERE adr.zip IS NOT NULL 
    AND adr.country IS NOT NULL
    AND p.address_id_fk = a.address_id
    AND t.text_id = 1234
    AND contains (t.text, adr.zip || ' inpath(//adr/zip)') > 0
    AND contains (t.text, adr.country || ' inpath(//adr/country)') > 0;
Mon problème est dans les "contains". Le second (recherche de correspondance avec le pays) fonctionne, si je ne mets que celui-ci j'obtiens la liste de toutes les personnes correspondant au pays en question.

Mais le premier "contains" ne fonctionne pas. Si je le mets comme ci-dessus, j'ai l'erreur suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
ORA-20000: Oracle Text error:
DGR-50901: text query parser syntax error on line 1, column 1
Si je remplace dans ce "contains" adr.zip par '2630' (le no postal que je devrais obtenir), j'obtiens la liste complète pour le pays correspondant, comme si je ne mettais pas le "contains".

Problème texte/numérique ? Précision: le champ ADDRESSES.ZIP est du varchar2(10)

Si quelqu'un a une idée... merci d'avance !!