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 :

Trigger d'Insertion et DATE


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2005
    Messages : 30
    Par défaut Trigger d'Insertion et DATE
    Bonjour,

    J'ai une table T1 avec un champ DATEMAJ qui est mis à jour quand on ajoute une ligne dans la table ou que l'on fait une mise à jour sur la table. C'est pour savoir quand les modifs et les insertions sont faites, et par qui (champ USERMAJ).

    Mon problème : le trigger d'insertion ne fonctionne pas sur le champ DATEMAJ.

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE OR REPLACE TRIGGER "ORA_SCHEMA"."TRG_INS_T1" 
        BEFORE
    INSERT ON "ORA_SCHEMA"."T1" FOR EACH ROW 
    BEGIN
      :NEW.DATEMAJ := current_timestamp;
      :NEW.USERMAJ := 'SPG40'; 
    END;
    Je suis carrément déconnecté d'Oracle. C'est pareil si je remplace "cuurent_timestamp" par "sysdate".

    J'ai essayé d'utiliser des to_char() et des to_date(), mais j'ai une erreur ORA-01830, et l'insertion ne se fait pas.

    Le plus bizarre c'est que le même trigger fonctionne sur l'update.

    Merci pour vos réponses.

    SPG40

  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
    Quelle est la définition de DATEMAJ dans ta table ?

    Si c'est une date
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    :new.datemaj := SYSDATE;
    doit marcher

  3. #3
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2005
    Messages : 30
    Par défaut
    DATEMAJ est de type DATE. Tout ce qu'il y a de plus classique.

    Quand je mets ton code, j'ai le résultat suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    INSERT INTO
    *
    ERROR at line 1:
    ORA-03113: end-of-file on communication channel
    Toute idée est bonne à prendre.

    SPG40

  4. #4
    Membre éclairé

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Par défaut
    Citation Envoyé par spg40
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    INSERT INTO
    *
    ERROR at line 1:
    ORA-03113: end-of-file on communication channel
    Il ya quelque chose qui te déconnecte de la base, soit un trigger after log on ou autre, mais tu es déconnecté de la base et la mise à jour ne peut pas se faire

    Sinon j'ai testé avec current_timestamp ou sysdate cela fonctionne
    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
    57
    58
    59
    60
    61
    62
    SQL>drop table sygale;
     
    Table supprimée.
     
    Ecoulé : 00 :00 :00.00
    SQL>
    SQL>create table sygale(num_1 number(1), user_maj varchar2(30), dat_maj date);
     
    Table créée.
     
    Ecoulé : 00 :00 :00.00
    SQL>
    SQL>CREATE OR REPLACE TRIGGER SYGALE.TRG_INS_sygale
      2  BEFORE
      3  INSERT ON sygale REFERENCING NEW AS NEW FOR EACH ROW
      4  BEGIN
      5    :NEW.DAT_MAJ := sysdate;
      6    :NEW.USER_MAJ := user;
      7  END;
      8  /
     
    Déclencheur créé.
     
    Ecoulé : 00 :00 :00.00
    SQL>
    SQL>insert into sygale(num_1) values(1);
     
    1 ligne créée.
     
    Ecoulé : 00 :00 :00.00
    SQL>
    SQL>select * from sygale;
         NUM_1 USER_MAJ                       DAT_MAJ
    ---------- ------------------------------ --------
             1 SYGALE                         19/10/06
     
    Ecoulé : 00 :00 :00.00
    SQL>
    SQL>CREATE OR REPLACE TRIGGER SYGALE.TRG_INS_sygale
      2  BEFORE
      3  INSERT ON sygale REFERENCING NEW AS NEW FOR EACH ROW
      4  BEGIN
      5    :NEW.DAT_MAJ := current_timestamp;
      6    :NEW.USER_MAJ := user;
      7  END;
      8  /
     
    Déclencheur créé.
     
    Ecoulé : 00 :00 :00.00
    SQL>insert into sygale(num_1) values(2);
     
    1 ligne créée.
     
    Ecoulé : 00 :00 :00.00
    SQL>select * from sygale;
         NUM_1 USER_MAJ                       DAT_MAJ
    ---------- ------------------------------ --------
             1 SYGALE                         19/10/06
             2 SYGALE                         19/10/06
     
    Ecoulé : 00 :00 :00.00

  5. #5
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2005
    Messages : 30
    Par défaut
    Merci sygale, j'ai repassé mes triggers avec " REFERENCING NEW AS NEW " et miracle ça fonctionne. Pourtant il n'y a pas eu de redémarrage de la base.

    Les mystères d'Oracle...

    Encore merci pour les réponses.

    A+

    SPG40

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

Discussions similaires

  1. [9.0] Trigger pour formater des dates avant insertion
    Par Logarithmix dans le forum Requêtes
    Réponses: 1
    Dernier message: 13/05/2013, 14h22
  2. [trigger] update inserted?
    Par cosminutza dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 01/06/2005, 09h37
  3. Trigger et insert
    Par jf-nigou dans le forum Oracle
    Réponses: 5
    Dernier message: 16/02/2005, 16h45
  4. [JDBC][MS ACCESS] probleme insertion de date
    Par darius_the_first dans le forum JDBC
    Réponses: 2
    Dernier message: 10/12/2004, 18h04
  5. Insert Into + Date
    Par BoeufBrocoli dans le forum SQL
    Réponses: 10
    Dernier message: 13/08/2003, 11h23

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