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 08/07/2008, 13h30   #1
Invité de passage
 
Inscription : juin 2008
Messages : 1
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 1
Points : 0
Points : 0
Par défaut Erreur de pl/sql

Bonjour
je suis un nouveau sur ce site et je suis un étudiant en informatique.
j'ai un probléme avec ma base de donnée .en effet , j'utilise oracle 10g et j'ai des problémes de connection avec la base si j'execute une requette de pl/sql
demandant à l'utilisateur de rentrer un nombre par exemple , la base me retourne une erreure.
par exemple avec le progaramme suivant j'ai une erreure :

DECLARE
v_nom varchar2(30);
v_prenom varchar2(30)
v_matricule number;
BEGIN

v_matricule := &entrer_un_nombre;
select nom, prenom into v_nom, v_prenom
from personne
where matricule = v_matricule ;
...........

end;
papebarasall est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 14h30   #2
Membre régulier
 
Avatar de userB
 
Développeur Web
Inscription : juin 2005
Messages : 147
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2005
Messages : 147
Points : 73
Points : 73
Code :
1
2
3
v_nom varchar2(30);
v_prenom varchar2(30)
v_matricule number;
J'ai comme l'impression qu'il manque un petit quelque chose à cette ligne, notament à la fin
__________________
Si tu ne sais pas m'expliquer pourquoi ca ne marche pas, alors tu ne sauras pas m'expliquer pourquoi ca marche.. -Un illustre chef de projet-
userB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2008, 07h30   #3
Membre confirmé
 
Inscription : juillet 2007
Messages : 357
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 357
Points : 226
Points : 226
Si a la creation de ta procedure un message te signalle : cree avec erreur de compilation alors en sqlplus avec un utilisateur ayant les droits , tu peux taper :

Code :
SHOW ERRORS PROCEDURE USER.MAPROCEDURE
Il te donnera les lignes qui contienne une erreur.
ZashOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2008, 21h01   #4
Nouveau Membre du Club
 
Inscription : avril 2007
Messages : 72
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 72
Points : 34
Points : 34
Salut les amis,
Je signale que ma question est la même que celle posée par papebarasall car on bosse sur le même travail.
Je crois qu'il ne s'est pas rendu compte du manque de ";" à la fin de l'instruction que userB lui a signalé.
Cependant, hormis cette omission, il y a un autre problème dont on arrive pas à se débarrasser. Il s'agit, lors de l'exécution du programme, de demander à l'utilisateur de fournir un numéro d'employé et c'est avec cette entrée que l'on devra travailler dans le corps du programme.
Je donne ici une ébauche des instructions concerné par l'erreur dans le programme et je vous affiche l'erreur générée à la suite de l'exécution du programme.

Partie du programme concernée par l'erreur
------------------------------------------
DECLARE
v_no_EMPL EMPLOYE_PL.no_EMPL%TYPE := &vs_no_EMPL;
..........................
BEGIN
SELECT nom_EMPL, pren_EMPL, sala_EMPL
INTO v_nom_EMPL, v_pren_EMPL, v_sala_EMPL
FROM EMPLOYE_PL
WHERE no_EMPL = v_no_EMPL;
............................

L'erreur générée par oracle
---------------------------
ORA-06550: Ligne 2, colonne 39 :
PLS-00103: Symbole "&" rencontré à la place d'un des symboles suivants :

( - + case mod new not null
avg count
current exists max min prior sql stddev sum variance execute
forall merge time timestamp interval date

pipe

J'espère avoir été assez clair afin que vous puissiez m'aider car je compte sur vous et merci pour vos éventuelles réponses.

PS: Je travaille avec oracle 10g.
@omzo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/07/2008, 23h09   #5
Membre confirmé
 
Inscription : juillet 2007
Messages : 357
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 357
Points : 226
Points : 226
je pense que le code suivant fonctionnerai mieux

Code :
1
2
3
4
5
6
7
CREATE OR REPLACE PROCEDURE MAPROCEDURE (I_vs_no_EMPL IN EMPLOYE_PL.no_EMPL%TYPE) AS
 
v_no_EMPL EMPLOYE_PL.no_EMPL%TYPE ;
BEGIN
...
v_no_EMPL := I_vs_no_EMPL;
...
(De memoire sans doc sous la main)
ZashOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2008, 10h52   #6
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 459
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 459
Points : 4 226
Points : 4 226
Omzo, Tu ne peux pas dans une procédure basée faire une interruption utilisateur. (le & c'est pour du sql)

Tu es obligé de passer par des paramètres (code de ZashOne).
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2008, 22h28   #7
Nouveau Membre du Club
 
Inscription : avril 2007
Messages : 72
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 72
Points : 34
Points : 34
Merci les amis pour vos avis constructives.

J'ai fini par résoudre le problème. Il parait que le signe "&" marche si on l'utilise avec le SQL * Plus mais pas dans le cas ou l'on travaille avec la page d'accueil de la base de données oracle. Mais vous avez raison ZashOne et McM car j'ai fini par adopter la méthode que m'a proposé ZashOne qui marche à merveille. Merci pour votre aide.

Vive les forums developpez.com.
@omzo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2008, 23h58   #8
Rédacteur
 
Inscription : décembre 2002
Messages : 2 401
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 401
Points : 3 307
Points : 3 307
Citation:
Envoyé par @omzo Voir le message
Il parait que le signe "&" marche si on l'utilise avec le SQL * Plus
Exact ! Les variables de substitution introduites par & constituent une fonctionnalité de l'outil SQL*Plus, et ont toutes les chances de ne pas fonctionner avec d'autres outils.
Les variables de substitution sous SQL*Plus fonctionnent aussi bien pour du SQL pur que du PL/SQL. Dans un cas comme dans l'autre, le code est traité en deux passes :
- à la première passe, les substitutions sont effectuées (les variables &quelquechose sont remplacées par leur valeur)
- à la seconde passe, le code final est exécuté

Pour se faire plaisir, on peut préciser que le signe "&" n'est que le symbole par défaut pour annoncer une variable de substitution.
On pourrait employer par exemple "}", en faisant
Après quoi on pourrait faire une requête comme :
Code :
SELECT * FROM }ma_table;
__________________
Consultant / formateur Oracle indépendant
Certifié OCP 10g et 11g, sécurité 11g
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2008, 22h54   #9
Nouveau Membre du Club
 
Inscription : avril 2007
Messages : 72
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 72
Points : 34
Points : 34
Merci pour ces éclaircissement Pomalaix, c'est noté.
@omzo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h14.


 
 
 
 
Partenaires

Hébergement Web