Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/12/2011, 20h40   #1
 
Inscription : février 2005
Messages : 27
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 27
Points : -15
Points : -15
Envoyer un message via Yahoo à Ordonnateur
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 :
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 !
Ordonnateur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2011, 11h52   #2
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Simple...
Vous tentez d'insérer 'montant_BC' dans une colonne limitée à 5 caractères...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/12/2011, 13h53   #3
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 928
Points : 1 928
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 :
1
2
INSERT INTO la_table (liste_des_colonnes)
VALUES (liste_des_values)
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/12/2011, 15h44   #4
 
Inscription : février 2005
Messages : 27
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 27
Points : -15
Points : -15
Envoyer un message via Yahoo à Ordonnateur
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 :
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 :
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.
Ordonnateur est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 05/12/2011, 16h28   #5
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Plutôt quelque chose comme ça :
Code :
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.
__________________
Email : http://scr.im/waldar
Waldar est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 17h36   #6
 
Inscription : février 2005
Messages : 27
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 27
Points : -15
Points : -15
Envoyer un message via Yahoo à Ordonnateur
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 !
Ordonnateur est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h58.


 
 
 
 
Partenaires

Hébergement Web