Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Outils > SQL*Loader
SQL*Loader Forum d'entraide sur Oracle SQL*Loader
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 16/03/2007, 13h54   #1
Futur Membre du Club
 
Inscription : mars 2007
Messages : 36
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2007
Messages : 36
Points : 17
Points : 17
Par défaut SQL loader sequence et trigger

Bonjour tout le monde,
excusez moi d'avance si ce problème a déjà été traité mais je n'ai pas réussi à comprendre les choses suivantes:
j'utilise sqlldr pour charger un fichier plat dans une table qui possède un champ style machin_id géré par une séquence et un trigger (auto increment) et qui représente ma clé primaire.
Les champs de mon fichier plat ne sont pas du même ordre que les champs de ma table, du coup je les indique dans mon fichier contrôle. J'utilise aussi l'argument TRAILING NULLCOLS car je ne remplis pas toutes les colonnes de ma table,et ce qui induit entre autres mon problème avec machin_id, car comme c'est ma clé primaire, elle ne peut donc prendre une valeur nulle et le problème, c'est que le trigger ne s'enclenche pas lors du Load Data : pourquoi est ce le cas? (ma séquence et mon trigger sont déjà créés). Donc mon chargement ne se fait pas à cause de l'erreur "de valeur nulle" et l'utilisation manuelle de la séquence de machin_id ne fonctionne pas non plus.
Comment donc utiliser le trigger lors du load data?
Merci d'avance pour vos réponses.
Bonne journée.
waflyx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2007, 14h28   #2
Responsable Business Intelligence
 
Avatar de kalyparker
 
Femme
Consultant en Business Intelligence
Inscription : janvier 2007
Messages : 1 192
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : janvier 2007
Messages : 1 192
Points : 2 564
Points : 2 564
Bonjour et bienvenue sur le forum !

Quelques règles quand même à respecter : il faut que tu donne la version des outils que tu utilises.

Concernant ton problème, est ce que la sequence est utilisée dans le trigger ou est ce que la séquence est utiliser dans le fichier de control de sqlldr ?
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2007, 14h54   #3
Futur Membre du Club
 
Inscription : mars 2007
Messages : 36
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2007
Messages : 36
Points : 17
Points : 17
Merci pour ta réponse.Oups désolé, c'est vrai que j'ai oublié l'essentiel, en fait j'utilise Oracle 10g avec l'outil sql loader qui est livré avec.
Si j'ai bien compris la question, donc j'ai créé ma base, la table concernée avec la séquence et le trigger qui l'utilise.
J'ai d'abord essayé d'utiliser le load data du fichier control en espérant que le trigger interviendrait pour chaque insert ce qui n'a pas été le cas, et ensuite j'ai essayé dans le fichier control d'incrémenter ma séquence manuellement avec nextval, et ca ne marche pas.
waflyx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2007, 15h06   #4
Responsable Business Intelligence
 
Avatar de kalyparker
 
Femme
Consultant en Business Intelligence
Inscription : janvier 2007
Messages : 1 192
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : janvier 2007
Messages : 1 192
Points : 2 564
Points : 2 564
Les triggers / sequences et sqlldr ne font pas bon menage...
Ici tu devrais trouvé quelques infos :

http://www.developpez.net/forums/sho...d.php?t=290094

ou sinon je t'invite à chercher sur le forum...

ou sinon je conseille toujours d'utiliser une table temporaire lorsque le traitement du fichier plat est trop lourd (comme ici), mais cela n'engage que moi
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2007, 16h22   #5
Futur Membre du Club
 
Inscription : mars 2007
Messages : 36
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2007
Messages : 36
Points : 17
Points : 17
en fait j'avais déjà lu ce post, et celui ci aussi:
http://www.developpez.net/forums/sho...d.php?t=263951
où tu parlais des trigger lors d'un load data mais en ce qui me concerne mon trigger ne se met pas automatiquement en route, et c'est cela que je trouve bizarre, sinon oui, la solution serait une table temporaire, mais j'aurai bien voulu savoir pourquoi mon trigger ne marche pas lors d'un load data...
Merci pour ton aide.
waflyx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2007, 16h37   #6
Responsable Business Intelligence
 
