SQL*Loader
Publié le 27 Janvier 2010
SQL*Loader est un utilitaire Oracle qui permet d'insérer directement des données en base sans passé par les requêtes SQL "INSERT INTO ...".
Ceci a plusieurs avantages car on peut charger des fichiers textes contenant les valeurs et le gain de temps est conséquent. Ces principalement ces deux avantages qui ont retenus mon choix sur cet outil.
Maintenant pour le fonctionnement:
C'est pas très compliqué (au début en tout cas).
SQL*Loader (sqlldr) a besoin de 2 fichiers pour travailler:
- le fichier contenant les données à insérer bien sûr
- un fichier de control expliquant à sqlldr comment se présentent les données dans le fichier texte et où les insérer dans la base.
Le fichier texte n'a pas besoin de respecter un format spécifique étant donné que sa structure est décrite dans le fichier de controle.
Dans mon cas je veux remplir une table avec les valeurs qui se trouvent dans mon fichier texte.
La table que je dois remlir contient 2 colonnes:
Ce qui donne par exemple:
Le fichier qui contient les données ressemble à ça:
Donc il faut créer un fichier de contrôle qui prend le mot clé dans le fichier texte et qui insère le nom du site (pointzero.over-blog.com):
Ce fichier effectue un "append" (rajoute) des données dans la table MOTS_CLES.
Il insère toujours la constante 'pointzero.over-blog.com' dans la colonne SITE et les 10 premiers caractère du mot clé qui se trouve le fichier texte dans le colonne MOTCLE.
Voilà tout est prêt il n'y a plus qu'à lancer la commande:
Ceci a plusieurs avantages car on peut charger des fichiers textes contenant les valeurs et le gain de temps est conséquent. Ces principalement ces deux avantages qui ont retenus mon choix sur cet outil.
Maintenant pour le fonctionnement:
C'est pas très compliqué (au début en tout cas).
SQL*Loader (sqlldr) a besoin de 2 fichiers pour travailler:
- le fichier contenant les données à insérer bien sûr
- un fichier de control expliquant à sqlldr comment se présentent les données dans le fichier texte et où les insérer dans la base.
Le fichier texte n'a pas besoin de respecter un format spécifique étant donné que sa structure est décrite dans le fichier de controle.
Dans mon cas je veux remplir une table avec les valeurs qui se trouvent dans mon fichier texte.
La table que je dois remlir contient 2 colonnes:
| site | mot-clé |
| le nom du site | la liste des mots clé contenu dans le site |
Ce qui donne par exemple:
| site | mot-clé |
| pointzero.over-blog.com | SQL |
| pointzero.over-blog.com | Oracle |
| pointzero.over-blog.com | sqlldr |
Le fichier qui contient les données ressemble à ça:
SQL
Oracle
sqlldr
...
Donc il faut créer un fichier de contrôle qui prend le mot clé dans le fichier texte et qui insère le nom du site (pointzero.over-blog.com):
load data
append
into table MOTS_CLES
(
SITE CONSTANT 'pointzero.over-blog.com',
MOTCLE POSITION(01:10) char,
)Ce fichier effectue un "append" (rajoute) des données dans la table MOTS_CLES.
Il insère toujours la constante 'pointzero.over-blog.com' dans la colonne SITE et les 10 premiers caractère du mot clé qui se trouve le fichier texte dans le colonne MOTCLE.
Voilà tout est prêt il n'y a plus qu'à lancer la commande:
sqlldr userid=${USER}/${PASSWORD}@${DATABASE} \
control=motscles.ctl \
direct=true \
readsize=1000 \
bindsize=1000 \
rows=1000 \
errors=0 \
log=motscles.log \
bad=motscles.bad \
discard=motscles.dsc \
data=motscles.txt