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

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 31
    Points : 15
    Points
    15
    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
    Points : 3 597
    Points
    3 597
    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 à l'essai
    Inscrit en
    Mai 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 31
    Points : 15
    Points
    15
    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 à l'essai
    Inscrit en
    Mai 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 31
    Points : 15
    Points
    15
    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 chevronné 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
    Points : 2 071
    Points
    2 071
    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 !
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 31
    Points : 15
    Points
    15
    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 chevronné 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
    Points : 2 071
    Points
    2 071
    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 ?
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  8. #8
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 31
    Points : 15
    Points
    15
    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 ) ;

  9. #9
    Membre chevronné 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
    Points : 2 071
    Points
    2 071
    Par défaut
    Le repertoire, à mon avis, c'est
    C:\Temp\Test (sans l'antislash final).

    As tu REELLEMENT les droits d'écriture (user WINDOWS) sur C:\Temp\Test ?
    (en partant du principe qu'il s'agit du C: du serveur ORACLE) ?

    NB : Il faut redemarrer l'instance ORACLE aprés avoir modifier UTL_FILE_DIR
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  10. #10
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 31
    Points : 15
    Points
    15
    Par défaut
    Pour les droits :
    Si je fais un clic droit sur le dossier -> onglet sécurité dans la liste des users j'ai uniquement : "tout le monde" et pour les droits d'accès tout est coché..

    J'ai essayé sans le"\" ça marche pas non plus

  11. #11
    Membre chevronné 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
    Points : 2 071
    Points
    2 071
    Par défaut
    Bon sang de bois !
    Serveur ou pas serveur ????
    Qu'est ce que ca veut dire "ca marche pas" ????
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  12. #12
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 31
    Points : 15
    Points
    15
    Par défaut
    Oui sur le serveur de base de données

    J'ai vérifié qui avait les droits sur le répertoire C:\Temp\Test.
    tout le monde y a accés il n'y a aucune restriction.

    Par acquis de conscience j'ai quand meme ajouter le USER system avec tous les droits.

    J'ai relancé le script toujours la même erreur
    idem sans le dernier "\" dans le openfile

  13. #13
    Membre chevronné 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
    Points : 2 071
    Points
    2 071
    Par défaut
    Modifie ton code pour afficher UTL_FILE_DIR (et l'utiliser comme repertoire d'écriture)
    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
    BEGIN
    CURSOR cur_param
          IS
             SELECT VALUE
               FROM v$parameter
              WHERE NAME = 'utl_file_dir';
    
       PC$Fichier     Varchar2(32767) := 'matable.txt';                     
    PC$Repertoire  Varchar2(32767) := 'C:\Temp\Test\';                      
    fichier UTL_FILE.FILE_TYPE ;  
    
    Begin
       OPEN cur_param;
    
          FETCH cur_param
           INTO pc$repertoire;
    
          CLOSE cur_param;
    DBMS_OUTPUT.PUT_LINE(PC$Repertoire);   
    Fichier := UTL_FILE.FOPEN( PC$Repertoire, PC$Fichier , 'w', 32764 ) ;
       <Gestion des exceptions...>
    End;
    NB : ON est d'accord : tout ca s'execute sur le serveur ?
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

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