Avatar de kalyparker
 
Femme
Consultant en Business Intelligence
Inscription : janvier 2007
Messages : 1 192
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : janvier 2007
Messages : 1 192
Points : 2 564
Points : 2 564
Donne nous un exemple de ton code, peux être qu'une erreur s'est caché dedans...
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2007, 17h31   #7
Futur Membre du Club
 
Inscription : mars 2007
Messages : 36
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2007
Messages : 36
Points : 17
Points : 17
donc voici le code pour la table, la sequence et le trigger :

Code :
1
2
3
4
5
6
7
8
9
CREATE TABLE probe (
	probe_position_x integer NOT NULL,
	probe_position_y integer NOT NULL,
        probe_index integer NOT NULL,
	probe_strandedness varchar2(50),
	probe_type varchar2(50),
	probe_name varchar2(500),
	probe_seq varchar2(1000),
	probe_id integer CONSTRAINT pk_probe_id PRIMARY KEY);
Code :
1
2
3
4
5
6
CREATE SEQUENCE seq_probe_id
START WITH 1
MINVALUE 1
NOCYCLE
NOCACHE
ORDER;
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
CREATE OR REPLACE TRIGGER trg_probe_id
BEFORE INSERT
ON probe
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
SELECT seq_probe_id.NEXTVAL
INTO :NEW.probe_id
FROM DUAL;
END;
/

C'est la première fois que je travaille sous Oracle et je n'ai aucune expérience des trigger et sequence, donc j'espère que j'ai pas codé de bêtises lol.

Et voilà un des fichiers contrôles que j'avais essayé:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
LOAD DATA INFILE 'essai'
TRUNCATE
INTO TABLE probe 
FIELDS TERMINATED BY ';'
TRAILING NULLCOLS
(probe_position_x,
probe_position_y,
probe_index,
probe_seq,
probe_strandedness,
probe_name FILLER,
probe_type FILLER
)
Je pense que FILLER n'est pas utilise vu que j'utilise TRAILING NULLCOLS, de toute façon avec ou sans, c'est le même résultat.
waflyx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2007, 07h11   #8
Responsable Business Intelligence
 
Avatar de kalyparker
 
Femme
Consultant en Business Intelligence
Inscription : janvier 2007
Messages : 1 192
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : janvier 2007
Messages : 1 192
Points : 2 564
Points : 2 564
Bonjour,
Je suis un peu chiante, mais a tu aussi un exemple de fichier à charger ?
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2007, 08h52   #9
Membre éclairé
 
Avatar de Wurlitzer
 
Inscription : avril 2006
Messages : 465
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 465
Points : 368
Points : 368
Comment utilises tu sqlloader. En particulier utilises tu le direct path ?

Citation:
Envoyé par Oracle® Database Utilities 10g Release 1 (10.1)
Direct Loads, Integrity Constraints, and Triggers

With the conventional path load method, arrays of rows are inserted with standard SQL INSERT statements—integrity constraints and insert triggers are automatically applied. But when you load data with the direct path, SQL*Loader disables some integrity constraints and all database triggers. This section discusses the implications of using direct path loads with respect to these features.
Sinon as tu tout simplement vérifié si ton trigger se déclenche quand tu fais un INSERT à la main ?
Wurlitzer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2007, 15h17   #10
Futur Membre du Club
 
Inscription : mars 2007
Messages : 36
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2007
Messages : 36
Points : 17
Points : 17
Par défaut Désolé pour la réponse tardive

Bonjour
merci pour vos réponses, je reviens tout juste de vacances.
Donc du coup, je ne sais plus du tout ce que j'avais commencé à faire avec SQLloader, mais pour répondre à la dernière question , le insert "normal" fait fonctionner le trigger, donc pas de souci de ce côté.
Bon je vais me remettre dans le bain, si je n'y arrive vraiment pas, j'opterai pour un script bash tout simple
bonne journée à tous
waflyx 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 21h17.


 
 
 
 
Partenaires

Hébergement Web