Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour 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 25/07/2011, 10h29   #1
Invité de passage
 
Inscription : octobre 2010
Messages : 10
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 10
Points : 2
Points : 2
Par défaut Erreur de déclencheur - Echec de la revalidation (ORA-04098)

Bonjour à tous,

J'ai un souci d'insertion avec un trigger pour gérer l'autoincrément.
Je ne comprends pas ce qui provoque l'erreur (cf capture d'écran).
Je suis connecté SYSTEM.
Quelqu'un peut-il m'aiguiller sur le problème ?
Merci d'avance.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE TABLE "SYSTEM"."TEST" 
   (	"id" NUMBER(10,0), 
	"TESTDATA" VARCHAR2(255 BYTE)
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "SYSTEM" ;
 
 
CREATE OR REPLACE TRIGGER "SYSTEM"."TRIG_AUTOINC_TEST" 
BEFORE INSERT 
ON test 
FOR EACH ROW 
BEGIN 
SELECT SEQ_test.NEXTVAL 
INTO :NEW.id 
FROM DUAL; 
END;
/
ALTER TRIGGER "SYSTEM"."TRIG_AUTOINC_TEST" ENABLE;
 
 
  CREATE SEQUENCE  "SYSTEM"."SEQ_TEST"  MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 21 CACHE 20 NOORDER  NOCYCLE ;
Images attachées
Type de fichier : png 2011-07-25_101607.png (41,3 Ko, 10 affichages)
Volpe80 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 10h37   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Que donne SHOW ERR après la création du trigger ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 10h53   #3
Invité de passage
 
Inscription : octobre 2010
Messages : 10
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 10
Points : 2
Points : 2
Citation:
Envoyé par orafrance Voir le message
Que donne SHOW ERR après la création du trigger ?
C'est une erreur de compilation :
Erreur(9,6): PLS-00049: variable attachée (bind variable) erronée 'NEW.ID'

Mais je ne vois toujours pas pourquoi, la colonne Id existe bien dans ma table...
Volpe80 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 11h02   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Essaye d'ajouter :
Code :
referencing old AS OLD new AS NEW
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 11h25   #5
Invité de passage
 
Inscription : octobre 2010
Messages : 10
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 10
Points : 2
Points : 2
Citation:
Envoyé par orafrance Voir le message
Essaye d'ajouter :
Code :
referencing old AS OLD new AS NEW
Hélas, cela ne change rien...
Pour mon information, que signifient ces paramètres ?
Volpe80 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 11h34   #6
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
C'est pour dire comment référencer les anciennes et nouvelles valeurs.
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 12h34   #7
Membre confirmé
 
Avatar de jkofr
 
Homme Jacques
Administrateur de base de données
Inscription : octobre 2006
Messages : 251
Détails du profil
Informations personnelles :
Nom : Homme Jacques
Âge : 43
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : octobre 2006
Messages : 251
Points : 219
Points : 219
Envoyer un message via MSN à jkofr
Hello,

Voici un exemple

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
 
CREATE TABLE test (
num number, 
name varchar2(45));
 
CREATE sequence seq_test;
 
CREATE OR REPLACE TRIGGER TRIG_test
BEFORE INSERT 
ON test 
FOR EACH ROW 
BEGIN 
SELECT seq_test.NEXTVAL 
INTO :NEW.num 
FROM DUAL; 
END;
/
 
 
INSERT INTO test (name) VALUES ('totot');
 
SELECT * FROM test;
 
NUM                    NAME                                          
---------------------- --------------------------------------------- 
1                      totot
Jko
__________________
OCA-OCP 11g, SQL and Performance & Tuning Expert 11g
Data Guard 11g, ASM & Grid Control 11g, Apex
jkofr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 12h39   #8
Membre confirmé
 
Avatar de jkofr
 
Homme Jacques
Administrateur de base de données
Inscription : octobre 2006
Messages : 251
Détails du profil
Informations personnelles :
Nom : Homme Jacques
Âge : 43
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : octobre 2006
Messages : 251
Points : 219
Points : 219
Envoyer un message via MSN à jkofr
Hello,

Ok vu:

Eleve les double cotes, surtout sur la colone "id"!


Code :
1
2
3
4
5
6
7
8
9
 
 
CREATE TABLE SYSTEM.TEST
   (	id NUMBER(10,0), 
	TESTDATA VARCHAR2(255 BYTE)
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE SYSTEM ;
Jko
__________________
OCA-OCP 11g, SQL and Performance & Tuning Expert 11g
Data Guard 11g, ASM & Grid Control 11g, Apex
jkofr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 13h37   #9
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Citation:
Envoyé par Volpe80 Voir le message
Je suis connecté SYSTEM.
Déjà ça ça ne va pas, crée un user et donne lui des droits pour tes tests :
Code :
1
2
CREATE user ton_user IDENTIFIED BY mdp;
GRANT connect, resource, dba TO ton_user;
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 14h20   #10
Membre expérimenté
 
Homme Mohamed Houri
Inscription : mars 2010
Messages : 286
Détails du profil
Informations personnelles :
Nom : Homme Mohamed Houri
Localisation : France

Informations forums :
Inscription : mars 2010
Messages : 286
Points : 563
Points : 563
Citation:
Envoyé par Volpe80 Voir le message
Bonjour à tous,
Je suis connecté SYSTEM.
Quelqu'un peut-il m'aiguiller sur le problème ?
Merci d'avance.
Bonjour,

Tout d'abord, le meilleur conseil à vous donner ici c'est de ne plus créer d'objets dans le schéma (ou user) SYSTEM

Citation:

Code :
1
2
 
  CREATE SEQUENCE  "SYSTEM"."SEQ_TEST"  MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 21 CACHE 20 NOORDER  NOCYCLE ;
Veuillez bien à ce que la séquence soit créé avant le trigger

Bien cordialement

Mohamed Houri
Mohamed.Houri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 15h02   #11
Invité de passage
 
Inscription : octobre 2010
Messages : 10
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 10
Points : 2
Points : 2
Citation:
Envoyé par jkofr Voir le message
Hello,

Ok vu:

Eleve les double cotes, surtout sur la colone "id"!
Effectivement c'est bien cela qui gênait.
J'ai modifié le trigger ainsi :
Code :
1
2
3
4
5
6
7
8
9
10
CREATE OR REPLACE
TRIGGER TRIG_Autoinc_test 
BEFORE INSERT 
ON test 
FOR EACH ROW 
BEGIN 
SELECT SEQ_test.NEXTVAL 
INTO :NEW."id" 
FROM DUAL; 
END;
Merci
Volpe80 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 11h56.


 
 
 
 
Partenaires

Hébergement Web