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 :

INSERTION dans une table à partir d'une autre table


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Février 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 60
    Par défaut INSERTION dans une table à partir d'une autre table
    J'ai écrit un trigger pour écrire simultanément dans une autre table et je reçois le message d'erreur suivant : valeur erronnée dans INSERT.

    Voici ma table 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
    26
    27
    28
    29
    30
    31
    create table AUDIT_COMMANDE
    (
        DATE_COMMANDE                 date,
        REF_COMMANDE                  varchar2(5),
        Montant                       number(12),
        code_mon                      varchar2(3),
        cod_four                      varchar2(5),
        rai_soc                       varchar2(150),
        Login                         varchar2(10),
         constraint PK_COMMANDE primary key (DATE_COMMANDE)
    )
     
    /
     
    =====================================================
     
    create or replace trigger audit_bc_mont
    after  DELETE OR INSERT OR UPDATE 
    ON bon_cde FOR EACH ROW
    DECLARE 
    Login VARCHAR2(10); 
    BEGIN 
    select login into Login from sess;
    insert into audit_commande values
    (sysdate,
    'montant_BC',	
    :old.montant_BC,
    :new.montant_BC,
    Login);
    end;
    /
    J'aurais souhaité que quelqu'un me donne un coup de main pour résoudre
    ce problème.

    Merci !

  2. #2
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Simple...
    Vous tentez d'insérer 'montant_BC' dans une colonne limitée à 5 caractères...

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 954
    Par défaut
    En plus la table contient 7 colonnes et il n'y a que 5 valeurs insérées...
    Il faut TOUJOURS spécifier la liste des colonnes dans un INSERT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    insert into la_table (liste_des_colonnes)
    values (liste_des_values)

  4. #4
    Membre actif
    Inscrit en
    Février 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 60
    Par défaut insertion dans une table à partir d'une autre table
    Bonjour,

    J'ai reconstruit mon trigger que voici mais la réponse est suivante : insertion impossible dans les 02 tables:

    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
    SQL> create or replace trigger AUDIT_COMMANDE
      2  after  DELETE OR INSERT OR UPDATE 
      3  ON bon_cde FOR EACH ROW
      4  DECLARE 
      5  Login VARCHAR2(10); 
      6  BEGIN 
      7  select login into Login from sess;
      8  insert into audit_commande values
      9  (audit_commande.date_bc,
     10   audit_commande.n_bon_cde,
     11   audit_commande.montant_bc,
     12   audit_commande.code_mon,
     13   audit_commande.cod_four,
     14   audit_commande.rai_soc,
     15  Login);
     16  end;
     17  /
     
    -- Déclencheur créé.
    Je crois qu'il y a un conflit avec la table sur laquelle je crée mes enregistrements. Voici cette table :

    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
    create table BON_CDE
    (
        N_BON_CDE      VARCHAR2(5)            not null,
        COD_FOUR       VARCHAR2(5)            not null,
        COD_FOUR2      VARCHAR2(5)            null,
        CODE_MON       VARCHAR2(3)            not null,
        N_REQUETE      VARCHAR2(5)           not null,
        DATE_BC        DATE                         not null,
        MONTANT_BC     NUMBER(12,2)          null    ,
        MONTANT_CONSOMME number(12,2)   null,
        SOLDE          NUMBER(12,2)               null,
        DATE_DEBUT       DATE                     null,
        DATE_FIN         DATE                       null,
        JOUR_DEBUT       DATE                     null,
        JOUR_FIN         DATE                       null,
        DESTINATION     VARCHAR(5)            not null,
        constraint PK_BON_CDE primary key (N_BON_CDE)
    )
    /
    Ce refus d’insérer serait-il du au fait que je n'ai tenu compte que de quelques colonnes ?

    Merci de m'éclairer.

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Plutôt quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE OR REPLACE TRIGGER AUDIT_COMMANDE
    AFTER INSERT OR UPDATE 
    ON bon_cde FOR EACH ROW
    DECLARE 
        v$_login VARCHAR2(10); 
    BEGIN 
        SELECT login INTO v$_login FROM sess;
        INSERT INTO audit_commande (DATE_COMMANDE, REF_COMMANDE, Montant, code_mon, cod_four, rai_soc, Login)
        VALUES (:new.date_bc, :new.n_bon_cde, :new.montant_bc, :new.code_mon, :new.cod_four, :new.rai_soc, v$_login);
    end;
    /
    Attention aux typages de vos données.
    La colonne Montant en source est un number(12,2), celle dans la table d'audit est un number(12).

    Je vous laisse regarder la partie DELETE de votre trigger, ce que signifient :new et :old au passage.

  6. #6
    Membre actif
    Inscrit en
    Février 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 60
    Par défaut insertion dans une table à partir d'une autre table
    Bonjour

    [CODE][=SQL


    Merci beaucoup, mon problème d'insertion dans une autre table est résolu. C'était pourtant si simple !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/06/2011, 16h04
  2. UPDATE d'une Table à partir de deux autres Tables
    Par Marc_27 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/07/2009, 14h13
  3. Update d'une table à partir de deux autres tables
    Par Peewee766 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 04/05/2008, 19h08
  4. Réponses: 4
    Dernier message: 20/03/2007, 09h54
  5. creer une autre table à partir d'une requete
    Par papou34 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/02/2007, 22h42

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