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 17/04/2011, 00h05   #1
Invité régulier
 
titeuf
Étudiant
Inscription : novembre 2009
Messages : 63
Détails du profil
Informations personnelles :
Nom : titeuf

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2009
Messages : 63
Points : 6
Points : 6
Par défaut erreur dans ma procedure

Bonsoir tout le monde j ai créer la procédure suivante :

Code :
1
2
3
4
5
6
7
CREATE OR REPLACE procedure procedure_stokees(v_patient patient.idpatient%type)
IS 
begin 
SELECT nom, prenom, (DATESORTIE- DATEENTREE) nbr_sejoure 
FROM  patient JOIN sejourne USING (IDPATIENT) WHERE idpatient=v_patient;
end procedure_stokees;
/
et j ai reçu ce message :
Code :
1
2
 
vertissement : ProcÚdure crÚÚe avec erreurs de compilation.
et quand je met show error :
Code :
1
2
3
4
5
6
7
 
Erreurs pour PROCEDURE PROCEDURE_STOKEES :
 
LINE/COL ERROR
-------- -----------------------------------------------------------------
4/1      PLS-00428: une clause INTO est attendue dans cette instruction
         SELECT
pouvez vous m expliquer pour quoi il me dise qu'il faut une clause into sachant que je veux afficher pour un patient donné le nombre de séjour effectuer
merci d avance
titeufdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2011, 09h54   #2
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Tu ne peux pas afficher directement dans une procédure PL/SQL
Tu peux faire une sortie VIA dbms_output.
Pour cela, il te faut des variables !
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE OR REPLACE procedure procedure_stokees(v_patient patient.idpatient%type) IS 
 v_nom patient.nom%type;
 v_prenom patient.prenom%type;
 v_jours NUMBER; 
  begin  
SELECT nom, prenom, (DATESORTIE- DATEENTREE) nbr_sejoure 
into v_nom,v_prenom,v_jours
FROM  patient JOIN sejourne 
ON  patient.id_patient=sejourne.id_patient
WHERE idpatient=v_patient;
DBMS_OUTPUT.PUT_LINE (v_nom||','||v_prenom||'->'||v_jours);
 end procedure_stokees;
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2011, 12h13   #3
Invité régulier
 
titeuf
Étudiant
Inscription : novembre 2009
Messages : 63
Détails du profil
Informations personnelles :
Nom : titeuf

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2009
Messages : 63
Points : 6
Points : 6
bonjour j ai tester mais il m affiche ce message:
Code :
1
2
3
4
5
6
7
8
9
10
11
 
Avertissement : ProcÚdure crÚÚe avec erreurs de compilation.
 
SQL> SHOW error;
Erreurs pour PROCEDURE PROCEDURE_STOKEES :
 
LINE/COL ERROR
-------- -----------------------------------------------------------------
6/1      PL/SQL: SQL Statement ignored
9/24     PL/SQL: ORA-00904: "SEJOURNE"."ID_PATIENT" : identificateur non
         valide
même si on a écrit (patient.id_patient=sejourne.id_patient) ??
titeufdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2011, 14h57   #4
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
test d'abord ta requete (sans le INTO) dans SQLPlus.
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2011, 16h28   #5
Invité régulier
 
titeuf
Étudiant
Inscription : novembre 2009
Messages : 63
Détails du profil
Informations personnelles :
Nom : titeuf

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2009
Messages : 63
Points : 6
Points : 6
Citation:
Envoyé par Garuda Voir le message
test d'abord ta requete (sans le INTO) dans SQLPlus.
ça marche sans into mais avec cette façon
Code :
1
2
3
4
5
6
7
8
9
10
11
 
SELECT nom, prenom, (DATESORTIE- DATEENTREE) nbr_sejoure 
FROM  patient JOIN sejourne USING (IDPATIENT)
WHERE idpatient=&v_patient;
Entrez une valeur pour v_patient : 1
ancien   3 : WHERE idpatient=&v_patient
nouveau   3 : WHERE idpatient=1
 
NOM          PRENOM       NBR_SEJOURE
------------ ------------ -----------
karim     tazzi              19
par contre avec cette façon

Code :
1
2
3
4
5
 
SELECT nom, prenom, (DATESORTIE- DATEENTREE) nbr_sejoure 
FROM  patient JOIN sejourne 
ON  patient.IDPATIENT=sejourne.IDPATIENT
WHERE idpatient=&v_patient;
il y a une erreur
Code :
1
2
3
 
ERREUR Ó la ligne 4 :
ORA-00918: dÚfinition de colonne ambigu
titeufdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2011, 16h33   #6
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 442
Points : 10 442
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Le messages d'erreur répond pourtant parfaitement à votre interrogation :
Citation:
ERREUR Ó la ligne 4
On va à la ligne 4 de votre code :
Code :
WHERE idpatient=&v_patient;
On reprend le message d'erreur :
Citation:
ORA-00918: dÚfinition de colonne ambigu
Oracle ne sait pas de quelle table idpatient fait parti dans votre WHERE.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/04/2011, 18h31   #7
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Donc
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE OR REPLACE procedure procedure_stokees(v_patient patient.idpatient%type) IS  
v_nom patient.nom%type; 
v_prenom patient.prenom%type;
v_jours NUMBER;   
begin  
SELECT nom, prenom, (DATESORTIE- DATEENTREE) nbr_sejoure 
into v_nom,v_prenom,v_jours
FROM  patient JOIN sejourne 
ON patient.idpatient=sejourne.idpatient
WHERE idpatient=v_patient;
DBMS_OUTPUT.PUT_LINE (v_nom||','||v_prenom||'->'||v_jours); 
end procedure_stokees;
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 18/04/2011, 18h39   #8
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 442
Points : 10 442
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Perdu, c'est la ligne du dessous !
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/04/2011, 20h52   #9
Invité régulier
 
titeuf
Étudiant
Inscription : novembre 2009
Messages : 63
Détails du profil
Informations personnelles :
Nom : titeuf

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2009
Messages : 63
Points : 6
Points : 6
Citation:
Envoyé par Waldar Voir le message
Le messages d'erreur répond pourtant parfaitement à votre interrogation :

On va à la ligne 4 de votre code :
Code :
WHERE idpatient=&v_patient;
On reprend le message d'erreur :


Oracle ne sait pas de quelle table idpatient fait parti dans votre WHERE.
idpatient fait partie des deux table (patient et sejourne )
moi je travail toujours avec (join using) ,et ça a marché bien sur, j té montrer le résultat!
et avec votre manier, si logique puisque vous avais fait (patient.IDPATIENT=sejourne.IDPATIENT)
(dans ma bdd idpatient est la clé primaire de la table patient et la clé socondaire de la table sejourne)
titeufdev est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 18/04/2011, 21h55   #10
Invité régulier
 
titeuf
Étudiant
Inscription : novembre 2009
Messages : 63
Détails du profil
Informations personnelles :
Nom : titeuf

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2009
Messages : 63
Points : 6
Points : 6
Re

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
SQL> CREATE OR REPLACE procedure procedure_stokees(
  2   v_patient IN  patient.idpatient%type,
  3   v_nom out patient.nom%type,
  4   v_prenom out patient.prenom%type,
  5   v_jours out  NUMBER)
  6      IS
  7     begin
  8      SELECT nom, prenom, (DATESORTIE- DATEENTREE) nbr_sejoure
  9      INTO v_nom,v_prenom,v_jours
 10      FROM  patient JOIN sejourne USING (IDPATIENT)
 11      WHERE idpatient=&v_patient;
 12      DBMS_OUTPUT.PUT_LINE (v_nom||','||v_prenom||'->'||v_jours);
 13      end procedure_stokees;
 14     /
Entrez une valeur pour v_patient : 1
ancien  11 :     WHERE idpatient=&v_patient;
nouveau  11 :     WHERE idpatient=1;
 
ProcÚdure crÚÚe.
voila maintenant ça marche mais comment afficher le résultat de cette procedure ??
et est ce que (in out) sont obligatoire dans les variables ?
merci pour votre soutien
titeufdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 09h26   #11
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE OR REPLACE procedure procedure_stokees(v_patient patient.idpatient%type) IS
 v_nom patient.nom%type; 
 v_prenom patient.prenom%type;
 v_jours NUMBER;
begin
  SELECT nom, prenom, (DATESORTIE- DATEENTREE) nbr_sejoure
 into   v_nom,v_prenom,v_jours
 FROM  patient JOIN sejourne
 ON patient.idpatient=sejourne.idpatient
WHERE patient.idpatient=v_patient;
DBMS_OUTPUT.PUT_LINE (v_nom||','||v_prenom||'->'||v_jours);
 end procedure_stokees;
