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

Oracle Discussion :

[PL/SQL] problème de trigger


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 12
    Points : 11
    Points
    11
    Par défaut [PL/SQL] problème de trigger
    Bonjour,

    J'aimerais bien copier une ligne d'une table dans une autre table juste avant d'effacer cette dernière.
    J'utilise un Trigger. j'arrive à le créer mais j'ai à chaque fois des erreurs dans la partie écrite en PL/SQL.

    voilà le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SQL> CREATE TRIGGER ArchivBiere
      2  BEFORE DELETE ON Biere
      3  FOR EACH ROW
      4  BEGIN
      5    ArchBiere.*=Biere.*;
      6  END;
      7  /
     
    Attention : Déclencheur créé avec erreurs de compilation.
    Si quelqu'un aurait une idée, pour ma part, je suis complètement perdu.

    Merci d'avance.

    Bye

  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 : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    mais c'est quoi ça : ArchBiere.*=Biere.*; ?

    Il faut mettre toute les colonnes et utilisée OLD :



    EDIT : grosse erreur dans le script proposé

  3. #3
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Tu ne peux pas faire comme ca, tu dois faire un ordre INSERT en bonne et due forme. Tu peux utiliser :old.col où tu remplaces col respectivement par les colonne de BIERE pour référencer la valeur avant suppression.


    Laly.

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    trop tard

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Mais old, c'est un type prédéfinit dans oracle?

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Sinon, en passant par une transaction autonome

    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 TRIGGER ArchivBiere
    BEFORE DELETE ON Biere
    FOR EACH ROW
    BEGIN
       Archive_biere(:old.rowid);
    END;
    /
     
    CREATE PROCEDURE Archive_biere (p_id ROWID)
    PRAGMA autonomous_transaction;
    BEGIN
      INSERT INTO archbiere (SELECT * FROM biere WHERE rowid = p_id);
      COMMIT;
    END;
    /

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Citation Envoyé par Chuck67
    Mais old, c'est un type prédéfinit dans oracle?
    Oui c'est un alias qui permet de pointer sur les données avant modif du trigger, et new sur les nouvelles infos (dans update pour insert).

    Je te conseille de lire la doc Oracle pour plus d'info

  8. #8
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Citation Envoyé par orafrance
    trop tard
    Peut être mais ca marche pas ton truc

    Laly.

    Edité par Orafrance : suppression de code erroné qui pourrait induire en erreur

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    exact

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TRIGGER ArchivBiere
    BEFORE DELETE ON Biere
    FOR EACH ROW
    BEGIN
      INSERT INTO ArchBiere VALUES (:old.col1,:old.col2,...,:old.coln);
    END;
    /
    c'est mieux

  10. #10
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 165
    Points : 98
    Points
    98
    Par défaut
    Merci chuck pour ce magnifique POST


  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Y'a pas de quoi entre exar faut s'aider

    Moi je dirais plutôt merci aux rédacteurs pour ces informations très précieuses.

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    moi je dirais bien qu'il faut cliquer sur le bouton [Résolu]

  13. #13
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    exar


    Laly.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    C rien, on est ds la mm école mais pas sur le mm site (Exar : Etudiant à l'EXIA cf CESI 8))
    Merci qd mm pour vos réponses très instructives.

  15. #15
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 165
    Points : 98
    Points
    98
    Par défaut
    Ouai merci à vous les admins

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

Discussions similaires

  1. PL/SQL problème sur Trigger
    Par kitsune dans le forum PL/SQL
    Réponses: 4
    Dernier message: 06/12/2005, 20h35
  2. [T-SQL] problème avec un trigger
    Par karine77 dans le forum Adaptive Server Enterprise
    Réponses: 3
    Dernier message: 26/09/2005, 10h45
  3. [T-SQL] problème avec un trigger
    Par karine77 dans le forum Sybase
    Réponses: 3
    Dernier message: 26/09/2005, 10h45
  4. [SQL] problème avec les date et les group By
    Par Stef784ever dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/11/2004, 09h18
  5. [Debutant][Join Sql] problème de join
    Par ultimax dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/11/2004, 12h01

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