Bonjour,

Je souhaiterais utiliser une requête SQL pour créer une vue à partir d'une autre vue notamment.

Le contexte est le suivant: mon système gère des contrats liés à des activités (1 contrat peut être lié à 1 ou plusieurs activités). Chaque activité est liée à un "domaine" (1 activité peut être lié à 1 ou plusieurs domaines).

J'ai une 1ère vue basé sur les tables de ma base de données afin d'obtenir les lignes contrats liés aux activités et aux domaines:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
SELECT c.Id_CONTRAT,
a.Id_ACTIVITE,
a.Id_DOMAINE
FROM LIEN_CONTRAT_ACTIVITE c, activite a
WHERE c.Id_CONTRAT = a.Id_CONTRAT
Id_CONTRAT Id_ACTIVITE Id_DOMAINE
1 118 2
2 266 2
2 269 3
3 272 3
4 275 5
4 283 8
4 301 8


J'effectue la requête suivante:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
SELECT id_contrat, LISTAGG(id_domaine, ';') WITHIN GROUP (ORDER BY id_domaine) AS id_domaine
FROM
   (SELECT id_contrat, id_domaine 
     FROM VUE_CONTRAT_ACTIVITE_DOMAINE
      WHERE Id_CONTRAT IS NOT NULL
    GROUP BY id_contrat, id_domaine)
GROUP BY id_contrat
Ceci me permet d'obtenir les résultats sous une certaine forme. Cette query est opérationnelle:

Titre_CONTRAT Id_DOMAINE
Contrat 1 2
Contrat 2 2;3
Contrat 3 3
Contrat 4 5;8

Par contre si je récupère cette query pour créer une vue avec SQL Developer, j'obtiens l'erreur suivante:

SQL Parse Results:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
Error(s) parsing SQL:
Unexpected token near *!* in the following:
SELECT id_contrat, LISTAGG(id_domaine, ';') WITHIN *!*GROUP (ORDER BY id_domaine) AS id_domaine
Unexpected token near *!* in the following:
SELECT id_contrat, LISTAGG(id_domaine, ';') WITHIN *!*GROUP (ORDER BY id_domaine) AS id_domaine
Missing expression near *!* in the following:
SELECT id_contrat, LISTAGG(id_domaine, ';') WITHIN *!*GROUP (ORDER BY id_domaine) AS id_domaine
Je ne sais pas si ceci est dû au fait que j'appelle une vue pour créer cette vue

Pourriez-vous m'aider à résoudre ce problème?

Merci d'avance,