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 :

Création d'une procédure stockée


Sujet :

SQL Oracle

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 560
    Points : 148
    Points
    148
    Par défaut Création d'une procédure stockée
    Bonjour,

    Je souhaite faire une procédure stockée qui fasse les actions suivantes :

    - Supprimer tout le contenu d'une table
    - Insérer des données selon un critère particulier
    - Faire un update

    Ma question donc, doit-on mettre toutes ces instructions dans la même procédure ?
    Doit-on créer une TRANSACTION ? Si oui, avez-vous des exemples de procédure utilisant des TRANSACTION ?

    Ma dernière problématique est de remplir la clé primaire lors de l'INSERT.
    Via un client TOAD, je procède un créant une séquence mais peut-on mettre toutes ces instructions dans une même procédure ?

    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 SEQUENCE maSequence1 START WITH 1 INCREMENT BY 1;
     
    INSERT INTO AGREGATION_PNB (
    C_ID_AGREGATION, 
    D_ANNEE, D_MOIS, N_MONTANT_MVT, N_MONTANT_PROV, N_MONTANT_CORT, N_MONTANT_EURO, 
    N_MONTANT_EMPRUNT,
    N_MONTANT_AJUSTEMENT,
    C_USER_CREATION, 
    C_USER_MODIFICATION, D_DATE_CREATION, D_DATE_MODIFICATION, C_CLIENT, C_NUM_COMPTE)
     
    SELECT
    maSequence1.NextVal, 
    ....
    DROP maSequence1;
    Merci d'avance pour toutes remarques.

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    c'est pas un problème SQL mais d'utilisation de TOAD... mets tout ça dans un fichier .sql et utilise SQL*Plus ce sera plus simple

  3. #3
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Créer la séquence au début pour la supprimer à la fin ça devrait faire un malheur.

  4. #4
    Expert éminent
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    david71, tu peux utiliser TOAD mais tu confonds livraison, développement et exécution.

    Si tu te sers des assistants de TOAD il faut d'abord créer ta séquence, puis créer ta procédure etc... Si tu veux les lancer dans un script, comme ton exemple, il faut utiliser un interpreteur de script SQL comme SQL*Plus ou un simili-SQL*Plus qui est integré à TOAD et qui interprète 90% des instructions SQL*Plus. Tu n'as pas à supprimer ta séquence ni à la recréer à chaque fois, ça serait même une erreur de faire cela car le principe même d'une séquence c'est aussi de garder la dernière valeur pour une prochaine insertion.

    Effectivement utiliser des transactions est une bonne idée ça permet de garder la cohérence des données mais quand tu fais une requête tu ouvres par défaut une transaction.

    exemple de code avec gestion du résultat de la transaction:
    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
     
    v_seq             NUMBER(10);
    BEGIN
       SELECT maSequence1.nextval
       INTO   v_seq
       FROM dual;
     
       INSERT INTO AGREGATION_PNB (
       C_ID_AGREGATION, 
       ...)
       SELECT
       maSequence1.NEXTVAL, 
       ....
      FROM   ..;
      COMMIT;   -- commit la transaction
     
    EXCEPTION
       WHEN OTHERS THEN -- en cas d'erreur
            ROLLBACK;  -- rollback la transaction
            raise;  -- renvoit l'erreur
     
    END;

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 560
    Points : 148
    Points
    148
    Par défaut
    OK merci ce que je souhaite faire c'est donc mettre tout ce code dans une procédure stockée.

    Sachant que je souhaite intégrer mes données via un INSERT avec un index auto-incrémenté.

    Merci pour toute information.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 560
    Points : 148
    Points
    148
    Par défaut
    OK bon j'ai essayé de faire l'action suivante mais j'ai une erreur.

    Ce que j'ai fait :

    * Fait la déclaration de "CREATE SEQUENCE maSequence1 START WITH 1 INCREMENT BY 1;" dans TOAD.

    * Dans la procédure stockée, j'ai le problème suivant quand je compile : ORA-00933 à l'instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    v_seq NUMBER(10);
    ...
    SELECT maSequence1.NEXTVAL
    INTO v_seq
    FROM dual;
    Ce que je cherche simplement à faire c'est appeler la séquence depuis la procédure stockée. Est-ce tout bonnement possible ?

Discussions similaires

  1. Réponses: 15
    Dernier message: 05/06/2013, 17h08
  2. création d'une procédure stockée insert
    Par minussa dans le forum Requêtes
    Réponses: 3
    Dernier message: 23/06/2011, 18h55
  3. Problème création d'une procédure stockée
    Par kaouane dans le forum Connexion aux bases de données
    Réponses: 2
    Dernier message: 09/12/2010, 09h41
  4. Réponses: 21
    Dernier message: 04/05/2010, 12h14
  5. probléme de création d'une procédure stockée
    Par hicham20 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 13/05/2009, 16h29

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