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/02/2006, 17h10   #1
Invité de passage
 
Inscription : mai 2004
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 6
Points : 0
Points : 0
Par défaut Utiliser un select dans un SQL Loader d'1 Fichier vers Table

J'utilise SQLLoader pour charger un fichier dans une table.
Dans l'une des valeurs à charger, je voudrais faire référence à un MAX d'une autre table.

LOAD DATA
APPEND
INTO TABLE table1
FIELDS TERMINATED BY ';'
TRAILING NULLCOLS
(donnee1,
donnee2,
donnee3 "select max (champ1) from table2",
donnee4 CONSTANT "1",
date_process SYSDATE
)


Mais j'ai comme retour
Record 1: Rejected - Error on table table1, column donnee3.
ORA-00936: missing expression

Ne peut on pas inclure une clause select dans le SQL loader ?
Merci de vos réponses
nikoko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2006, 17h23   #2
Invité de passage
 
Inscription : mai 2004
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 6
Points : 0
Points : 0
J'ai pallié au problème en utilisant un Trigger sur l'action Insert Into ... c'est tout bon, mais j'aimerais quand même savoir si c'est possible le coup du select dans SqlLoader
merci
nikoko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2006, 00h09   #3
Nouveau Membre du Club
 
Inscription : novembre 2005
Messages : 45
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 45
Points : 39
Points : 39
Je ne sais pas non plus, j'ai dû réaliser la même chose que toi et ma conclusion fût de créer un trigger sur la table.
goplay est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2006, 06h52   #4
Membre expérimenté

 
Avatar de plabrevo
 
Inscription : décembre 2005
Messages : 541
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 541
Points : 598
Points : 598
Si on se place dans le cas de figure du chargement de 1.000.000 lignes, il y a sans doute plus optimal que d'executer strictement la meme requete, un million de fois, pour chacune de ces lignes!!!!
plabrevo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2006, 09h25   #5
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
Et pourquoi ne pas se tourner vers les solutions d'avenir telle que la table externe ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2008, 11h15   #6
Membre éprouvé
 
Inscription : septembre 2004
Messages : 465
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 465
Points : 412
Points : 412
Bonjour.

Je remonte ce post pour savoir s'il y a une solution autre que de créer une table ou un trigger.
Je n'ai pas trouvé d'exemple de syntaxe dans les docs Oraclce (officielles et celle de Jaouad).

Merci


PS: voici le ctl tel que je le conçois, sauf qu'on ne peut utiliser de nom de colonne sqlloader dans la requete sql

Code :
1
2
3
4
5
6
7
8
LOAD DATA 
INTO TABLE ZETABLE
Append
FIELDS terminated BY ';'
TRAILING NULLCOLS
(TOTO FILLER,
 ID_A_RECUPERER EXPRESSION "(SELECT ID FROM TABLE_A_TOTO WHERE NOM = :TOTO)"
)
sachant qu'au départ, j'ai fait cela:

Code :
1
2
3
4
5
6
7
LOAD DATA 
INTO TABLE ZETABLE
Append
FIELDS terminated BY ';'
TRAILING NULLCOLS
(ID_A_RECUPERER EXPRESSION "(SELECT ID FROM TABLE_A_TOTO WHERE NOM = :ID_A_RECUPERER)"
)
et j'ai eu le message d'erreur:
Code :
1
2
Enregistrement 1 : Rejeté - Erreur sur TABLE GPT_FAMILLEFACE.
ORA-01008: Toutes les VARIABLES ne sont pas liées

PS2: j'ai créé une fonction qui exécute le select (ID_A_RECUPERER EXPRESSION "(ma_fonction(:ID_A_RECUPERER)") mais cela ne change rien. J'ai les mêmes messages d'erreurs.
GoLDoZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2008, 11h58   #7
Membre éprouvé
 
Inscription : septembre 2004
Messages : 465
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 465
Points : 412
Points : 412
Après une matinée de recherche, j'ai enfin trouvé!

Contrairement à ce que j'ai lu dans pas mal de docs (peut-être trop anciennes), on peut utiliser une colonne directement dans une requête. Il suffit de mettre BOUNDFILLER à la place de FILLER.

Donc ceci fonctionne parfaitement:
Code :
1
2
3
4
5
6
7
8
LOAD DATA 
INTO TABLE ZETABLE
Append
FIELDS terminated BY ';'
TRAILING NULLCOLS
(TOTO BOUNDFILLER,
 ID_A_RECUPERER EXPRESSION "(SELECT ID FROM TABLE_A_TOTO WHERE NOM = :TOTO)"
)
++


PS: je suis sous Oracle 9.2.
GoLDoZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h59.


 
 
 
 
Partenaires

Hébergement Web