Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/01/2012, 18h37   #1
Invité de passage
 
Inscription : janvier 2005
Messages : 15
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 15
Points : 3
Points : 3
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 :
sqlplus -s $CONNEXION_BASE @$FIC_REQUETE > $FIC_RESULTAT
et
Code :
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 :
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 !
toto753 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 19h03   #2
Rédacteur
 
Inscription : décembre 2002
Messages : 2 389
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 389
Points : 3 276
Points : 3 276
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 10g et 11g, sécurité 11g
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/01/2012, 17h44   #3
Invité de passage
 
Inscription : janvier 2005
Messages : 15
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 15
Points : 3
Points : 3
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.
toto753 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 14h46   #4
Membre chevronné
 
Homme O. Joly
Support
Inscription : décembre 2010
Messages : 287
Détails du profil
Informations personnelles :
Nom : Homme O. Joly
Âge : 38
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Support
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2010
Messages : 287
Points : 617
Points : 617
sans passer par un fichier intermédiare :

Code :
RES = $( sqlplus -s $CONNEXION_BASE < $FIC_REQUETE )
ojo77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 11h44   #5
Invité de passage
 
Inscription : janvier 2005
Messages : 15
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 15
Points : 3
Points : 3
Merci mais j'ai besoin de passer par un fichier intermédiaire car je le réutilise par ailleurs.

Code :
sqlplus -s $CONNEXION_BASE < $FIC_REQUETE > $FIC_RESULTAT
Merci par avance de votre aide.
toto753 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 17h34   #6
Membre éprouvé
 
Avatar de argoet
 
Inscription : mai 2002
Messages : 535
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 535
Points : 461
Points : 461
Ou via un little script à adapter selon votre besoin

exec_pls.sh
Code :
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 :
export CONNECTION_BASE=monuser/monpasswd
Et apres vous le lancer comme "voulvoul"

Code :
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
argoet est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h21.


 
 
 
 
Partenaires

Hébergement Web