PLS-00103 erreur incomprise sur PL/SQL developer
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:
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:
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
Un peu de diplomatie que diable !
La première paragrahe de la réponse est très utile et résous sans doute le problème.
La première partie de la deuxième paragraphe c'est de la logique - mais après plusieurs heures, il est très simple de passer sur les plus bêtes des erreurs ; Combien de fois j'ai débuggé du code à 4h du matin depuis plusieurs heures avant de m'apercevoir qu'il me manque un point-virgule sur une ligne de code, ou une parenthèse sur une requête SQL : De temps en temps, rien ne vaut un regard externe car on n'est pas à 110% de nos capacités 110% du temps.
La seconde partie de la deuxième phrase me choque, on aurait pu s'en passer : Cela reviens à dire "Si tu a un problème avec ton code, ne viens pas nous voir car ce n'est pas à nous de t'aider". La personne qui a posé le question a eu sa réponse, il a sans doute vu sa bêtise, et d'après son profil, il n'est plus jamais revenu.
Bravo.