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

Oracle Discussion :

KSH - SQL plus :Séparteur


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Points : 12
    Points
    12
    Par défaut KSH - SQL plus :Séparteur
    Bonjour à tous.
    J'espere que je suis dans la bonne rubrique, comme je ne sais pas si mon problème est lié à ORACLE ou à UNIX, j'ai choisi l'une des deux rubriques. Voila:
    Je suis nouvelle en programmation shell et j'ai un problème incompréhensible pour moi.
    Voilà, je programme sous ksh et j'aimerai exécuter un script SQL sur une base ORACLE 8.1.7 (je ne peux pas utiliser du PL/SQL).
    Mon scipt ressemble à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    `sqlplus -s /nolog << EOF  
     connect ${SC_ALIAS_LOGIN}/${SC_ALIAS_PWD}@${DB_BASE}    
     SET ECHO OFF  
     SET FEEDBACK OFF  
     SET HEADING OFF  
     SET COLSEP ';'  
     ${cmd} 
     exit 
    EOF` | tr -d " " > ${REP}/${DB_USER}.${table}${Ver_Chg}.lst
    lorsque je l'exécute, j'ai l'erreur
    SQL*Plus:: not found
    Et pourtant, si je modifie le script ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    `sqlplus -s /nolog << EOF  > ${REP}/${DB_USER}.${table}${Ver_Chg}.lst 
     connect ${SC_ALIAS_LOGIN}/${SC_ALIAS_PWD}@${DB_BASE}    
     SET ECHO OFF  
     SET FEEDBACK OFF  
     SET HEADING OFF  
     SET COLSEP ';'  
     ${cmd} 
     exit 
    EOF`
    Là il s'exécute et j'ai des résultats.

    Je ne peux utiliser cette deuxième solution car j'ai beaucoup d'espace dans certaine tables et elle dépasse 2Go, ce qui fait planter mon script.

    J'ai vérifié le PATH et le ORACLE_HOME et j'ai testé le chargement de l'environnement ORACLE dans mon script avec les instructions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    export PATH=$PATH:usr/bin/X11usr:/local/bin 
    umask=022 
    export ORACLE_SID=${1} 
    export ORAENV_ASK=NO 
    . oraenv
    mais le comportement est toujours aussi bizarre
    Je suis preneuse pour toute piste qui m'aiderai à avancer.

    Merci

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Bonjour ,
    si j'ai bien compris le probléme vient de la redirection de la sortie
    ecran fichier

    Est ce que j'ai bien compris :

    SI c'est le cas, tu peux gérer la redirection grâce au spool combiné avec le mode silent de sqlplus

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Points : 12
    Points
    12
    Par défaut
    Bonjour

    Merci pour ta réponse

    Le problème est exactement celui là. L'utilisation du SPOOL est celle que j'avais dans ma première solution (j'ai oublié de le mentionner, dsl).
    Le souci est que certaines de mes tables ont beaucoup de champs à NULL et le select renvoie des lignes avec beaucoup d'espaces. Au final, j'ai des fichiers de plus de 2Go (alors qu'une seule de mes tables fait plus de 2Go) qui font planter mon script.
    Je souhaite donc supprimer ses espaces avant de sauvegarder le résultat dans le fichier...Peut être qu'il y a une méthode plus élégante? Je suis aussi preneuse.

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Tu peux tout a fait te servir de spool et gérer les champs NULL

    Pour les éliminer une requête du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where champs is not NULL
    ne suffit pas

  5. #5
    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
    Points : 4 926
    Points
    4 926
    Par défaut Re: KSH - SQL plus : : Not Found
    Citation Envoyé par Mella
    Mon scipt ressemble à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    `sqlplus -s /nolog << EOF  
    EOF` | tr -d " " > ${REP}/${DB_USER}.${table}${Ver_Chg}.lst
    je pense qu'il suffit d'enlever les accent graves
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sqlplus -s /nolog << EOF  | tr -d " " > ${REP}/${DB_USER}.${table}${Ver_Chg}.lst
    connect ....
    EOF

  6. #6
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Points : 12
    Points
    12
    Par défaut Re: KSH - SQL plus : : Not Found
    Citation Envoyé par laurentschneider

    je pense qu'il suffit d'enlever les accent graves
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sqlplus -s /nolog << EOF  | tr -d " " > ${REP}/${DB_USER}.${table}${Ver_Chg}.lst
    connect ....
    EOF
    Lorsque je vire les "`", j'ai le message d'erreur suivant:
    ./creation_fichier_plats.ksh[76]: syntax error at line 115 : `<<' unmatched
    Si je modifie mon script comme tu le fais en ajoutant les "`" par contre, ça resoud mon problème SQL*Plus:: Not Found mais par contre, les espaces ne sont pas supprimés du fichier résultat

    Merci pour ta réponse

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Jaouad
    Tu peux tout a fait te servir de spool et gérer les champs NULL

    Pour les éliminer une requête du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where champs is not NULL
    ne suffit pas
    ça fausserai mes résultats. Je veux toutes la ligne même s'il il y a des NULL; mais je ne veux pas qu'il laisse des espaces pour ces valeurs NULL.
    J'espere un resultat du genre
    val1;val2,,val4
    et ce que j'ai actuellement c'est
    val1;val2, ,val4
    Merci[/quote]

  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
    Points : 4 926
    Points
    4 926
    Par défaut Re: KSH - SQL plus : : Not Found
    Citation Envoyé par Mella
    Citation Envoyé par laurentschneider

    je pense qu'il suffit d'enlever les accent graves
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sqlplus -s /nolog << EOF  | tr -d " " > ${REP}/${DB_USER}.${table}${Ver_Chg}.lst
    connect ....
    EOF
    Lorsque je vire les "`", j'ai le message d'erreur suivant:
    ./creation_fichier_plats.ksh[76]: syntax error at line 115 : `<<' unmatched
    Si je modifie mon script comme tu le fais en ajoutant les "`" par contre, ça resoud mon problème SQL*Plus:: Not Found mais par contre, les espaces ne sont pas supprimés du fichier résultat

    Merci pour ta réponse
    tu noteras que j'ai mis le pipe après le premier EOF pas le 2e!!!

    non pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sqlplus <<EOF
    ...
    EOF | tr -d " "
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sqlplus <<EOF | tr -d " "
    ...
    EOF

  9. #9
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Pour moi ce n'est qu'un probléme de requêtte :

    ici on voit bien qu'il n'y a pas d'espace entre les séparateurs :

    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
     
    SQL> create table test ( a varchar2(10) , b number  , c varchar2(10)) ; 
     
    Table créée.
     
    SQL> 
    SQL> 
    SQL> insert into test values ('a',1,NULL) ;
     
    1 ligne créée.
     
    SQL> insert into test values (NULL,1,'a') ;
     
    1 ligne créée.
     
    SQL> insert into test values ('a',NULL,'b') ;
     
    1 ligne créée.
     
    SQL> select * from test ; 
     
    A                   B C
    ---------- ---------- ----------
    a                   1
                        1 a
    a                     b
     
     
     
    SQL> select a||';'||b||','||c from test ;
     
    A||';'||B||','||C
    --------------------------------------------------------------
    a;1,
    ;1,a
    a;,b
     
    SQL>

  10. #10
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Jaouad
    Pour moi ce n'est qu'un probléme de requêtte :

    ici on voit bien qu'il n'y a pas d'espace entre les séparateurs :

    SQL> select a||';'||b||','||c from test ;
    SQL> [/code]
    Je n'avais pas libellé ma requête ainsi. J'utilisais un
    SET COLSEP ';'
    Effectivement, en la libellant avec la concaténation, je n'ai plus les espaces. Par contre, est ce qu'il y a une incidence sur la performance d'Oracle? En temps, en occupation du rollback,... J'ai énormement de restrictions par rapport à celà.

    Merci

  11. #11
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Points : 12
    Points
    12
    Par défaut Re: KSH - SQL plus : : Not Found
    Citation Envoyé par laurentschneider
    tu noteras que j'ai mis le pipe après le premier EOF pas le 2e!!!

    non pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sqlplus <<EOF
    ...
    EOF | tr -d " "
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sqlplus <<EOF | tr -d " "
    ...
    EOF
    Oui, j'ai modifié mon code ainsi. A présent, j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    `sqlplus -s /nolog << EOF | tr -d " " > ${REP}/${DB_USER}.${table}${Ver_Chg}.lst
    whenever sqlerror exit 2
    whenever oserror exit 1
    connect ${SC_ALIAS_LOGIN}/${SC_ALIAS_PWD}@${DB_BASE}
    ...			
    EOF`
    et lorsque je vire les "`", j'ai l'erreur décrite dans mon précedent msg. Peut être une erreur de syntaxe...
    Sinon, s'il n'y a aucune incidence sur le comportement d'Oracle, je prendrai surement la solution de Jaouad.

    Merci pour votre aide

  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
    Points : 4 926
    Points
    4 926
    Par défaut Re: KSH - SQL plus : : Not Found
    Citation Envoyé par Mella
    Peut être une erreur de syntaxe...
    oui peut-être

    ici ça joue

    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
     
    $ cat x              
    #!/bin/ksh
     
    REP=/tmp
    DB_USER=LSC
    table=t
    Ver_Chg=1
    SC_ALIAS_LOGIN=scott
    SC_ALIAS_PWD=tiger++1
    DB_BASE=LSC63
     
    sqlplus -s /nolog << EOF | tr -d " " > ${REP}/${DB_USER}.${table}${Ver_Chg}.lst 
    whenever sqlerror exit 2 
    whenever oserror exit 1 
    connect ${SC_ALIAS_LOGIN}/${SC_ALIAS_PWD}@${DB_BASE} 
    ...          
    EOF
    $ ./x                
    $ cat /tmp/LSC.t1.lst
     
     
     
     
    SP2-0042:unknowncommand"..."-restoflineignored.
    $

  13. #13
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Points : 12
    Points
    12
    Par défaut Re: KSH - SQL plus : : Not Found
    [quote="laurentschneider"]
    Citation Envoyé par Mella
    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
     
    $ cat x              
    #!/bin/ksh
     
    REP=/tmp
    DB_USER=LSC
    table=t
    Ver_Chg=1
    SC_ALIAS_LOGIN=scott
    SC_ALIAS_PWD=tiger++1
    DB_BASE=LSC63
     
    sqlplus -s /nolog << EOF | tr -d " " > ${REP}/${DB_USER}.${table}${Ver_Chg}.lst 
    whenever sqlerror exit 2 
    whenever oserror exit 1 
    connect ${LOGIN}/${PWD}@${DB_BASE} 
    ...          
    EOF
    $ ./x                
    $ cat /tmp/LSC.t1.lst
     
     
     
     
    SP2-0042:unknowncommand"..."-restoflineignored.
    $
    Non, je n'ai pas mis "..." dans ma requête, j'ai voulu abreger la requête dans le message. sinon, j'ai un Je comprends mieux l'eereur KSH. En fait, il considère le résultat de ma commande comme une commande KSH et essaye de l'exécuter... je viens juste de le comprendre. C'est aussi une piste à creuser[/code]

  14. #14
    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
    Points : 4 926
    Points
    4 926
    Par défaut
    donc ça marche maintenant que tu as trouvé ton erreur ?

  15. #15
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Citation Envoyé par Mella
    Effectivement, en la libellant avec la concaténation, je n'ai plus les espaces. Par contre, est ce qu'il y a une incidence sur la performance d'Oracle? En temps, en occupation du rollback,... J'ai énormement de restrictions par rapport à celà.

    Merci
    Non aucune incidence ...

  16. #16
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par laurentschneider
    donc ça marche maintenant que tu as trouvé ton erreur ?
    Oui ça marche
    Le code ressembe à ça:
    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
     
    if [ ! -f ${REP}/${DB_USER}.${table}${Ver_Chg}.lst ]; then
    			(sqlplus -s /nolog | tr -d ' \t'  > ${REP}/${DB_USER}.${table}${Ver_Chg}.lst) <<EOF
    			whenever sqlerror exit 2
    	        	whenever oserror exit 1
    			connect ${LOGIN}/${PWD}@${BASE}
    			SET TERMOUT OFF  
    			SET TRIMSPOOL ON 
    			SET RECSEP OFF   
    			SET NEWPAGE 0    
    			SET SPACE 0      
    			SET LINESIZE 4000
    			SET PAGESIZE 0   
    			SET ECHO OFF	
    			SET FEEDBACK OFF	
    			SET HEADING OFF	
    			SET COLSEP ';'	
    			${cmd}
    			exit
    EOF

  17. #17
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Jaouad

    Non aucune incidence ...
    Ok. A présent, j'ai deux solutions (si toutes les journées pouvaient s'achever ainsi ).

    Merci pour votre aide.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/07/2009, 18h25
  2. [SQL*Plus] génération dynamique du fichier de spool
    Par lalystar dans le forum Oracle
    Réponses: 3
    Dernier message: 06/12/2004, 11h44
  3. Réponses: 2
    Dernier message: 17/11/2004, 11h50
  4. Réponses: 2
    Dernier message: 01/06/2004, 16h08
  5. listage de triggers/sequences avec sql plus
    Par stross dans le forum Oracle
    Réponses: 52
    Dernier message: 20/04/2004, 16h41

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