Bonjour,

Je suis en train de construire une procédure PL/SQL mais je rencontre quelques difficultés. Je vous explique :

Le but de ma procédure est de construire une requête SELECT avec des INTERSECT, puis d'utiliser le résultat de cette requête afin de l'insérer dans une Vue ou un tableau pour une future utilisation..

voici le code de la construction de la requête SELECT qui est fonctionnel :
en ajoutant le code de l'insertion a la fin de la procedure, le bloc devient erroné

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
 
create or replace PROCEDURE P_RequetesDansCible(
      nSysteme_id         IN SYST_PHASE.SYSTEME_ID%TYPE,
      sPhases_id          IN SYST_PHASE.PHASE_ID%TYPE,
      nModeleSystemeID    IN PROJ_SYSTEMES.DEF_SYSTEME_ID%TYPE,
      nTypeSystemeID      IN NS_NATURE_APPLICABLE.TYPE_ID%TYPE,
      nProjet_id          IN REQUETES.PROJET_ID%TYPE,
      dtDateDebut         IN REQUETES.DATE_SOUMISSION%TYPE,
      dtDateFin           IN REQUETES.DATE_SOUMISSION%TYPE,
      nWfClientID         IN NS_REQ_DELAI.WF_CLIENT_ID%TYPE,
      nReturnCode	      IN OUT NUMBER
	) AS
BEGIN
 
DECLARE
 
    NumLigne       INTEGER;
 
    strQuery       VARCHAR2(2000) := ' ';
    CURSOR Creq
    IS
    SELECT DISTINCT(delai_id) FROM ns_matrice_delai WHERE phase_id= sPhases_id;
 
BEGIN
	strSelect   := ' ';
    NumLigne    := 1;
 
    FOR Crec IN Creq LOOP
 
     strQuery := ' ( SELECT R.REQUETE_ID, R.SOMMAIRE, RN.DESCRIPTION, RSV.DESCRIPTION, R.DEMANDEE_PAR, RST.DESCRIPTION,
            R.AFFECTEE_A_RES, VSS.DESCRIPTION, C.NOM_CLIENT
        FROM
             REQUETES R, REQ_NATURES RN, REQ_SEVERITES RSV, REQ_STATUT RST,
              PROJ_SYSTEMES P, SYST_PHASE SP, v_sous_systemes VSS, CLIENTS C , NS_REQ_DELAI NRD
        WHERE
              R.NATURE_ID = RN.NATURE_ID
              AND RSV.SEVERITE_ID = R.SEVERITE_ID
              AND R.SYSTEME_ID = P.SYSTEME_ID
              AND SP.SYSTEME_ID = P.SYSTEME_ID
              AND RN.TYPE_ID = P.TYPE_ID
              AND R.STATUT_ID = RST.STATUT_ID
              AND R.SYSTEME_ID = nSysteme_id
              AND R.PHASES_ID = sPhases_id
              AND R.SYSTEME_ID =  P.SYSTEME_ID
              AND SP.SYSTEME_ID =  P.SYSTEME_ID
              AND R.PHASES_ID = SP.PHASE_ID
              AND P.DEF_SYSTEME_ID = nModeleSystemeID
              AND R.SS_SYSTEME_ID = VSS.ss_systeme_id
              AND P.DEF_SYSTEME_ID = VSS.SYSTEME_ID
              AND R.CLIENT_ID = C.CLIENT_ID
              AND R.NATURE_ID IN (SELECT NATURE_ID FROM ns_nature_applicable WHERE type_id = nTypeSystemeID
              AND SYSTEME_ID = nSysteme_id
              AND PHASE_ID = sPhases_id
              AND NVL(sla_applicable, 0)=1 )
              AND R.PROJET_ID = nProjet_id
              AND R.SYSTEME_ID =    nSysteme_id
              AND R.PHASES_ID = sPhases_id
              AND TRUNC(R.DATE_SOUMISSION) >= dtDateDebut
              AND TRUNC(R.DATE_SOUMISSION) <= dtDateFin
              AND NRD.PHASES_ID = sPhases_id
              AND NRD.wf_client_id = nWfClientID
              AND NRD.SEVERITE_ID = R.SEVERITE_ID
              AND NRD.REQUETE_ID = R.REQUETE_ID
 
              AND NRD.DELAI_ID = Crec.delai_id AND NRD.DELAIREEL <= (SELECT TO_NUMBER(VALEUR)
                                               FROM ns_matrice_delai
                                               WHERE
                                               DELAI_ID = NRD.DELAI_ID
			                                         AND DELAI_ID = Crec.delai_id
                                               AND wf_client_id = NRD.wf_client_id
                                               AND SYSTEME_ID = R.SYSTEME_ID
                                               AND PHASE_ID = R.PHASES_ID
                                               AND SEVERITE_ID = R.SEVERITE_ID
                                               )
          )  ';
 
          NumLigne := NumLigne +1;
          strSelect := strSelect|| strQuery;
 
          IF NumLigne <> Creq%ROWCOUNT  THEN
           strSelect := strSelect || 'INTERSECT';
          END IF;
      END LOOP;
 
 
-- ici le code de l'insertion des valeurs avec "strSelect" dans la table qui est déja préparée
 
	insert into synthese_sla_temp (strSelect);
 
 
END;
END P_RequetesDansCible;
l'erreur générée par la dernière clause de l'insertion est la suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
91/43    PLS-00103: Encountered the symbol ";" when expecting one of the
         following:
         ( select values
Je vous remercie pour votre aide