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*Plus Oracle Discussion :

Nom de fichier de spool dynamique


Sujet :

Sql*Plus Oracle

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Points : 503
    Points
    503
    Par défaut Nom de fichier de spool dynamique
    Bonjour.

    C'est un sujet déjà abordé mais je ne trouve pas la syntaxe qui correspond à mon cas.

    Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    VARIABLE nom_fichier VARCHAR2(30)
    
    BEGIN
       <traitement pour consituer le nom du fichier: OK>
       :nom_fichier := "le bon nom";
    END;
    
    SPOOL nom_fichier..txt
    ma_requête
    SPOOL OFF
    J'ai très simplifié, il y a les variables d'environnement qui vont bien, le chemin bien passé par unix, etc...

    Le Spool est bon (j'ai les données dans un fichier) mais je ne récupère jamais le nom du fichier. J'ai essayé 'SPOOL &nom_fichier..txt', 'SPOOL :nom_fichier..txt' et d'autres choses, le fichier n'a jamais le nom qu'il devrait (et parfois même le spool ne fonctionne pas).
    Quelle est la bonne syntaxe? Je ne trouve vraiment pas.

    Merci!!!

  2. #2
    Membre éclairé Avatar de Z3phur
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 680
    Points : 807
    Points
    807
    Par défaut
    Bonjour,

    le fichier que tu lances est un .sql ou tu lances un .sh avec une commande sqlplus?

    car si tu lances un .sh avec sqlplus tu peux mettre :

    ==========================================
    La justice sans la force est impuissante, la force sans la justice est tyrannique...

  3. #3
    Membre éclairé Avatar de Z3phur
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 680
    Points : 807
    Points
    807
    Par défaut
    Bonjour,

    tu peux faire cela dans un sh:

    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
    NOMFIC=`sqlplus toto/toto >> EOF
    declare
     
    v_nomFic varchar2(30);
    ...
     
    begin
    ....
     
    return v_nomFic;
     
    end;
    EOF
    `
     
    spool $NOMFIC
    ...
    ==========================================
    La justice sans la force est impuissante, la force sans la justice est tyrannique...

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Points : 503
    Points
    503
    Par défaut
    Bonjour.

    J'ai un ksh qui appelle un script sql vi sqlplus, avec des paramètres. Pour exemple, je vous donne la ligne, mais ça n'a que peu d'intérêt.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PARAMJOB="-I $INSTANCE -U $USER_LANCE - A $APPLI -O '$DATE_PARAM ${DIRTMP}/' -M $MODULE - R $DIROPC -Sql"
    Je passe 2 paramètres à mon script: DATE_PARAM qui me sert entre autres à constituer le nom du fichier, et DIRTMP pour le répertoire du Spool.

    Je n'ai pas de pb pour récupérer ces paramètres, mon pb se situe dans la manipulation d'une variable déclarée dans le script SQL.

  5. #5
    Membre éclairé Avatar de Z3phur
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 680
    Points : 807
    Points
    807
    Par défaut
    Bonjour,

    peux-tu nous donner ton exemple concret car je ne vois pas ou tu bloques.
    ==========================================
    La justice sans la force est impuissante, la force sans la justice est tyrannique...

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Points : 503
    Points
    503
    Par défaut
    J'ai besoin de ce script SQL (après le Spool il y a un bloc PL/SQL), et c'est une structure qu'on utilise pour tout. Je ne comprends pas pourquoi cela ne fonctionne pas.

    Avec le même appel, voici un exemple qui fonctionne pour une autre appli:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SPOOL &2.MONFIC_&1..TXT
    Mais là, je dois gérer le nom dynamiquement (je calcule un numéro de semaine, etc...). Je suis sûr qu'il y a un truc "à la con" que je ne vois pas pour l'appel de la variable...

  7. #7
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Points : 503
    Points
    503
    Par défaut
    Voici le script:

    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
    --Paramètres de formatage - Sortie Ecran
    SET SERVEROUTPUT ON SIZE 1000000
    SET LINESIZE 150
    SET VERIFY OFF
    SET FEEDBACK OFF
    SET PAGESIZE 0    
    SET ECHO OFF    
    SET TERMOUT OFF
    SET TRIMSPOOL ON 
    SET HEADING OFF    
    
    --definition des variables
    VARIABLE l_fichier      VARCHAR2(30)
    
    SET TERMOUT ON
    SET FEED ON
    
    BEGIN
       -- Nom du fichier
       :l_fichier := 'MONFIC';
       DBMS_OUTPUT.PUT_LINE('fichier:'||:l_fichier);
    END;
    /
    SET TERMOUT OFF
    SET FEED OFF
    
    SPOOL &2.l_fichier..TXT
    
    SELECT sysdate FROM DUAL;
    
    SPOOL OFF
    Le fichier qui sort se nomme "l_fichier..TXT". Si je rajoute ":", le fichier se nomme ":l_fichier..TXT". Si je mets un "&", je n'ai aucun fichier...

  8. #8
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Points : 503
    Points
    503
    Par défaut
    C'est vraiment lié à la commande SPOOL car j'ai une autre variable qui est bien interprétée dans ma requête:

    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
    --definition des variables
    VARIABLE l_fichier      VARCHAR2(30)
    VARIABLE l_semaine VARCHAR2(6)
     
    SET TERMOUT ON
    SET FEED ON
     
    BEGIN
       -- Nom du fichier
       :l_fichier := 'MONFIC';
       DBMS_OUTPUT.PUT_LINE('fichier:'||:l_fichier);
       :l_semaine := '201213';
    END;
    /
    SET TERMOUT OFF
    SET FEED OFF
     
    SPOOL &2.l_fichier..TXT
     
    SELECT *
     FROM ma_table
    WHERE colonne_semaine = :l_semaine;
     
    SPOOL OFF
    Les données sélectionnées sont bonnes. La mauvaise interprétation est donc spécifique au SPOOL. Une histoire de concaténation?

    NB: je précise qu'à chaque fois que je teste, je lance le ksh qui appelle le sql, pour rester conforme à l'application.

  9. #9
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Points : 503
    Points
    503
    Par défaut
    Je continue de sécher. Je suis sûr que la réponse est simple mais rien ne marche...

    Une petite idée?

  10. #10
    Membre éclairé Avatar de Z3phur
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 680
    Points : 807
    Points
    807
    Par défaut
    Bonjour,

    je continue de chercher car il me semble que j'ai déjà eu un problème similaire...
    ==========================================
    La justice sans la force est impuissante, la force sans la justice est tyrannique...

  11. #11
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Points : 503
    Points
    503
    Par défaut
    Si je regarde ce topic et que j'essaie de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    define nom_fichier = :l_fichier
    spool &nom_fichier..txt
    ça ne fonctionne pas, alors que ça devrait selon le topic (ancien)...

  12. #12
    Membre éclairé Avatar de Z3phur
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 680
    Points : 807
    Points
    807
    Par défaut
    C'est exactement ce que je testais sans réussite...
    ==========================================
    La justice sans la force est impuissante, la force sans la justice est tyrannique...

  13. #13
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Points : 503
    Points
    503
    Par défaut
    ALLELUIA! J'ai trouvé une solution en m'inspirant de ce topic sur le forum OTN.

    Je trouve cela assez tordu mais ça fonctionne.

    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
    --definition des variables
    VARIABLE l_fichier      VARCHAR2(30)
    VARIABLE l_semaine VARCHAR2(6)
     
    BEGIN
       -- Nom du fichier
       :l_fichier := 'MONFIC';
       :l_semaine := '201213';
    END;
    /
     
    COLUMN col_fic NEW_VALUE nom_fic
     
    SELECT :l_fichier AS col_fic FROM DUAL;
     
    SPOOL &2.&nom_fic..txt
     
    SELECT *
     FROM ma_table
    WHERE colonne_semaine = :l_semaine;
     
    SPOOL OFF
    C'est vraiment se faire des noeuds au cerveau pour pas grand chose.

    --> je pense qu'on ne peut pas utiliser une "VARIABLE" pour un spool, il faut utiliser une "COLUMN". Voir aussi cet exemple.

    Merci Z3phur pour ta sollicitude et bonne fin de journée

  14. #14
    Membre éclairé Avatar de Z3phur
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 680
    Points : 807
    Points
    807
    Par défaut
    Merci à toi aussi, j'y étais presque...
    ==========================================
    La justice sans la force est impuissante, la force sans la justice est tyrannique...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Nom de fichier de sortie dynamique
    Par nanie42 dans le forum Développement de jobs
    Réponses: 8
    Dernier message: 20/04/2015, 01h57
  2. Nom du fichier log écrit dynamiquement
    Par lolo_irie dans le forum Apache
    Réponses: 2
    Dernier message: 06/07/2009, 11h08
  3. [PL/SQL]générer le nom du fichier de spool
    Par moneyinthebank dans le forum Oracle
    Réponses: 2
    Dernier message: 16/11/2006, 11h21
  4. [SQL*Plus] génération dynamique du fichier de spool
    Par lalystar dans le forum Oracle
    Réponses: 3
    Dernier message: 06/12/2004, 10h44
  5. Récupérer le nom du fichier spool correspondant à un job
    Par chtiot dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 23/02/2004, 20h28

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