1) ne pas utiliser &v_patient mais la variable v_patient
2) faire
Code :
1
2
BEGIN procedure_stockee(&v_patient); END;
3) Lire un peu de littérature sur le SQL et le PL/SQL !!!!!!
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 19/04/2011, 09h38   #12
Membre expérimenté
 
François
Inscription : février 2010
Messages : 305
Détails du profil
Informations personnelles :
Nom : François

Informations forums :
Inscription : février 2010
Messages : 305
Points : 535
Points : 535
Pour que dbms_output affiche quelque chose:
Pur lancer la procedure:
Les in out sont mis a IN par defaut.

Le select my_proc from dual ne fonctionne pas. Il faut une fonction.

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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
TMP>PROMPT ==Type par defaut est IN:
==Type par defaut est IN:
TMP>CREATE OR REPLACE procedure my_proc (a number) IS
  2  begin
  3  dbms_output.put_line(a);
  4  a:=2;
  5  dbms_output.put_line(a);
  6  end;
  7  /
 
Warning: Procedure created WITH compilation errors.
 
Elapsed: 00:00:00.00
TMP>
TMP>SHOW errors
Errors FOR PROCEDURE MY_PROC:
 
LINE/COL ERROR                                                                                                                                                                                                                                                                                                                                                                                                  
-------- -----------------------------------------------------------------                                                                                                                                                                                                                                                                                                                                      
4/1      PL/SQL: Statement ignored                                                                                                                                                                                                                                                                                                                                                                              
4/1      PLS-00363: expression 'A' cannot be used AS an assignment target                                                                                                                                                                                                                                                                                                                                       
TMP>
TMP>CREATE OR REPLACE procedure my_proc (a number) IS
  2  begin
  3  dbms_output.put_line(a);
  4  end;
  5  /
 
Procedure created.
 
Elapsed: 00:00:00.02
TMP>
TMP>PROMPT ==exec my_proc fonctionne:
==exec my_proc fonctionne:
TMP>exec my_proc(42)
42                                                                                                                                                                                                                                                                                                                                                                                                              
 
PL/SQL procedure successfully completed.
 
Elapsed: 00:00:00.00
TMP>
TMP>PROMPT ==SELECT procedure FROM dual ne fonctionne pas:
==SELECT procedure FROM dual ne fonctionne pas:
TMP>SELECT my_proc(-2) FROM dual;
SELECT my_proc(-2) FROM dual
       *
ERROR at line 1:
ORA-00904: "MY_PROC": invalid identifier 
 
 
Elapsed: 00:00:00.00
TMP>
TMP>CREATE OR REPLACE FUNCTION my_func RETURN number IS
  2  begin
  3  dbms_output.put_line(27);
  4  RETURN 42;
  5  end;
  6  /
 
FUNCTION created.
 
Elapsed: 00:00:00.01
TMP>PROMPT En revanche, ON fait un SELECT my_function FROM dual
En revanche, ON fait un SELECT my_function FROM dual
TMP>SELECT my_func FROM dual;
 
   MY_FUNC                                                                                                                                                                                                                                                                                                                                                                                                      
----------                                                                                                                                                                                                                                                                                                                                                                                                      
        42                                                                                                                                                                                                                                                                                                                                                                                                      
 
27                                                                                                                                                                                                                                                                                                                                                                                                              
Elapsed: 00:00:00.00
TMP>
TMP>DROP procedure my_proc;
 
Procedure dropped.
 
Elapsed: 00:00:00.07
TMP>DROP FUNCTION my_func;
 
FUNCTION dropped.
 
Elapsed: 00:00:00.02
TMP>spool off
Relire la littérature sur le SQL et PL/SQL
Rams7s est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 09h23   #13
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Citation:
Le select my_proc from dual ne fonctionne pas. Il faut une fonction.
Tu as dégainé plus vite que ton ombre !

J'ai effectivement corrigé et remplacé par un bloc PL/SQL anonyme.
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 11h28   #14
Membre expérimenté
 
François
Inscription : février 2010
Messages : 305
Détails du profil
Informations personnelles :
Nom : François

Informations forums :
Inscription : février 2010
Messages : 305
Points : 535
Points : 535
Par défaut Lucky luke

Ah ca, c'est parce que la pause d'avant la pause cafe c'est developpez.
Rams7s 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 04h46.


 
 
 
 
Partenaires

Hébergement Web