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

Shell et commandes GNU Discussion :

SQL et shell linux


Sujet :

Shell et commandes GNU

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 821
    Points : 234
    Points
    234
    Par défaut SQL et shell linux
    Bonjour
    J'ai un problème avec le lancement de requete SQL dans un script shell linux voiçi 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
     
    >${FIC_SQL}
     
    echo "delete from teta;"     >  ${FIC_SQL}
    echo  "delete from tjon;"    >> ${FIC_SQL}
    echo "delete from ttyl;"   >> ${FIC_SQL}
    echo "delete from tage;"  >> ${FIC_SQL}
    echo "delete from tpai;"  >> ${FIC_SQL}
    echo "delete from tsta;"  >> ${FIC_SQL}
    echo "delete from TSTT;"  >> ${FIC_SQL}
    echo "delete from TST1;"  >> ${FIC_SQL}
     
    echo "commit;"  >> ${FIC_SQL}
     
    echo $FIC_SQL
    echo $ORA_DBA
     
     
     
    #
    #-------------------------------------------------------------------------------
    # Execution de la requete SQL sous SQL*PLUS
    #-------------------------------------------------------------------------------
    sqlplus  $ORA_DBA@XE @Fic.sql  
     
     
    exit 
    EOF
    CE script fonctionne parfaitement mais et c'est là ma question reste sur le prompt SQL :

    >SQL

    Là c'est pas grave mais c'est plutôt embétant quand on a des traitements shell après avoir lancé des requetes : en effet les requêtes s'exécutent puis s'arrêtent sur le prompt >SQL, là le script s'arrête et n'exécute pas la suite du code.
    Et pour revenir sur le prompt shell >$ je dois faire Ctrl + C

    Comme je l'ai déjà dit sur un autre post le shell Unix ne se comporte pas pareil.
    Si quelqu'un a une solution merçi
    A +

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par xeron33 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlplus  $ORA_DBA@XE @Fic.sql
    Je suppose que ${FIC_SQL} contient Fic.sql, non?

    Je ne connais pas la syntaxe @Fic.sql
    J'imagine que cela indique à sqlplus de lire le fichier.
    Sinon, il semble que la syntaxe habituelle soit de rediriger le flux d'entrée de sqlplus vers le fichier (à tester):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlplus $ORA_DBA@XE < "${FIC_SQL}"

    CE script fonctionne parfaitement mais et c'est là ma question reste sur le prompt SQL :

    >SQL
    Peut-être faut-il incorporer le exit à l'intérieur du fichier de commandes sql.
    D'autre part, le 'EOF' ne sert à rien. Peut-être est-ce un copier/coller d'un exemple avec un heredoc.

    De plus, je trouve qu'une manière plus agréable à écrire et à lire pour concocter le fichier consiste à utiliser le heredoc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    cat > "${FIC_SQL}" <<EOF
    delete from teta;
    delete from tjon;
    delete from ttyl;
    delete from tage;
    delete from tpai;
    delete from tsta;
    delete from TSTT;
    delete from TST1;
    commit;
    exit;
    EOF
    Si la solution avec redirection du flux d'entrée fonctionne, on doit même pouvoir se passer complètement du fichier temporaire (à tester):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    sqlplus $ORA_DBA@XE <<EOF
    delete from teta;
    delete from tjon;
    delete from ttyl;
    delete from tage;
    delete from tpai;
    delete from tsta;
    delete from TSTT;
    delete from TST1;
    commit;
    exit;
    EOF
    cf. ce post récent.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 821
    Points : 234
    Points
    234
    Par défaut réponse à jack-ft
    Merçi pour votre réponse, votre 1ère solution fonctionne la seconde non je retrouve le même problème
    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
     
    >${FIC_SQL}
     
     
    cat > "${FIC_SQL}" <<EOF
    delete from teta;
    delete from tjon;
    delete from ttyl;
    delete from tage;
    delete from tpai;
    delete from tsta;
    delete from TSTT;
    delete from TST1;
    #echo "delete from TST2;"  >> ${FIC_SQL}
    #echo "delete from tags;"    >> ${FIC_SQL}
    commit;
    exit;
    EOF
     
    # Execution de la requete SQL sous SQL*PLUS
    #-------------------------------------------------------------------------------
    sqlplus  $ORA_DBA@XE @Fic.sql  
    exit 
    EOF
    j'ai encore une remarque dans la 1ère solution quand je laisse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #echo "delete from TST2;"  >> ${FIC_SQL}
    #echo "delete from tags;"    >> ${FIC_SQL}
    il en tient compte et me fais cette erreur :
    SP2-034 : unknow command beginning "echo "dele..." rest of lign ignored
    SP2-034 : unknow command beginning "echo "dele..." rest of lign ignored

    curieux car c'est du commentaire ! Quand je l'enlève plus ces messages...
    Si vous avez une idée merçi

  4. #4
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 311
    Points : 12 830
    Points
    12 830
    Par défaut
    Bonjour,

    C'est du commentaire en shell pas en sql

    En fait tu n'as pas compris la syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    cat > "${FIC_SQL}" <<EOF
    delete from teta;
    delete from tjon;
    delete from ttyl;
    delete from tage;
    delete from tpai;
    delete from tsta;
    delete from TSTT;
    delete from TST1;
    #echo "delete from TST2;"  >> ${FIC_SQL}
    #echo "delete from tags;"    >> ${FIC_SQL}
    commit;
    exit;
    EOF
    Ici, tu dis à la commande cat que la sortie standard est le fichier variabilisé ${FIC_SQL}.
    Et que l'entrée standard, est le fichier anonyme qui contient les données entre <<EOF et EOF
    Et les 2 lignes que tu considères être des commentaires sont bien dans le fichier anonyme et se retrouveront donc dans ton fichier variabilisé.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 821
    Points : 234
    Points
    234
    Par défaut réponse à disedorgue
    Merci beaucoup pour l'explication car en effet j'avais pas compris

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par xeron33 Voir le message
    Merçi pour votre réponse, votre 1ère solution fonctionne la seconde non je retrouve le même problème
    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
     
    >${FIC_SQL}
     
     
    cat > "${FIC_SQL}" <<EOF
    delete from teta;
    delete from tjon;
    delete from ttyl;
    delete from tage;
    delete from tpai;
    delete from tsta;
    delete from TSTT;
    delete from TST1;
    #echo "delete from TST2;"  >> ${FIC_SQL}
    #echo "delete from tags;"    >> ${FIC_SQL}
    commit;
    exit;
    EOF
     
    # Execution de la requete SQL sous SQL*PLUS
    #-------------------------------------------------------------------------------
    sqlplus  $ORA_DBA@XE @Fic.sql  
    exit 
    EOF
    Pour plus de cohérence, je te propose de remplacer '@Fic.sql' par '@${FIC_SQL}'.

    Et je répète que tu peux supprimer la dernière ligne 'EOF' du script, ainsi que la ligne précédente 'exit' (puisque le script terminera normalement sur la dernière instruction (sqlplus)).

    [Hors-taux-graphe]
    merçi
    Devant 'e' et 'i', le 'c' ne prend jamais de cédille (comme dans le mot 'ceci').

    J'aperçois ça. Aperçus-tu ceci? (à prononcer à haute voix)
    [/Hors-taux-graphe]

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 821
    Points : 234
    Points
    234
    Par défaut
    Merci pour ton aide, je viens d'essayer '@Fic.sql' et enlever le "EOF" et "EXIT" ça ne marche pas.
    Merci pour le cours d'orthographe
    A +

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par xeron33 Voir le message
    Merci pour ton aide, je viens d'essayer '@Fic.sql' et enlever le "EOF" et "EXIT" ça ne marche pas.
    Je suis surpris!
    Tu as bien enlevé le exit et EOF à la fin du script (lignes 23 et 24)?
    Et non le 'exit;' et le EOF à la fin du heredoc (lignes 17 et 18)!

    Merci pour le cours d'orthographe
    A +
    Que çela ne çe renouvelle pas!

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 821
    Points : 234
    Points
    234
    Par défaut réponse à jack-ft
    Ok on ne s'était pas compris : en effet ça marche merci pour ton aide.
    A +

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

Discussions similaires

  1. connexion perl sql server sous linux!
    Par boubadi dans le forum SGBD
    Réponses: 2
    Dernier message: 20/11/2007, 16h30
  2. SQL Plus Et Shell Linux
    Par Dobyan08 dans le forum Sql*Plus
    Réponses: 6
    Dernier message: 20/09/2007, 15h14
  3. SQL Server sous Linux
    Par srvremi dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 27/06/2006, 16h52
  4. Modifier un shell linux
    Par baali_hacene dans le forum Linux
    Réponses: 10
    Dernier message: 09/03/2006, 14h57
  5. CODE RETOUR GENERE PAR PL/SQL POUR SHELL UNIX
    Par mimi_été dans le forum PL/SQL
    Réponses: 6
    Dernier message: 18/11/2004, 09h32

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