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 :

Trigger sur vue : problème à l'insertion


Sujet :

PL/SQL Oracle

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1
    Points : 3
    Points
    3
    Par défaut Trigger sur vue : problème à l'insertion
    Bonjour ,

    tout d'abord je souhaite préciser que j'ai exposé mon pb sur un autre site similaire au votre , mais que la réponse obtenue va à l'encontre de ce que vous dites sur votre site . A savoir que : on peut faire un trigger instead of sur une vue. L'interlocuteur m'affirmait le contraire. Je ne sais plus quoi penser.

    Je vous explique mon problème:

    je suis en train de faire un trigger qui doit insérer les données via une vue.

    Cette vue s'appelle "caissier", elle permet d'enregistrer les coordonnées d'un client( table1) et son adresse( table 2):

    table 1:

    IDCLIENT
    IDADRESSE
    NOMCLIENT
    PRENOMCLIENT
    TELCLIENT

    table2:

    IDADRESSE
    NUMADRESSE
    RUEADRESSE
    CPADRESSE
    VILLEADRESSE

    voici ma vue et mon trigger :


    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
     
    CREATE OR REPLACE VIEW "CAISSIER" ("IDADRESSE", "NUMADRESSE", "RUEADRESSE", "CPADRESSE", "VILLEADRESSE", "IDCLIENT", "NOMCLIENT", "PRENOMCLIENT", "TELCLIENT")
    AS
      select a.IDADRESSE,a.NUMADRESSE,a.RUEADRESSE,a.CPADRESSE,a.VILLEADRESSE,
    c.IDCLIENT,c.NOMCLIENT,c.PRENOMCLIENT,c.TELCLIENT
     
     
    from ADRESSE  a,CLIENT c
     
    where a.IDADRESSE=c.IDADRESSE;
     
     
     
      CREATE OR REPLACE TRIGGER "INSERT_CAISSIER_VIEW"
    instead of insert  on caissier
     
    for each row
     
    begin
     
    insert into ADRESSE(IDADRESSE,NUMADRESSE,RUEADRESSE,CPADRESSE,VILLEADRESSE)
    values (:new.IDADRESSE,:new.NUMADRESSE,:new.RUEADRESSE,:new.CPADRESSE,:new.VILLEADRESSE);
     
    insert into CLIENT (IDCLIENT,IDADRESSE,NOMCLIENT,PRENOMCLIENT,TELCLIENT) values (:new.IDCLIENT,:new.IDADRESSE,:new.NOMCLIENT,:new.PRENOMCLIENT,:new.TELCLIENT);
    end;
    Evidemment ca ne marche pas , j'ai une erreur avec une violation de contrainte :

    Erreur SQL : ORA-00001: violation de contrainte unique (MABASE.PK_ADRESSE)
    ORA-06512: à "MABASE.INSERT_CAISSIER_VIEW", ligne 3
    ORA-04088: erreur lors d'exécution du déclencheur 'MABASE.INSERT_CAISSIER_VIEW'
    00001. 00000 - "unique constraint (%s.%s) violated"
    *Cause: An UPDATE or INSERT statement attempted to insert a duplicate key.
    For Trusted Oracle configured in DBMS MAC mode, you may see
    this message if a duplicate entry exists at a different level.
    *Action: Either remove the unique restriction or do not insert the key.
    Ça concerne IDADRESSE ( la clé étrangère) , il ne veut pas la dupliquer car unique.

    Dans mon trigger j'ai tenté d'enlever idadresse et :new.idadresse , mais ça ne fonctionne pas.

    Que dois-je modifier dans mon code pour que je puisse insérer dans les 2 tables?

    Quelqu'un peut-il m'aider?

  2. #2
    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
    Le fait que vous rencontrer cette erreur démontre bien que le trigger sur la vue fonctionne.
    Le message d'erreur vous indique que la valeur transmise pour l'identifiant unique de l'adresse violé la contrainte d'unicité. Vous devez donc transmettre une valeur qui n'existe pas dans la table.
    Ca sera plus simple si vous fournissez un jeu d'essai complet : création des tables, de la vue, du trigger etc.

Discussions similaires

  1. Trigger sur vue
    Par amani1 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 22/01/2014, 15h49
  2. [postgre] Trigger sur vue - héritage
    Par lynnaryas dans le forum PostgreSQL
    Réponses: 10
    Dernier message: 13/04/2012, 14h31
  3. Trigger sur vue avec appli dédiée
    Par havener dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/07/2009, 15h21
  4. Problème de terme sur "vue"
    Par AlexB59 dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 08/06/2005, 11h27
  5. Pb Trigger sur vue
    Par cosminutza dans le forum Développement
    Réponses: 3
    Dernier message: 28/07/2003, 16h37

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