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 24/12/2011, 14h13   #1
Invité de passage
 
Homme
Étudiant
Inscription : décembre 2011
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2011
Messages : 2
Points : 0
Points : 0
Par défaut Appel Fonction et procedure PL/SQL

Bonjour a tous je bute sur un petit probleme.
J'essaye d'appeler une procedure stocke dans ma base de donnee mais Oracle me retourne une erreur !

Voici la fonction :

Code SQL :
1
2
3
4
5
6
7
8
9
10
CREATE OR REPLACE procedure InsertAdherent(nom IN VARCHAR2,pre IN VARCHAR2, ecole IN VARCHAR2,login IN VARCHAR2, mdp IN VARCHAR2, numR IN VARCHAR2, Rue IN VARCHAR2, codeP IN VARCHAR2, Ville IN VARCHAR2 ) IS
idMax NUMBER(1);
 
Begin
	SELECT MAX(IDADHERENT) INTO idMax
	FROM VELUPSUD_ADHERENT;
 
	INSERT INTO VELUPSUD_ADHERENT
	VALUES(idMax,nom,pre,ecole,login,mdp,SYSDATE,SYSDATE,'MEMBRE',numR, Rue,codeP,Ville);
End;

Ensuite je tente de l'execute avec la commande SQL suivante trouvée sur internet et dans la doc d'oracle :
Code :
execute InsertAdherent('Frz','Clem','Orsay','test','coucou','4','rue jean','90000','Test2');
Oracle me retourne l'erreur suivante :

Citation:
ORA-00900: instruction SQL non valide
Est ce que quelqu'un aurait une solution a mon probleme ? J'ai le meme probleme pour des fonctions mais je l'ai contourne avec "SELECT nom_fonction FROM DUAL".

Merci par avance !
elite18000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2011, 08h45   #2
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 928
Points : 1 928
2 points :
- Il faut toujours écrire la liste des colonnes que l'on insère, le fait qu'il soit possible de l'ommettre reste une mauvaise pratique (comme l'utilisation de *)

- idMax NUMBER(1), number(1) est vraiment petit de toute façon sélectionner le max (normalement la faute porte sur max+1) ne fonctionne pas en concurrence d'accès, il faut utiliser une séquence (tu peux te passer du trigger)
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/12/2011, 11h11   #3
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
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 686
Points : 10 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
En complément des informations communiquées par skuatamad, j'ajouterai qu'execute est une instruction SQL*Plus.

Pour appeler votre procédure de façon standard :
Code :
1
2
3
begin
    InsertAdherent('Frz','Clem','Orsay','test','coucou','4','rue jean','90000','Test2');
end;
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2011, 12h23   #4
Membre expérimenté
 
Homme Mohamed Houri
Inscription : mars 2010
Messages : 286
Détails du profil
Informations personnelles :
Nom : Homme Mohamed Houri
Localisation : France

Informations forums :
Inscription : mars 2010
Messages : 286
Points : 562
Points : 562
Citation:
Envoyé par Waldar Voir le message
Pour appeler votre procédure de façon standard :
Code :
1
2
3
begin
    InsertAdherent('Frz','Clem','Orsay','test','coucou','4','rue jean','90000','Test2');
end;
C'est vrai qu'utiliser des procédures stockées (SQL statique) nous enlève la charge de veiller à l'utilisation des "bind variables"; mais s'il fait tous ses appels tels que vous lui avez conseillé, bonjour alors le problème de la mémoire

http://hourim.wordpress.com/2011/06/...ing-parameter/
__________________
Bien Cordialement
www.hourim.wordpress.com
Mohamed.Houri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2011, 18h45   #5
Invité de passage
 
Homme
Étudiant
Inscription : décembre 2011
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2011
Messages : 2
Points : 0
Points : 0
merci pour toutes ces réponses je vais essayer immédiatement !

pour la fonction exécute, elle me permet simplement de faire des test du bon fonctionnement de la procédure. En revanche je n'arrive pas a l'appelle depuis mon programme JAVA, avec le JDBC, et callableStatement..

Merci !
elite18000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2011, 21h03   #6
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 928
Points : 1 928
Citation:
Envoyé par elite18000 Voir le message
En revanche je n'arrive pas a l'appelle depuis mon programme JAVA, avec le JDBC, et callableStatement..
C'est là qu'intervient call
Code :
call InsertAdherent(?,?,?,?,?,?,?,?,?);
A combiner avec les méthodes PREPAREDSTATMENT et BIND, que je ne connais pas en java, pour en savoir plus n'hésite pas à poster aussi sur le forum java.

En attendant regarde les méthodes java utiliseé par alberto dell'Era et le follow up de tom kyte pour des exemple de syntaxes (notamment .setInt pour bind un integer à priori) :
http://asktom.oracle.com/pls/asktom/...48426602526853
skuatamad 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 06h00.


 
 
 
 
Partenaires

Hébergement Web