Question Hello Jean pierre,
In the company I'm working for, we're using an openroad application that run on a Ingres 2.6 database . I've been asked to automate an export of data from tables within ingres to either .csv or .txt format .Those data will than be imported onto access .
Would you be able to help ?
I'm don't really have any database or develloping skills unfortunatel, and would really apprieciate some help .
Regardez aussi la commande copydb (cf http://docs.ingres.com/cmdref/copydbCommandCopyandRestoreaDatabase) pour générer des ordres copy table et les modifier au lieu de les créer de toute pièce (selon la liste des tables à exporter, le nombre des colonnes, cela peut être intéressant). Utilisez la commande copydb en lui passant aussi une liste de tables :
copydb -c nom_base table1 table2 table3
-c est obligatoire dans votre cas pour générer des ordres d'export/import au format ASCII (vs binaire), qui est par définition lisible à l'oeil (par vi ou notepad).
Jetez aussi un oeil à la commande unloaddb (qui concerne toute la base). En guise de culture c'est intéressant. La commande unloaddb génère, pour toute la base, 4 fichiers :
- copy.out : SQL d'export des données
- unload.ing (ou unload.bat) : programme d'export des données (appelle copy.out)
- copy.in : SQL d'import des données (et création des tables)
- reload.ing (ou reload.bat) : programme d'import des données (appelle coy.in)
Pour copydb c'est quasiment la même chose, si ce n'est qu'elle ne génère que les fichiers copy.in et copy.out. Etudiez aussi les options de copydb, dans votre cas -with_data devrait être intéressante.
Quel que soit le type de votre OS (Windows, Unix ou Linux) vous procédez comme suit :
1/ Fabriquer un fichier SQL d'export des données par COPY TABLE (ne pas oublier \p\g à la fin)
2/ A fréquence régulière ou souhaitée, lancer la commande suivante :
sql nom_base < fichier.sql
Regardez les options de la commande sql (http://docs.ingres.com/cmdref/sqlCommandStarttheLineModeSQLTerminalMonitor)
A savoir si vous souhaitez exporter le résultat d'une requête (avec ou sans jointure), vous pouvez passer par les tables mémoire (GLOBAL TEMPORARY TABLE, cf http://docs.ingres.com/sqlref/DeclareGlobalTemporaryTable), on peut les copier de la même manière qu'une vraie table. Selon la version de Ingres, il faut absolument précéder le nom de la table par session. (versions < Ingres2006 R2 je crois).
N'hésitez pas à revenir vers moi en cas de nécessité.