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

sqlplus depuis script shell ksh


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 33
    Points : 17
    Points
    17
    Par défaut sqlplus depuis script shell ksh
    Bonjour,

    J'aurais besoin de votre aide, SVP
    Je fais appel à un script sql depuis un script ksh (korn shell).

    Voici mes questions.

    1. Quelle différence y a-t-til entre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlplus -s $CONNEXION_BASE @$FIC_REQUETE > $FIC_RESULTAT
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlplus -s $CONNEXION_BASE < $FIC_REQUETE > $FIC_RESULTAT
    ?

    Visiblement, à ma surprise, la 2nde fonctionne mais pas la 1ère.

    2. Si mon script sql contient simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select sysdate from dual;
    le résultat dans FIC_RESULTAT est :
    SYSDATE
    --------
    03/01/12
    
    
    avec une ligne vide au début et à la fin.

    - Peut-on, dans le script sql ou dans la commande sqlplus, faire en sorte de supprimer ces lignes vides ainsi que les lignes d'affichage de nom de colonne SYSDATE et -------- ?

    - Y a-t-il toujours le même nombre de lignes vides (si je dois finalement faire les suppressions de lignes par Unix) ?

    Merci !

  2. #2
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Il faudrait préciser votre OS et votre version d'Oracle.

    Chez moi (Oracle 11.2.0.2 sur RedHat 5.4) ces deux variantes donnent le même résultat.

    Concernant le formatage, vous pouvez utiliser
    qui aura pour effet de supprimer les en-têtes de colonnes ainsi que la ligne vide initiale.
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 33
    Points : 17
    Points
    17
    Par défaut
    Je suis sous Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bits sur AIX 5.3.

    Merci pour le SET PAGESIZE 0 !

    Pour savoir, comment récupérez-vous les données dans votre script ksh ?
    Avec un simple RES=`cat FIC_RESULTAT` ?

    Merci.

  4. #4
    Membre expérimenté Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Points : 1 597
    Points
    1 597
    Par défaut
    sans passer par un fichier intermédiare :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RES = $( sqlplus -s $CONNEXION_BASE < $FIC_REQUETE )

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 33
    Points : 17
    Points
    17
    Par défaut
    Merci mais j'ai besoin de passer par un fichier intermédiaire car je le réutilise par ailleurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlplus -s $CONNEXION_BASE < $FIC_REQUETE > $FIC_RESULTAT
    Merci par avance de votre aide.

  6. #6
    Membre confirmé
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Points : 562
    Points
    562
    Par défaut
    Ou via un little script à adapter selon votre besoin

    exec_pls.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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    #!/bin/ksh
     
    if [ "$1" = "??" ]
    then
     
            echo excution de select sql par sqlplus
            exit
    fi
     
    if [ "$1" = "?" ]
    then
     
    more << !
     
    #
    #       exec_pls
    #       mode d'appel : exec_pls nom_fichier
    #               nom_fichier est le fichier qui contient l'ordre select
    #               cette procedure execute l'ordre SELECT en appellant
    #                       sqlplus
    #
    !
    exit
    fi
     
            #
            #       dans /tmp/sql.$$
            #       on passe des directive d'execution a sqlplus
            #       on ajoute le fichier contenant l'ordre SELECT
            #       on ajoute un ordre exit
            #
     
    SQL_FIC=/tmp/sql.$$
     
    cat > $SQL_FIC << !
    set newpage 0;
    set linesize 500;
    set pagesize 0;
    set echo off;
    set feedback off;
    set heading off;
    set serveroutput on;
    Whenever SQLERROR EXIT FAILURE ROLLBACK;
    !
     
    cat $1 >> $SQL_FIC
     
    echo 'exit;' >> $SQL_FIC
     
            #       execution par sqlplus
     
    sqlplus -s $CONNEXION_BASE  @$SQL_FIC
    retour=$?
     
            #
            #       detruit les fichiers de travail
            #
     
    if [ $retour -eq 0 ]
    then
       /bin/rm $SQL_FIC >/dev/null 2> /dev/null
    fi
     
    exit $retour
    #
    #       FIN DE exec_pls.sh 
    #
    PS : CONNEXION_BASE aura préalablement été exporté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    export CONNECTION_BASE=monuser/monpasswd
    Et apres vous le lancer comme "voulvoul"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    echo "Select count(1) from dual;"| exec_pls.sh     
    echo "Select count(1) from dual;" > ok.sql     
    exec_pls.sh ok.sql     
    exec_pls.sh ok.sql > resultat.txt
    exec_pls.sh < ok.sql     
    exec_pls.sh < ok.sql > resultat.txt
    Signé : Capitaine Jean-Luc Picard

Discussions similaires

  1. Execution script PHP depuis script shell
    Par TangoZoulou dans le forum Langage
    Réponses: 5
    Dernier message: 18/02/2010, 16h32
  2. Programmation script shell ksh unix
    Par Gourou Dsecours dans le forum Administration système
    Réponses: 3
    Dernier message: 09/10/2009, 15h58
  3. lancer sqlplus depuis le shell
    Par ninsekh dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 27/03/2009, 17h23
  4. [Oracle 10g] Connect / as sysdba depuis script shell
    Par userB dans le forum Administration
    Réponses: 6
    Dernier message: 01/06/2008, 22h51
  5. lancer sqlplus depuis un shell
    Par magic charly dans le forum Sql*Plus
    Réponses: 2
    Dernier message: 11/10/2006, 11h12

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