IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Appel Fonction et procedure PL/SQL


Sujet :

PL/SQL Oracle

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    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 : 1
    Points
    1
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    execute InsertAdherent('Frz','Clem','Orsay','test','coucou','4','rue jean','90000','Test2');
    Oracle me retourne l'erreur suivante :

    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 !

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    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)

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    begin
        InsertAdherent('Frz','Clem','Orsay','test','coucou','4','rue jean','90000','Test2');
    end;

  4. #4
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Points : 1 359
    Points
    1 359
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Pour appeler votre procédure de façon standard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 Respectueusement
    www.hourim.wordpress.com

    "Ce qui se conçoit bien s'énonce clairement"

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    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 : 1
    Points
    1
    Par défaut
    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 !

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

Discussions similaires

  1. Appel fonction pl/sql depuis perl
    Par pietrus46 dans le forum SGBD
    Réponses: 0
    Dernier message: 07/01/2011, 18h39
  2. Réponses: 4
    Dernier message: 11/11/2010, 10h39
  3. Appel d'un programme JAVA depuis une procedure PL/SQL
    Par farenheiit dans le forum PL/SQL
    Réponses: 8
    Dernier message: 04/03/2008, 11h03
  4. [PL/SQL] appel d'une procedure dans une procedure
    Par Ilhan_ dans le forum Oracle
    Réponses: 9
    Dernier message: 28/01/2005, 10h30
  5. Réponses: 15
    Dernier message: 20/12/2004, 10h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo