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 :

script spool sqlplus pour exportation


Sujet :

Sql*Plus Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Points : 81
    Points
    81
    Par défaut script spool sqlplus pour exportation
    Bonjour à tous,

    Je cherche à faire un infocentre sur une base "répliquée" (hyperfile) qui permettra d'exécuter des requêtes lourdes sans impacter les performances de la base principale (oracle 9i).

    En détails : il faut que je fasse un export des tables d'une base oracle 9i au format texte. Ces fichiers textes, sont récupérés et importer dans une base hyperfile (windev). On se casse la tête comme ça parce qu'on a pas les licences nécessaires.

    En gros, la procédure consiste à faire un script shell qui me permet d'exécuter sqlplus avec un appel à un fichier script_export.sql

    ce fichier ressemble à ceci :
    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
     
    -- pas de sortie pour l'affichage de la commande
    set echo off
    -- pas de sortie pour montrer le changement de requete avec la variable
    set ver off
    -- pas de sortie sur le terminal
    set termout off
    -- pas d entete de colonne
    set heading off
    -- pas de retour du nombre de lignes de résultat
    set feedback off
    -- largeur de la ligne
    set linesize 200
    -- pas de saut de ligne
    set newpage NONE
    -- enleve les espaces en fin de ligne
    set trimspool on
    set colsep '	'
     
    -- format de la colonne codebase
    column to_char(base) format A3;
    -- sortie fichier texte
    define base=&1;
    spool table_toto.txt;
    select code,to_char(base),libelle,type from toto where &base;
    spool off;
    Mon script shell :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    connexion=instance/mdp@ip
    clause_where="base=28 or base=29"
    #connexion sqlplus
    sqlplus $connexion @$script_export.sql $clause_where;
    Mon problème c'est que je souhaiterais envoyer un string "complet" comme variable.
    Pour le moment, j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select code,to_char(base),libelle,type from toto where base=28;
    il me manque le
    Merci de m'avoir lu

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 76
    Points : 82
    Points
    82
    Par défaut
    Bonjour,

    A mon avis, SQL PLUS considére que 'or' est un deuxieme argument et 'base=29' comme le troisieme argument.
    Dans ton script SQL essaie pour vérifier:
    define base=&1;
    define base2=&2;
    define base3=&3;
    spool table_toto.txt;
    SELECT code,to_char(base),libelle,type FROM toto WHERE &base &base2 &base3;

    Bon courage.

    Raphaël

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Points : 81
    Points
    81
    Par défaut @rapha51
    En effet ton intuition est la bonne,

    Mais comment faire pour passer la string en entier, car comme vous pouvez vous en douter, ma clause where pourra être une grande string

    Merci d'avance

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 76
    Points : 82
    Points
    82
    Par défaut
    Essaie un truc du genre :

    sqlplus $connexion @$script_export.sql "$clause_where";
    ou
    sqlplus $connexion @$script_export.sql '$clause_where';

    Raphaël

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Points : 81
    Points
    81
    Par défaut
    Meme sanction meme punition pour les double quotes "
    et pour les simples quotes ', j'obtiens l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select code,to_char(codebase),libelle,type from absence where $clause_where
                                                                  *
    ERREUR à la ligne 1 :
    ORA-00911: Caractère non valide

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 76
    Points : 82
    Points
    82
    Par défaut
    essaie de remplacer clause_where="base=28 or base=29" par clause_where=base=28 or base=29

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Points : 81
    Points
    81
    Par défaut
    Meme en faisant directement ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sqlplus $connexion @$script_export.sql "base=28 or base=29";
    ca ne marche pas...
    Autant dire qu'on n'est pas sortie de l'auberge

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 76
    Points : 82
    Points
    82
    Par défaut
    Ben moi pour tester j'ai modifié ton script SQL :
    spool table_toto.txt;
    PROMPT &1;
    spool off;

    et j'ai bien base=28 or base=29 dans le fichier table_toto.txt

    par contre j'utilise un fichier.bat

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Points : 81
    Points
    81
    Par défaut
    merci rapha51 pour tes réponses rapides :

    J'ai testé aussi, mais ca ne marche que dans le cas du prompt à l'intérieure même du script (d'ailleurs , je ne sais pas comment récupérer la variable dans ce cas là...)
    Il attend le retour chariot et donc prend toute la chaine.

    La question est : comment simuler le prompt depuis un script extérieur

    Merci d'avance

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Points : 81
    Points
    81
    Par défaut ca y'est !!!
    Pour résoudre le problème,
    J'ai fait directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    --define codebase=&1;
    select code,to_char(codebase),libelle,type from absence where &1;
    Donc pas de define

    Par contre je suis toujours interessé pour le prompt :
    J'ai essayé ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    prompt &1;
    select code,to_char(codebase),libelle,type from absence where &1;
    J'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Entrez une valeur pour 1 : base=28 or base=29
    base=28 or base=29
    Entrez une valeur pour 1 : 
    ancien   1 : select code,to_char(base),libelle,type from absence where &1
    nouveau   1 : select code,to_char(base),libelle,type from absence where
    select code,to_char(base),libelle,type from absence where
                                                                 *
    ERREUR à la ligne 1 :
    ORA-00921: Fin inattendue d'une commande SQL

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 76
    Points : 82
    Points
    82
    Par défaut
    effetivement y a un truc de bizarre :
    define base=&1;
    spool table_toto.txt;
    PROMPT &base;
    PROMPT &1;
    SELECT code,to_char(base),libelle,type FROM toto WHERE &base;
    SELECT code,to_char(base),libelle,type FROM toto WHERE &1;
    spool off;

    donne

    base=28
    base=28 or base=29
    SELECT code,to_char(base),libelle,type FROM toto WHERE base=28
    *
    ERREUR à la ligne 1 :
    ORA-00942: Table ou vue inexistante


    SELECT code,to_char(base),libelle,type FROM toto WHERE base=28 or base=29
    *
    ERREUR à la ligne 1 :
    ORA-00942: Table ou vue inexistante

    Pourquoi la variable base ne contient pas toute la chaine passée en paramètre : je vois pas trop...

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Points : 81
    Points
    81
    Par défaut
    En fait sous linux, pas besoin de mettre le prompt :

    Donc toutes cette série d'erreur est liée j'ai l'impression :
    le code suivant ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    prompt &1;
    SELECT code,to_char(codebase),libelle,type FROM absence WHERE &1;
    alors que celui ci fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT code,to_char(codebase),libelle,type FROM absence WHERE &1;
    Bien sur à l'appelle du script, on fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sqlplus $connexion @$script_export.sql
    Il n'y a pas de clause where bien sûr

    Donc ce qui me fait dire qu'a chaque fois qu'il y a un &, il y a une réinitialisation de la variable

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

Discussions similaires

  1. Script pour exporter des données dans fichier texte
    Par dionmaxime dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/03/2011, 05h18
  2. script connection ssh pour export database
    Par princesse95 dans le forum Programmation et administration système
    Réponses: 1
    Dernier message: 05/10/2009, 17h40
  3. script slide ne marche pas pour export vers.8
    Par hlcginfo dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 09/09/2008, 19h26
  4. Réponses: 2
    Dernier message: 06/12/2007, 15h11
  5. Script sql pour exporter BD de sql server vers access
    Par kayser dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/12/2004, 15h48

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