Bonjour,
Je programme avec PL/SQL et j'aimerais recuperer toutes les donnees d'une table SQL et les ecrire dans un fichier texte. Les donnees qui sont des varchar doivent etre entre apostrophes : 'je suis un varchar' . Les donnees numeriques n'ont pas d'apostrophe.
Ce fichier texte sert ulterieurement a reinserer les donnees dans une table SQL (me demandez pas pourquoi ou a quoi sert tout ca, je ne fais qu'executer des ordres). C'est pour ca que les donnees varchar doivent etre entre apostrophes pour l'INSERT INTO et pas les donnees numeriques.
Le code qui suit est du code PL/SQL melange avec du C.
Code :
- DECLARE
- file UTL_FILE.FILE_TYPE;
- CURSOR pointeur IS
- SELECT *
- FROM matable;
- row_swap pointeur%ROWTYPE;
- str_swap STRING;
- BEGIN
- file := UTL_FILE.FOPEN('/tmp', 'myfile', 'w');
- OPEN pointeur;
- LOOP
- FETCH pointeur INTO row_swap;
- EXIT WHEN pointeur%NOTFOUND;
- str_swap := "";
- for (i=0 ; i<length(row_swap) ; i++) {
- if (isNumber(row_swap[i])) {
- str_swap := str_swap || row_swap[i];
- } else {
- str_swap := str_swap || '''' || row_swap[i] || '''';
- }
- }
- UTL_FILE.PUT_LINE(file, str_swap);
- END LOOP;
- CLOSE pointeur;
- UTL_FILE.FCLOSE(file);
- EXCEPTION
- WHEN utl_file.invalid_path THEN
- raise_application_error(-20000, 'ERROR: Invalid path for file or path not in INIT.ORA.');
- END;
|
A peu de chose pres (mise en page des donnees dans le fichier texte), c'est ce que je souhaiterais faire.
Ma question : Comment faire pour selectionner la donnee d'une colonne d'un tuple dynamiquement (ce que j'ai grossierement appele row_swap[ i ], avec 'i' designant la colonne) ? Et comment faire une comparaison de type (isNumber() par exemple) ?
S'il y a un moyen d'exporter toute une table SQL en fichier texte directement, je suis aussi preneur
piloupy
PS : je sais qu'on peut faire row_swap.nomColonne1 pour recuperer la valeur de la colonne d'un tuple, mais je ne peux pas l'utiliser de facon dynamique, a moins de faire du code auto-genere, mais bonjour la galere
Message édité par piloupy le 10-08-2004 à 17:51:11