Bonjour,

J'ai créé un package sql, où j'ai declaré deux fonctions (la première prend la liste des colonnes d'une table et la table elle même et retourne un varchar2(= noms des colonnes séparées par des virgules et la deuxième prend les même paramètres et retourne un clob)et un type composé(VARRAY): voici le code

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
create or replace package Generic_export is
 
  type ColumnList is VARRAY(50) OF VARCHAR2(30); 
  function getColumnsNames( tab in varchar2, cols in ColumnList) return varchar2;
  function ExportToXml(tab in varchar2, cols in ColumnList) return clob;
 
end Generic_export;
 
create or replace package body Generic_export is
 
-- Function and procedure implementations
function getColumnsNames( tab in varchar2, cols in ColumnList) return varchar2 is
  l_columns varchar2(2000);
  nbrcol integer;
  i integer := 1;
begin
  l_columns := '';
  select count(column_name) into nbrcol from all_tab_columns where table_name=tab;
  if i<=50 and cols(i)!= '' then
   loop
    l_columns := l_columns ||','|| cols(i);
    i          := i+1;
   end loop;
  end if;
  return l_columns;
end getColumnsNames;
 
function ExportToXml(tab in varchar2, cols in ColumnList) return clob is
  l_result clob;
  l_queryCtx DBMS_XMLquery.ctxType;
  l_sqlQuery varchar2(2000);
  l_columns varchar2(2000);
  -- set up the query context...!
  l_columns  := getColumnsNames(tab, cols);
  l_sqlQuery := ('select '||l_columns||' from '||tab);
  l_queryCtx := DBMS_XMLQuery.newContext(l_sqlQuery);
  -- get the result..!
  l_result := DBMS_XMLQuery.getXML(l_queryCtx);
  DBMS_XMLQuery.closeContext(l_queryCtx);  -- you must close the query handle..
  return(l_result);
end ExportToXml;
 
end Generic_export
voici l'erreur que j'ai lors de la compilation

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
Error: PLS-00103: Symbole "=" rencontré à la place d'un des symboles suivants :
 
          constant exception <identificateur>
          <identificateur entre guillemets> table LONG_ double ref char
          time timestamp interval date binary national character nchar
       Symbole "<identificateur>" a été substitué à "=" pour continuer.
Line: 28
Text: l_columns  := getColumnsNames(tab, cols);
 
Error: PLS-00103: Symbole "=" rencontré à la place d'un des symboles suivants :
 
          constant exception <identificateur>
          <identificateur entre guillemets> table LONG_ double ref char
          time timestamp interval date binary national character nchar
       Symbole "<identificateur>" a été substitué à "=" pour continuer.
Line: 29
Text: l_sqlQuery := ('select '||l_columns||' from '||tab);
 
Error: PLS-00103: Symbole "=" rencontré à la place d'un des symboles suivants :
 
          constant exception <identificateur>
          <identificateur entre guillemets> table LONG_ double ref char
          time timestamp interval date binary national character nchar
       Symbole "<identificateur>" a été substitué à "=" pour continuer.
Line: 30
Text: l_queryCtx := DBMS_XMLQuery.newContext(l_sqlQuery);
 
Error: PLS-00103: Symbole "=" rencontré à la place d'un des symboles suivants :
 
          constant exception <identificateur>
          <identificateur entre guillemets> table LONG_ double ref char
          time timestamp interval date binary national character nchar
       Symbole "<identificateur>" a été substitué à "=" pour continuer.
Line: 32
Text: l_result := DBMS_XMLQuery.getXML(l_queryCtx);
 
Error: PLS-00103: Symbole "." rencontré à la place d'un des symboles suivants :
 
          constant exception <identificateur>
          <identificateur entre guillemets> table LONG_ double ref char
          time timestamp interval date binary national character nchar
       Symbole "<identificateur>" a été substitué à "." pour continuer.
Line: 33
Text: DBMS_XMLQuery.closeContext(l_queryCtx);  -- you must close the query handle..
 
Error: PLS-00103: Symbole "(" rencontré à la place d'un des symboles suivants :
 
          constant exception <identificateur>
          <identificateur entre guillemets> table LONG_ double ref char
          time timestamp interval date binary national character nchar
       Symbole "<identificateur>" a été substitué à "(" pour continuer.
Line: 34
Text: return(l_result);
 
Error: PLS-00103: Symbole "END" rencontré à la place d'un des symboles suivants :
 
          begin function package pragma procedure subtype type use
          <identificateur> <identificateur entre guillemets> form
          current cursor
Line: 35
Text: end ExportToXml;
 
Error: Hint: Comparison with NULL in 'getColumnsNames'
Line: 13
Text: if i<=50 and cols(i)!= '' then
 
Error: Hint: Variable 'DBMS_XMLQuery.closeContext' is declared but never used in 'ExportToXml'
Line: 33
Text: DBMS_XMLQuery.closeContext(l_queryCtx);  -- you must close the query handle..
Je ne comprends pas où est le problème
toute aide serait la bien venue

Merci d'avance