IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Spool et Données tronquées


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 31
    Par défaut Spool et Données tronquées
    Bonjour,

    J'ai écris un script (8i- SQLPlus lancé dans .bat) permettant d'extraire le contenu de chacune des tables d'une base de données.
    Pour chacune des tables, je fais un select * et je spoole le résultat dans un fichier txt.
    Cela fonctionne mais il me tronque soit le nom de la colonne soit la donnée.

    Résultat attendu :
    NOM_CLIENT | ADRESSE_CLIENT |
    Dupont Jacques | 2 rue des roses |

    Résultat obtenu :
    NOM_CLIENT| ADRESSE_CLIEN |
    Dupont Jacq | 2 rue des roses

    J'ai essayé de modifier mes SET sans grand succès... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SET LINESIZE 1000000;
    SET PAGESIZE 50000;
    SET head on;
    SET feed off;
    SET trimspool ON;
    set colsep "|" ;
    set line 5000;
    Merci d'avance pour votre aide.

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Essayez:

    COLUMN nom_client FORMAT a30
    par exemple si vous voulez afficher 30 caractères de la colonne nom_client.

  3. #3
    Membre averti
    Inscrit en
    Mai 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 31
    Par défaut
    Merci pour ta réponse.

    La mise en application de cette solution est compliquée vu mon contexte :

    1- Je crée une vue qui contient le nom de mes tables
    2- Je crée un fichier spool contenant le select * de chacune des tables contenues dans ma vue
    3- J'exécute ma requete spoolé
    4- Pour chacune des tables lu je stocke le select * dans un fichier qui porte le nom de la table.

    Ci-après le code...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    CREATE OR REPLACE VIEW LISTE_TABLES
    (TABLE_NAME)
    AS 
    select o.name 
    from sys.user$ u, sys.obj$ o 
    where o.owner# = u.user# 
      and u.name = 'USER_OWNER_GC' 
      and o.type# = 2;
    commit;
     
    SET LINESIZE 1000000;
    SET PAGESIZE 50000;
    SET head on;
    SET feed off;
    SET trimspool ON;
    set colsep "|" ;
    SET LINE 32767;
     
    spool &1\maRequete.sql;
    SELECT listetable
    FROM (	SELECT table_name, 0 as num, 'SET LINESIZE 1000000;'AS listetable from LISTE_TABLES
    	 	UNION ALL
    		SELECT table_name, 1 as num, 'SET PAGESIZE 50000;' from LISTE_TABLES
    	 	UNION ALL
    		SELECT table_name, 2 as num, 'SET FEEDBACK OFF;' from LISTE_TABLES
    	 	UNION ALL
    		SELECT table_name, 3 as num, 'SET head on;' from LISTE_TABLES
    	 	UNION ALL
    	 	SELECT table_name, 4 AS num, 'Spool &1\' || table_name || '.txt;'  FROM LISTE_TABLES
    		UNION ALL
    		SELECT table_name, 5, ('select * from ' || table_name || ';') FROM LISTE
    		UNION ALL
    		SELECT table_name, 6 AS num, 'Spool off;' FROM LISTE_TABLES
    	 )
    ORDER BY table_name, num;
    spool off;
    @&1\maRequete;
    DROP VIEW LISTE_TABLES;
    COMMIT;
    exit;

  4. #4
    Membre averti
    Inscrit en
    Mai 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 31
    Par défaut
    Faute de solution, j'essaye de reprendre mon code avec des UTL_FILE.

    J'ai regardé sur le forum et dans les tutoriels mais je ne parviens pas à le faire fonctionner :

    J'ai modifié mon fichier init.ora et ajouté la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    utl_file_dir="C:\Temp\Test"
    J'ai déclaré un directory : (j'ai aussi essayé sans)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE OR REPLACE DIRECTORY MONREPERTOIRE AS 'C:\Temp\Test';
    J'essaye d'ouvrir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    DECLARE
    PC$Fichier     Varchar2(32767) := 'matable.txt';                     
    PC$Repertoire  Varchar2(32767) := 'C:\Temp\Test\';                      
    fichier UTL_FILE.FILE_TYPE ;  
     
    Begin
      Fichier := UTL_FILE.FOPEN( PC$Repertoire, PC$Fichier , 'W', 32764 ) ;
       <Gestion des exceptions...>
    End;
    Erreur générée :
    ORA-20070: C:\Temp\TestEM\PDS.txt : File location is invalid.


    Config : Oracle 8i - Serveur de BDD sous Windows2000 - TOAD pour requetes

    Désolée de vous ennuyer encore... merci d'avance !

  5. #5
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    As tu les droits de lecture/écriture sur le fichier (filesystem) ?

    De plus, le nom de fichier donné dans le message d'erreur ne correspond pas au nom dans le code !

  6. #6
    Membre averti
    Inscrit en
    Mai 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 31
    Par défaut
    Autant pour moi (j'ai fait plusieurs tests) le message d'erreur est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-20070: C:\Temp\Test\matable.txt : File location is invalid.
    Pour les droits l'instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GRANT READ, WRITE ON DIRECTORY MONREPERTOIRE TO PUBLIC
    Me renvoie l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-22928: privilège sur répertoires non valide
    Le directory est pourtant bien créé : Directory created.

  7. #7
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    En 8i :
    -Pas besoin de DIRECTORY
    - il faut renseigner le paramètre UTL_FILE_DIR dans le init.ora
    - Droit d'ecriture système sur le répertoire
    - Le premier paramètre dans FOPEN est LE CHEMIN PHYSIQUE


    En 10G :
    - besoin de DIRECTORY
    - Droit d'ecriture système sur le répertoire
    - Droit ORACLE (grant) sur le DIRECTORY
    - Le premier paramètre dans FOPEN est LE DIRECTORY

    Il me semble que tu es en 8 i
    Est tu sure de pouvoir écrire sur LE C:\temp du SERVEUR ORACLE ?

  8. #8
    Membre averti
    Inscrit en
    Mai 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 31
    Par défaut
    Tout d'abord merci pour ton aide.

    Je suis bien en Oracle 8i donc :

    - J'ai supprimé la commande DIRECTORY de mon script
    - Dans mon fichier init.ora j'ai la ligne suivance : utl_file_dir="C:\Temp\Test" (la syntaxe est correcte ?)
    - Les droits sur le répertoire C:\Temp\test sont complets pour tous les users

    - Mon FOPEN :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Fichier := UTL_FILE.FOPEN( 'C:\Temp\Test\', 'matable.txt' , 'W', 32764 ) ;

Discussions similaires

  1. Données tronquées dans une UFL Crystal report VB
    Par vincikito dans le forum VB.NET
    Réponses: 0
    Dernier message: 14/05/2013, 11h39
  2. Réponses: 0
    Dernier message: 01/05/2012, 00h33
  3. [CR XI R2] données tronquées avec JDBC
    Par anayathefirst dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 05/09/2007, 12h00
  4. Réponses: 2
    Dernier message: 05/07/2007, 12h39
  5. données tronquées a l'affichage PHP / SQL serveur
    Par dav83 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 11/04/2007, 11h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo