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 :

Les procédures


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 145
    Par défaut Les procédures
    Bonjour,

    Débutant en SQL (1ere année en informatique de gestion) j'ai beaucoup de mal avec le SQL (bon les requêtes simple maintenant ça va, et grâce à ce forum, je maitrise enfin les trigger).

    Actuellement j'ai beaucoup de mal avec les procédures.

    J'ai les tables Commune, Quartier, Logement et je doit écrire une procédure qui permet d'entré un nom de commune + un nom de quartier et d'afficher tout les logements inoccupé d'une superficie de + de 150m².

    Voici ce que j'ai écrit pour le moment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    CREATE OR REPLACE PROCEDURE log_inoc_150
    ( v_comm IN Commune.nomcommune%TYPE,
      v_quart IN Quartier.libellequart%TYPE,
      v_rue OUT Logement.rue%TYPE,
      v_num OUT Logement.numero%TYPE,
      v_bp OUT Logement.bp%TYPE)
    IS
    BEGIN
        SELECT rue,numero,bp INTO v_rue,v_num,v_bp
        FROM Logement,Commune,Quartier WHERE v_comm=nomcommune AND v_quart=libellequart AND superficie>150 
             AND idquartier IN (SELECT idquartier FROM Quartier,Logement WHERE idquartier=idquart
             AND idlogement NOT IN (SELECT idlogement FROM Logement,Contrat WHERE idlogement=idlog));
    END log_inoc_150;
    /
    On m'a parlé d'une boucle mais je ne vois pas trop où et comment la mettre et pourquoi...

    Merci d'avance a toute personne qui pourra m'éclairer sur les procédures.

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Ajoutez un paramètre en entrée de votre procédure pour passer la superficie et modifiez votre procédure pour prendre en compte ce paramètre. Testez votre procédure avec la valeur 0 (en supposant que vos tables contiennent des données). Que se passe-t-il ?

  3. #3
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 145
    Par défaut
    Vous voulez dire quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    CREATE OR REPLACE PROCEDURE log_inoc_150
    ( v_comm IN Commune.nomcommune%TYPE,
      v_quart IN Quartier.libellequart%TYPE,
      v_sup IN Logement.superficie%TYPE,
      v_rue OUT Logement.rue%TYPE,
      v_num OUT Logement.numero%TYPE,
      v_bp OUT Logement.bp%TYPE)
    IS
    BEGIN
        SELECT rue,numero,bp INTO v_rue,v_num,v_bp
        FROM Logement,Commune,Quartier WHERE v_comm=nomcommune AND v_quart=libellequart 
             AND idquartier IN (SELECT idquartier FROM Quartier,Logement WHERE idquartier=idquart
             AND idlogement NOT IN (SELECT idlogement FROM Logement,Contrat WHERE idlogement=idlog));
    END log_inoc_150;
    /
    La procédure est bien crée, par contre quand j'essaye de l'executer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    BEGIN
    log_inoc_150('Charleroi','Sud',0);
    END;
    ORA-06550: Ligne 2, colonne 1 :
    PLS-00306: numéro ou types d'arguments erronés dans appel à 'LOG_INOC_150'
    ORA-06550: Ligne 2, colonne 1 :
    PL/SQL: Statement ignored

  4. #4
    Membre Expert
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR REPLACE PROCEDURE log_inoc_150
    ( v_comm IN Commune.nomcommune%TYPE,
      v_quart IN Quartier.libellequart%TYPE,
      v_sup IN Logement.superficie%TYPE,
      v_rue OUT Logement.rue%TYPE,
      v_num OUT Logement.numero%TYPE,
      v_bp OUT Logement.bp%TYPE)
    - 3 paramètres entrées
    - 3 paramètres sorties

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    BEGIN
    log_inoc_150('Charleroi','Sud',0);
    END;
    - 3 paramètres entrées
    - 0 paramètres sorties

    A votre avis que se passe t-il avec un code comme celui-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    BEGIN
        SELECT rue,numero,bp INTO v_rue,v_num,v_bp
        FROM Logement,Commune,Quartier WHERE v_comm=nomcommune AND v_quart=libellequart AND superficie>150 
             AND idquartier IN (SELECT idquartier FROM Quartier,Logement WHERE idquartier=idquart
             AND idlogement NOT IN (SELECT idlogement FROM Logement,Contrat WHERE idlogement=idlog));
    END log_inoc_150;
    si la requête ramène :
    - Aucune ligne
    - Une ligne
    - Plusieurs lignes

    je doit écrire une procédure qui permet d'entré un nom de commune + un nom de quartier et d'afficher tout les logements inoccupé d'une superficie de + de 150m².
    De plus, une telle procédure ne ramènera (au mieux) qu'un seul enregistrement (ou logement) or il vous faut afficher tous les logements répondants au critères de sélection

    Donc la demande est-elle d'avoir une procédure qui renvoi le ou les logements disponibles OU d'afficher les logements disponibles ?

  5. #5
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 145
    Par défaut
    Bon, je replonge dans mes cours car là j'ai comme l'impression d'être bien largué... ensuite je repasserai par ici pour un complément d'information ou pour clôturer.

  6. #6
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 145
    Par défaut
    J'ai relu un peu mes cours, effectivement il manque quelques petites choses.

    Voilà ce que j'ai écrit pour le moment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    CREATE OR REPLACE PROCEDURE log_inoc_150
    ( v_comm IN Commune.nomcommune%TYPE,
      v_quart IN Quartier.libellequart%TYPE,
      v_rue OUT Logement.rue%TYPE,
      v_num OUT Logement.numero%TYPE,
      v_bp OUT Logement.bp%TYPE)
    IS
    BEGIN
        SELECT rue,numero,bp INTO v_rue,v_num,v_bp
        FROM Logement,Commune,Quartier WHERE v_comm=nomcommune AND v_quart=libellequart AND superficie>150 
             AND idquartier IN (SELECT idquartier FROM Quartier,Logement WHERE idquartier=idquart
             AND idlogement NOT IN (SELECT idlogement FROM Logement,Contrat WHERE idlogement=idlog));
    END log_inoc_150;
    /
     
    VARIABLE g_rue VARCHAR2(30);
    VARIABLE g_num INTEGER;
    VARIABLE g_bp VARCHAR2(4);
     
    EXECUTE log_inoc_150('Aiseau','Sud',:g_rue,:g_num,:g_bp);
    PRINT g_rue g_num g_bp;
    Mais ! Problème ! Oracle Apex ne reconnais pas les mot clé VARIABLE, EXECUTE et PRINT... Je ne sais donc pas tester.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gestion d'erreur dans les procédure
    Par speedy1496 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 20/01/2006, 12h02
  2. Calcul du temps passé dans les procédures ...
    Par Jloox dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 05/10/2005, 14h31
  3. Tester les procédures de restauration
    Par dcollart dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 23/08/2005, 13h51
  4. Probleme avec les procédures d'opengl dans Vb 6
    Par fun31 dans le forum OpenGL
    Réponses: 3
    Dernier message: 06/12/2004, 07h57
  5. Informations sur les procédures stockées
    Par jfphan dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 13/01/2004, 14h30

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