Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
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 22/11/2006, 19h20   #1
Invité de passage
 
Inscription : octobre 2002
Messages : 4
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 4
Points : 1
Points : 1
Envoyer un message via ICQ à Strit83
Par défaut Probleme Trigger Oracle 9i

Bonjour,

Je rencontre un probleme lors de l'execution d'un trigger.

J'obtiens toujours ce message d'erreur :

Error starting at line 1 in command:
INSERT INTO TRANSPLAN.ESSAI_HIST(NOM, CLE) VALUES ('vghj',88888)
Error report:
SQL Error: ORA-01722: Nombre non valide
ORA-06512: à "TRANSPLAN.TRIG_ESSAI", ligne 2
ORA-04088: erreur lors d'exécution du déclencheur 'TRANSPLAN.TRIG_ESSAI'


Voici le code du trigger :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE OR REPLACE
TRIGGER TRIG_ESSAI BEFORE INSERT ON ESSAI_HIST 
FOR EACH ROW 
BEGIN
MERGE INTO TRANSPLAN.ESSAI v
USING ( SELECT :new.CLE CLE FROM dual ) t1
ON ( t1.CLE = v.CLE)
when matched
then UPDATE SET
NOM = :new.NOM
when NOT matched
then INSERT VALUES (
:new.CLE,
:new.NOM
);
end;
Et voici les deux tables en questions :

Code :
1
2
3
4
5
CREATE TABLE "TRANSPLAN"."ESSAI" 
   (    "CLE" NUMBER(15,0) NOT NULL ENABLE, 
    "NOM" VARCHAR2(10 BYTE), 
     CONSTRAINT "ESSAI_PK" PRIMARY KEY ("CLE") ENABLE
   ) ;
et

Code :
1
2
3
4
CREATE TABLE "TRANSPLAN"."ESSAI_HIST" 
   (    "CLE" NUMBER(15,0) NOT NULL ENABLE, 
    "NOM" VARCHAR2(10 BYTE)
   ) ;
Sur internet j'ai rien trouvé. Je suis un peu désespéré.

Merci de votre aide.
Strit83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2006, 10h15   #2
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 450
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 450
Points : 4 209
Points : 4 209
Utilise les balise code (icone # lors des messages)

Essaie en nommant les colonnes d'insert.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE OR REPLACE
TRIGGER TRIG_ESSAI BEFORE INSERT ON ESSAI_HIST 
FOR EACH ROW 
BEGIN
MERGE INTO TRANSPLAN.ESSAI v
USING ( SELECT :new.CLE CLE FROM dual ) t1
ON ( t1.CLE = v.CLE)
when matched
then UPDATE SET
NOM = :new.NOM
when NOT matched
then 
 INSERT (v.CLE, v.NOM) 
 VALUES (:new.CLE, :new.NOM);
end;
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2006, 09h46   #3
Invité de passage
 
Inscription : octobre 2002
Messages : 4
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 4
Points : 1
Points : 1
Envoyer un message via ICQ à Strit83
Ok je mettrai mon code dans les balises qu'il faut. Désolé.

Par contre ta solution ne fonctionne pas. J'ai l'impression que c'est soit un problème de configuration d'Oracle soit un bug...

Merci de ton aide.
Strit83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2006, 11h46   #4
Xo
Expert Confirmé
 
Avatar de Xo
 
Inscription : janvier 2005
Messages : 2 701
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : janvier 2005
Messages : 2 701
Points : 3 237
Points : 3 237
Envoyer un message via Skype™ à Xo
Faire un MERGE en PL/SQL me paraît un peu tiré par les cheveux, pourquoi ne pas faire un simple SELECT, et gérer la présence ou l'absence de l'enregistrement recherché par un INSERT ou un UPDATE ?
__________________
"Ce que l'on conçoit bien s'énonce clairement,
Et les mots pour le dire arrivent aisément." Nicolas Boileau

"Expliquer empêche de comprendre si cela dispense de chercher"

Quiz Oracle : venez tester vos connaissances !

La FAQ Oracle : 138 réponses à vos questions
Aidez-nous à la compléter
Xo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2006, 11h54   #5
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
c'est pas plutôt AFTER INSERT pour avoir le :new ?

Xo Merge est plus performant et surtout c'est fait pour
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2006, 14h24   #6
Xo
Expert Confirmé
 
Avatar de Xo
 
Inscription : janvier 2005
Messages : 2 701
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : janvier 2005
Messages : 2 701
Points : 3 237
Points : 3 237
Envoyer un message via Skype™ à Xo
Citation:
Envoyé par Fred_D
Merge est plus performant
OK, ça paraît logique ...
Citation:
Envoyé par Fred_D
surtout c'est fait pour
Oui, je sais, c'est même dans la FAQ
__________________
"Ce que l'on conçoit bien s'énonce clairement,
Et les mots pour le dire arrivent aisément." Nicolas Boileau

"Expliquer empêche de comprendre si cela dispense de chercher"

Quiz Oracle : venez tester vos connaissances !

La FAQ Oracle : 138 réponses à vos questions
Aidez-nous à la compléter
Xo 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 23h31.


 
 
 
 
Partenaires

Hébergement Web