-
Batch et sql loader
Bonjour a tous,
je debute en oracle, j'espere que mon post est au bon endroit, alors voila ce que je veux faire:
j'ai a ma disposition un fichier .csv sur un serveur distant qui est mis à jour quotidiennement. Je souhaiterai pouvoir intégrer les données contenues dans ce fichier a l'aide de sql loader, et ce chaque jour a une heure bien precise. Est-ce que Oracle sait faire ca tout seul? si oui comment, et si non quelle est la solution la plus efficace?
Donc pour résumer, les actions a effectuer une fois par jour a une eure prédéfini (00h05) :
-récupérer le fichier .csv
-effectuer la mise à jour des données de ma base à l'aide de sql loader
-
Il ne me semble pas que l'on puisse automatisé un sqlloader directement par un job oracle.
Mais ça se fait facilement par une ligne de commande lancé dans la crontab sous UNix ou dans une tâche planifiée sous Windows.
En réfléchissant, il doit bien être possible de lancer une ligne de commande par un job stocké en base mais je ne l'ai jamais fait.
-
pour la mise à jour, il suffit de créer une table externe :)
Pour la copie du CSV, ce devra être avec un shell sur l'OS :?
-
Ok, merci de vos réponses. Donc pour le batch je vais passer par une tache planifié windows. Je ne connaissais pas les tables externes, je viens de lire ca sur le site et ca fait exactement ce que je veux faire, dans le sens ou je ne dois pas modifier les données récupérées du fichier csv, donc c'est parfait! Et donc si j'ai bien compris, une fois la table externe créée, si je remplace le fichier csv par le nouveau fichier mis a jour, je n'ai rien a faire de plus? Quand je ferai un select sur ma table externe, j'aurai directement les données du nouveau fichier? (en gros les données du fichier sont bien lu directement dans le fichier, cela ne necessite aucune action utilisateur de "chargement" du fichier?)
-
en effet, la table externe n'est ni plus ni moins qu'une description du fichier (comme SQL*Loader) qui permet à Oracle de lire convenablement son contenu... le contenu étant lu en temps réél, un changement dans le fichier sera immédiatement répercuté :)
-
Ok merci! Une derniere petite question, ou puis-je placer le fichier? est-ce que je peux definir un repertoire sur un serveur distant, ou bien est-ce que le fichier doit necessairement etre placé sur le serveur oracle, dans un repertoire connu de oracle, et si oui lequel?
-
il faut créer une DIRECTORY dans la base qui pointe sur un emplacement sur le serveur Oracle.
-
J'ai une derniere petite question, on me fournit egalement un fichier .txt sans délimiteur, et j'ai l'emplacement de chaque champ, une ligne représentant un enregistrement. J'ai donc le numero d'emplacement du premier caractère de mon champs et la longueur. est-ce possible de faire une table externe avec ce type de fichier, et si oui comment? car sur les exemples de table externe que j'ai trouvé il y a toujours un délimiteur (souvent la vigule).
-
tu as la longueur de chaque champs ?
-
oui j'ai la position du premier caractere et la longueur
ex:code(1, 8); libellé(9,25); etc et donc le champ code commence a la position 1 et contient 8 carcateres, et le champ libellé commence a la position 9 et contient 25 carcteres etc. Je pense que ca doit etre possible mais les exemples de tables externes que j'ai trouvé sont tous avec des delimiteurs...
-
si tu trouves des exemples avec SQL*Loader tu peux t'en inspirer, le fichier de contrôle étant similaire voir identique ;)