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

Administration Oracle Discussion :

Vues et insert


Sujet :

Administration Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 16
    Par défaut Vues et insert
    J'ai encore une question au niveau des vues avec oracle:
    Voila j'ai créé une vue et je veux ajouter des données dans les tables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    create or replace trigger test_fonction
    instead of insert or update or delete on ma_premiere_vue
    for each row
    declare temp number(6);
    begin
     if inserting then
      insert into premiere_table(inc_table1_pk.nextval,:NEW.no_titi,:NEW.toto,:NEW.tutu);
      insert into deuxieme table(inc_table2_pk,inc_table1_pk.currval,:NEW.prenom,:NEW.date_naissance);
     end if;
    Je sais c'est pas fini mais c'est surtout cette partie qui m"interesse
    Bon comme vous pouvez le voir je recupere la clee primaire de la table 1 et j'en fais un clee etrangere dans la table 2.
    Mais le probleme avec ce système (je sais c'est tres peu probable) c'est si deux personnes lancent en même temps un insert sur ma vue, je risque de perdre mon integrité référentielle car la clée primaire ne sera plus forcement égale à ma clée étrangère ( si une personne fait un accés à ma sequence entre es deux insert pour être plus clair)
    Je voulais donc savoir s'il existait un moyen pour me liberer de cette contrainte

  2. #2
    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
    Sauvegardez le n° de séquence dans une variable avant de l'utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Declare
    ma_variable  NUMBER ;
    Begin
    ...
    SELECT ma_sequence.nextval INTO ma_variable ;
    Insert into .... 
    Insert into ....
    ...
    End ;

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 16
    Par défaut
    J'y avais pas pensé...
    Desolé

  4. #4
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Par défaut
    Bonjour,

    Il n'y a aucun pb

    Regardes, tu ouvres deux sessions :

    Session 1 :
    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
     
    SQL> rem session 1
    SQL> create sequence laly;
     
    Sequence created.
     
    SQL> select laly.nextVal from dual;
     
       NEXTVAL
    ----------
             1
     
    SQL> select laly.currVal from dual;
     
       CURRVAL
    ----------
             1

    Dans Session 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SQL> REM session 2
    SQL> select laly.currVal from dual;
    select laly.currVal from dual
           *
    ERROR at line 1:
    ORA-08002: séquence LALY.CURRVAL pas encore définie dans cette session
    La séquence n'est pas encore initialisé.

    Toujours dans session 2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SQL> REM session 2
    SQL> select laly.nextVal from dual;
     
       NEXTVAL
    ----------
             2
     
    SQL> select laly.currVal from dual;
     
       CURRVAL
    ----------
             2
    Et dans session 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SQL> rem session 1
    SQL> select laly.currVal from dual;
     
       CURRVAL
    ----------
             1
     
    SQL>
    Session 1 voit toujours "son" currVal


    Donc en supposant l'enchainement suivant :
    - session 1 : nextVal -> 2
    - session 2 : nextVal -> 3
    - session 1 : currVal donnera toujours 2

    C'est cohérent.

    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

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

Discussions similaires

  1. Insertion dans une table à partir d'une Vue
    Par BenMarcel dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/10/2007, 20h42
  2. Insertion d'une mise à jour dans une création de vue
    Par Ptite_Tigresse dans le forum Langage SQL
    Réponses: 0
    Dernier message: 30/08/2007, 12h34
  3. Réponses: 3
    Dernier message: 25/10/2006, 17h45
  4. [plsql] vue materialisé non MAJ apres insert
    Par marwaza22 dans le forum Oracle
    Réponses: 13
    Dernier message: 28/07/2006, 10h26
  5. Insertion nouvelle vue dans oracle discoverer
    Par Jean-Matt dans le forum Oracle
    Réponses: 4
    Dernier message: 18/11/2004, 17h24

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