Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/03/2007, 09h38   #1
Invité de passage
 
Inscription : mars 2007
Messages : 2
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : mars 2007
Messages : 2
Points : 0
Points : 0
Par défaut 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
balkis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 09h53   #2
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
Tu n'as pas l'impression qu'il te manque un begin dans ta 2è fonction ?

Une simple relecture attentive de ton code t'aurais permis de retrouvé l'erreur. Je te rapelle que le forum n'a pas vocation à debugger le code des uns ou des autres.
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2008, 15h30   #3
Futur Membre du Club
 
Inscription : août 2008
Messages : 2
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 2
Points : 19
Points : 19
Par défaut 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.
dlpage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2008, 15h42   #4
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
Citation:
Envoyé par dlpage Voir le message
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".
Non, je lui demandais juste de respecter les règles de ce forum :

Citation:
Envoyé par orafrance
- Eviter tant que possible les problèmes strictement liés à des erreurs de syntaxe. En effet, les erreurs sont assez clairement signalées par SQL*Plus et en général, chacun est capable de trouver la solution en cherchant un minimum. Ces sujets n'intéressent que l'auteur de celui-ci et sont donc contraires à l'esprit communautaire du forum et par ailleurs, l'expérience personnelle est essentielle pour évoluer.
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2008, 16h03   #5
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 450
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 450
Points : 4 209
Points : 4 209
Exact, c'est comme de répondre aux exercices des étudiants.. d'ailleurs, la charte à changée, parce que je ne trouve plus cette "limitation" ?
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2010, 16h03   #6
Membre à l'essai
 
Inscription : avril 2007
Messages : 20
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 20
Points : 23
Points : 23
Citation:
Envoyé par McM Voir le message
More Code : More Bugs. Less Code : Less Bugs
More Tests : Less Bugs
Jay13mhsc est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h04.


 
 
 
 
Partenaires

Hébergement Web