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 :

[9i][SQLPlus] spool en Interaction avec un fichier .bat


Sujet :

Sql*Plus Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Avatar de Konrad Florczak
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 242
    Par défaut [9i][SQLPlus] spool en Interaction avec un fichier .bat
    Bonjour

    je lance un fichier .bat qui me permet de faire des automatisations de taches type sqlldr (j'ai besoin de plusieurs utilisateurs sur plusieurs bases de données)

    j'ai donc dans mon fichier .bat des variables comme celles-ci

    test.bat
    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
     
    set grabdir=\\Croggbp2\BrokerSync
    set bkupdir=C:\Alpsbroker\Backups
    set logdir=C:\Alpsbroker\logs
    set zip=C:\gzip\bin\gzip.exe
    set rundir=C:\Alpsbroker
    set endtime=0
    set user=pegaextqa2
    set pass=password
    set db=prpctest
    set reports=C:\Alpsbroker\cron\reports
    [...]
     
    sqlldr userid=%user%/%pass%@%db% control=alpsbroker.ctl log=%logdir%\sqlldr_%fn%.log data=%bkupdir%\AlpsBroker%fn%.dat
    [...]
    ensuite j'ai mon fichier importdata.sql qui traite un certain nombre de taches.
    Tout marche bien sauf bien sur le spool, le login etant géré par le bat :

    comment faire pour prendre les variables %user% et %db% du fichier .bat soient pris en compte dans le fichier importData.sql.


    j'ai bien sur testé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SHOW USER
    WHENEVER SQLERROR EXIT SQL.SQLCODE ROLLBACK;
    BEGIN
      UK_ALPSLOAD.PROCESSIMPORT;
    END;
    /
    commit;
    spool cron/reports/%db%/%user%/
    mais vous vous en doutez qu'il m'envoi chier à la compil.

    Merci pour vos réponses. Je ne vois vraiment pas comment faire.

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    il faut les passer en paramètre je pense.

  3. #3
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    tu peux peut-être employer &_USER et &_CONNECT_IDENTIFIER en 10g

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SQL> spool cron/reports/&_CONNECT_IDENTIFIER/&_USER/fichier.txt
    SQL> spool
    currently spooling to cron/reports/LSC01/SCOTT/fichier.txt
    pour db, tu peux aussi employer @

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SQL> spool cron/reports/@/john
    SQL> spool
    currently spooling to cron/reports/LSC01/john.lst
    tu peux aussi définir le nom de fichier dans une variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SQL> def f=cron/reports/LSC01/SCOTT/fichier.txt
    SQL> spool &f
    SQL> spool
    currently spooling to cron/reports/LSC01/SCOTT/fichier.txt
    pour obtenir les variables d'environment depuis sqlplus, il faut passer soit par l'OS, ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    host echo %db%
    host echo def db=%db% > /tmp/mesvariables.sql
    @/tmp/mesvariables
    ou éventuellement en java (pas terrible)

  4. #4
    Membre Expert
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Par défaut
    sqlldr userid=user/pass@db

    ça marche ça ?

  5. #5
    Membre confirmé
    Avatar de Konrad Florczak
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 242
    Par défaut
    Oui mais c'est plutot ca qui marche pas :

    .bat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlplus %user%/%pass%@%db% @importdata.sql
    et dans le contenu du importdata.sql :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SHOW USER
    WHENEVER SQLERROR EXIT SQL.SQLCODE ROLLBACK;
    BEGIN
      UK_ALPSLOAD.PROCESSIMPORT;
    END;
    /
    commit;
    spool cron/reports/%db%/%user%/
    Mais je vais essayer les propositions du dessus et je vous fait signe

  6. #6
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Petit commentaire hors sujet :


    Citation Envoyé par Konrad Florczak

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHENEVER SQLERROR EXIT SQL.SQLCODE ROLLBACK;
    je préfère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHENEVER SQLERROR EXIT FAILURE ROLLBACK;
    en effet, la plupart des OS ne gèrent pas les codes de retour supérieur à 255.

    donc des erreurs styles ORA-01536 : space quota exceeded retourneront 0 (1536 modulo 256).

  7. #7
    Membre confirmé
    Avatar de Konrad Florczak
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 242
    Par défaut
    Citation Envoyé par laurentschneider
    tu peux peut-être employer &_USER et &_CONNECT_IDENTIFIER en 10g

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SQL> spool cron/reports/&_CONNECT_IDENTIFIER/&_USER/fichier.txt
    SQL> spool
    currently spooling to cron/reports/LSC01/SCOTT/fichier.txt
    pour db, tu peux aussi employer @
    Il me dit lorsque je lance le bat :
    http://konflor.free.fr/images/trash/cron.gif

  8. #8
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    comme je l'ai mentionné, _USER c'est du 10g

  9. #9
    Membre confirmé
    Avatar de Konrad Florczak
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 242
    Par défaut
    Citation Envoyé par laurentschneider
    comme je l'ai mentionné, _USER c'est du 10g
    Merci beaucoup Laurent,

    la Solution pour 9i n'est pas la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    spool cron/reports/&_CONNECT_IDENTIFIER/USER/current_report.html
    Pas mal ton blog by the way, and entirely in English I see
    http://konflor.free.fr

  10. #10
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Citation Envoyé par Konrad Florczak
    la Solution pour 9i est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    spool cron/reports/&_CONNECT_IDENTIFIER/USER/current_report.html
    mais la tu sauves dans cron/reports/prpctest/USER/current_report.html pas dans cron/reports/prpctest/pegaextqa2/current_report.html

  11. #11
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Citation Envoyé par Konrad Florczak
    Pas mal ton blog by the way, and entirely in English I see
    merci, mais c'est sans doute bourré de fautes quand c'est lu par un anglophone

  12. #12
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    9i
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    set head off
    col user new_v _user 
    select USER from dual;
    WHENEVER SQLERROR EXIT SQL.SQLCODE ROLLBACK;
    BEGIN
      UK_ALPSLOAD.PROCESSIMPORT;
    END;
    /
    commit;
    spool cron/reports/@/&_user/fichier.txt

  13. #13
    Membre confirmé
    Avatar de Konrad Florczak
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 242
    Par défaut
    ouais mais dites moi alors comment je peux faire ca :

    sqlplus %user%/%pass%@%db% @importData.sql &param1=%user% &param2=%db%

    et ca marche pas !

    je veux juste que importdata.sql gobbe deux variables !

    des que je fais le code ci-dessus il y a toujours au moment de l'execution :

    ENTER VALUE FOR PARAM1:
    ENTER VALUE FOR PARAM2:

    C pas croyable quand meme que sqlplus ne peut pas gobber deux variables qu'on passe en parametre apres la commande sqlplus

  14. #14
    Membre expérimenté
    Inscrit en
    Septembre 2006
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 142
    Par défaut
    Il ne faut pas indiquer les noms des variables pour les paramètres que l'on passe au script SQL
    de plus les paramètres doivent, dans le script SQL, être référencé par &n
    ou n est la place du paramètre dans la liste des paramètres

    Example
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    essai.sql contient select '&1'||'&2' from dual;
     
    sqlplus <chaine de connexion> @essai.sql toto gato
     
    ancien   1 : select '&1'||'&2' from dual
    nouveau   1 : select 'toto'||'gato' from dual
     
    'TOTO'||
    --------
    totogato

  15. #15
    Membre confirmé
    Avatar de Konrad Florczak
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 242
    Par défaut
    Donc si je te suis bien ca va donner :

    1 - je rajoute dans mon importdata.sql

    spool reports/select '&2' from dual;/select '&1' from dual;/current_report.html


    2 - dans mon fichier.bat je mets :

    sqlplus %user%/%pass%@%db% @importdata.sql %user% %db%

  16. #16
    Membre expérimenté
    Inscrit en
    Septembre 2006
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 142
    Par défaut
    plutot directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    spool reports/&2/&1/current_report.html
    A condition que le répertoire reports/&2/&1 existe

  17. #17
    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

  18. #18
    Membre Expert
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Par défaut
    Oui c'est trés simple, sqlplus fait une simple substitution de chaque paramètre que tu passe. Moi je généralement je passe carément le fichier à spooler, comme ça je controle les sortie depuis le programme appelant.

    exemple de fichier sql:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    spool &1
     
    select '<HTML><BODY>patati;patata</BODY></HTML>' from dual;
     
    spool off
    exit
    et ton bat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sqlplus %user%/%pass%@%db% @patatitata.sql D:\chemin\rep\%db%\%user%\patatitata.html

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

Discussions similaires

  1. Interaction avec un fichier Excel
    Par Miyukaze dans le forum Langage
    Réponses: 8
    Dernier message: 20/08/2009, 10h43
  2. interaction avec un fichier Excel
    Par Ptikir dans le forum VBA Outlook
    Réponses: 7
    Dernier message: 09/04/2009, 13h19
  3. Problème avec un fichier .BAT
    Par jbidou88 dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 01/05/2006, 13h03
  4. lancer un test avec un fichier .bat
    Par marc olivier dans le forum API standards et tierces
    Réponses: 14
    Dernier message: 28/04/2006, 10h33
  5. Problème avec un fichier .BAT
    Par jbidou88 dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 26/04/2006, 14h55

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