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

SQL Oracle Discussion :

Besoin d'aide pour faire une procédure stockée


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Par défaut Besoin d'aide pour faire une procédure stockée
    Bonjour,


    Admettons que j'ai la table suivante :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ---------------------------------
    |         TABLE VEHICULE        |
    ---------------------------------
    | ID | CATEGORIE | MODELE | KM  |
    ---------------------------------
    |  1 | Voiture   | Twingo | 100 |
    |  2 | Voiture   | Clio   |  50 |
    |  3 | Moto      | Burgman|  14 |
    |  4 | Moto      | Tmax   |   5 |
    ---------------------------------


    j'ai 2 autres tables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ---------------------
    |   TABLE VOITURE   |
    ---------------------
    | ID | MODELE | KM  |
    ---------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ---------------------
    |     TABLE MOTO    |
    ---------------------
    | ID | MODELE | KM  |
    ---------------------
    avec les sequences associées (SEQ_VOITURE, SEQ_MOTO).


    et enfin 2 tables qui font la liaison entre la VEHICULE et VOITURE et MOTO

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ----------------------------
    |     TABLE VEH_VOITURE    |
    ----------------------------
    | ID_VEHICULE | ID_VOITURE |
    ----------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    --------------------------
    |     TABLE VEH_MOTO     |
    --------------------------
    | ID_VEHICULE | ID_MOTO  |
    --------------------------


    Je voudrais faire une procèdure stockée (ou une fonction ou quelque chose) qui :
    selectionne tous les éléments étant de la CATEGORIE "Voiture" de la table VEHICULE
    les insère dans la table VOITURE avec la sequence correspondante
    met à jour la table VEH_VOITURE avec l'id de la table VEHICULE et l'id de la table VOITURE (généré par la sequence)

    et bien sûr la même chose pour moto (mais si ça marche pour voiture, y aura plus qu'à changer le nom)


    les scripts de créations :
    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
    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
    --table VEHICULE
    create table VEHICULE  (
    	ID 		INTEGER 	not null,
    	CATEGORIE	VARCHAR2(20)	not null,
    	MODELE		VARCHAR2(20)	not null,
    	KM		NUMBER		not null,
        primary key (ID)
    );
     
    --données de la table VEHICULE
    insert into VEHICULE (ID,CATEGORIE, MODELE,KM) 
    values (1, 'Voiture', 'Twingo', 100);
    insert into VEHICULE (ID,CATEGORIE, MODELE,KM) 
    values (2, 'Voiture', 'Clio', 50);
    insert into VEHICULE (ID,CATEGORIE, MODELE,KM) 
    values (3, 'Moto', 'Burgman', 14);
    insert into VEHICULE (ID,CATEGORIE, MODELE,KM) 
    values (4, 'Moto', 'Tmax', 5);
     
    --table VOITURE
    create table VOITURE  (
    	ID 		INTEGER 	not null,
    	MODELE		VARCHAR2(20)	not null,
    	KM		NUMBER		not null,
        primary key (ID)
    );
     
    --table MOTO
    create table MOTO  (
    	ID 		INTEGER 	not null,
    	MODELE		VARCHAR2(20)	not null,
    	KM		NUMBER		not null,
        primary key (ID)
    );
    --Sequence MOTO
    create sequence SEQ_MOTO
    increment by 1
    start with 000001;
     
    --Sequence VOITURE
    create sequence SEQ_VOITURE
    increment by 1
    start with 000001;
     
     
    create table VEH_VOITURE  (
    	ID_VEHICULE	INTEGER 	not null,
    	ID_VOITURE	INTEGER 	not null,
        primary key (ID_VEHICULE,ID_VOITURE)
    );
     
    create table VEH_MOTO  (
    	ID_VEHICULE	INTEGER 	not null,
    	ID_MOTO		INTEGER 	not null,
        primary key (ID_VEHICULE,ID_MOTO)
    );

    Pouvez-vous m'aider ?

    Merci

    PoichOU

    PS : j'espère que la lecture du post ne vous a pas saouler mais j'ai essayer d'être précis.

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Le but du forum n'est pas de développer à votre place mais de résoudre les problèmes rencontrés.

    Voici le lien pour les procédures stockées
    http://sheikyerbouti.developpez.com/...age=Chap4#L4.1

  3. #3
    Membre éclairé Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Par défaut
    McM, mon but est simplement de comprendre comment marche les procèdures stockées avec un exemple simple. J'ai vu le lien que tu me donnes mais je n'ai pas réussi à mettre les exemples en application. Je débute vraiment avec ce langage et j'espèrai un petit coup de pouce...


    Voilà l'algo que je veux faire :

    Sélectionner toutes les voitures dans la table VEHICULE
    Pour chaque résultat
    récupérer la séquence
    insèrer dans la table VOITURE
    insérer dans la table de liaison


    Voilà ce que j'ai fait pour le mettre en oeuvre:

    ma procèdure générale :
    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
    23
    CREATE OR REPLACE PROCEDURE procedure_voiture()
     
    DECLARE 
    	CURSOR select_voiture IS SELECT ID,MODELE,KM FROM VEHICULE WHERE CATEGORIE='Voiture';
    	current_vehicule VEHICULE%ROWTYPE;
     
    BEGIN
            OPEN select_voiture;
            LOOP
                FETCH select_voiture INTO current_vehicule;
     
                -- appel de la procèdure pour appeler la séquence
                id_vehicule := call_sequence_voiture();
     
                -- appel de la procèdure pour créer un vehicule
                insert_voiture(id_vehicule,current_vehicule.MODELE,current_vehicule.KM);
     
                -- appel de la procèdure pour créer la relation vehicule - voiture
                insert_veh_voiture(current_vehicule.ID,id_vehicule);
     
                EXIT WHEN select_voiture%NOTFOUND;
            END LOOP;
    END;
    fonction pour récupérer la séquence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR REPLACE FUNCTION call_sequence_voiture() Return VOITURE.ID%Type
     IS
       ID_SEQ VOITURE.ID%Type ;
      BEGIN
        select SEQ_VOITURE.nextVal Into ID_SEQ from DUAL ;
        Return( ID_SEQ ) ;
      END;
    procèdure pour insérer dans la table voiture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE OR REPLACE PROCEDURE insert_voiture
    (	
    	id IN VOITURE.ID%Type,
    	modele IN VOITURE.MODELE%Type,
    	km IN VOITURE.KM%Type
    ) IS
     
      BEGIN
        INSERT INTO VOITURE (ID,MODELE,KM) VALUES (id,modele,km);
      END;
    procèdure pour insérer dans la table de liaison :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE OR REPLACE PROCEDURE insert_veh_voiture
    (
    	id_vehicule IN VEH_VOITURE.ID_VEHICULE%Type,
    	id_voiture IN VEH_VOITURE.ID_VOITURE%Type
    ) IS
      BEGIN
        INSERT INTO VEH_VOITURE (ID_VEHICULE,ID_VOITURE) VALUES (id_vehicule,id_voiture);
      END;

    Pouvez-vous me dire là où j'ai faux ?

    Merci de m'aider

    PoichOU

  4. #4
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Attention à la cohérence des données:
    Burgman et Tmax ne sont pas des motos mais des scooters!

  5. #5
    Membre éclairé Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Par défaut
    LoL SheikYerbouti ! tu as raison, je veux bien changer partout moto pour scooter et même mettre les cylindrées qui correspondent si je reçoit un peu d'aide pour mon problème ...

  6. #6
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Pouvez-vous me dire là où j'ai faux ?
    Qu'est-ce qui vous fait dire que votre code n'est pas bon ?

  7. #7
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 37
    Par défaut
    bonjour,
    qu'est ce que tu as comme message d'erreur?

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

Discussions similaires

  1. Besoin d'aide pour faire une procédure
    Par Romish dans le forum Maple
    Réponses: 0
    Dernier message: 29/05/2013, 19h15
  2. Réponses: 22
    Dernier message: 20/05/2008, 10h25
  3. Besoin d'aide pour faire une string formatée
    Par fab032 dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2008, 14h37
  4. [MySQL] Besoin d'aide pour faire une boucle
    Par plex dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 15/04/2008, 13h47
  5. [VBA-E]besoin d'aide pour faire une boucle
    Par mikazounette dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/04/2006, 14h04

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