Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels 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 07/08/2007, 10h13   #1
Membre éclairé
 
Avatar de macben
 
Inscription : mars 2004
Messages : 526
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : mars 2004
Messages : 526
Points : 379
Points : 379
Envoyer un message via AIM à macben Envoyer un message via MSN à macben
Par défaut Sql*Plus appelé depuis un Shell

Bonjour,

voilà une question "classique" à laquelle j'ai trouvé 10 000 réponses sur le net mais aucun ne fonctionne pour mon cas qui me parait pourtant assez banal

J'ai un shell :

Code :
1
2
3
4
5
6
#!/bin/ksh
#---------------------------------------------------------------------
echo "LANCEMENT !"
SORTIE=`sqlplus -S apps/apps @./sql.sql`
echo $SORTIE
echo "FIN !"
Et je veux que la variable SORTIE soit alimentée par le fichier "sql.sql" qui est :

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
Set heading OFF
Set linesize 1000
Set feedback OFF
Set echo OFF
Set verify OFF
Set serveroutput On
Set SERVEROUTPUT ON SIZE 1000000

WHENEVER sqlerror exit FAILURE ROLLBACK;

declare
  i number;
begin
	dbms_output.put_line('Mes messages de LOG');
	dbms_output.put_line('Mes messages de LOG');
	dbms_output.put_line('Mes messages de LOG');
	null;
        return 0;
exception
  when others then
    null;
end;
/
show error;
exit;
Le return ne fonctionne pas mais c'est l'idée de ce que je voudrais.

Je ne veux pas que SORTIE contienne un grep du spool de mon sql car j'ai plein de message de debug, j'ai essayé exit 0; , j'ai essayé WHENEVER sqlerror exit 1 ROLLBACK; j'ai essayé un :sortie = 0; enfin tout ce que je trouvais mais rien ne fonctionne.

Auriez-vous une idée ?

Merci
macben est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 10h20   #2
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Je ne comprends pas ce que tu veux faire !
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 10h22   #3
Responsable Business Intelligence
 
Avatar de kalyparker
 
Femme
Consultant en Business Intelligence
Inscription : janvier 2007
Messages : 1 192
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : janvier 2007
Messages : 1 192
Points : 2 564
Points : 2 564
Bonjour,

Si j'ai bien suivi ce que tu veux faire,
créer un fichier de sortie dans sql.sql (genre sortie.log)
et ouvre simplement le fichier pour voir ce qu'il contient.
Je ne comprend pas trop pourquoi tu veux le mettre dans une variable ?!
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 10h32   #4
Membre éclairé
 
Avatar de macben
 
Inscription : mars 2004
Messages : 526
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : mars 2004
Messages : 526
Points : 379
Points : 379
Envoyer un message via AIM à macben Envoyer un message via MSN à macben
Ah désolé

En fait je veux que mon fichier *.sql renvoie un code retour de type NUMBER au shell qui l'appelé.
macben est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 10h35   #5
Responsable Business Intelligence
 
Avatar de kalyparker
 
Femme
Consultant en Business Intelligence
Inscription : janvier 2007
Messages : 1 192
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : janvier 2007
Messages : 1 192
Points : 2 564
Points : 2 564
en somme tu veux vérifier que ton traitement c'est bien passé ou pas.
Perso j'ai jamais réussi à faire ça, alors ce que je fait c'est créer un fichier dans lequel je met mes logs, puis en shell si le fichier est vide c'est que le traitement est Ok, sinon Ko
C'est tout ce que je peux te dire... Désolé...
voili, voilou
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 10h38   #6
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
Vous pouvez déclarer une variable SQL*Plus, la référencer en PL/SQL et l'utiliser dans l'instruction SQL*Plus EXIT. Voir cet exemple.
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 10h54   #7
Membre éclairé
 
Avatar de macben
 
Inscription : mars 2004
Messages : 526
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : mars 2004
Messages : 526
Points : 379
Points : 379
Envoyer un message via AIM à macben Envoyer un message via MSN à macben
Citation:
Envoyé par pifor
Vous pouvez déclarer une variable SQL*Plus, la référencer en PL/SQL et l'utiliser dans l'instruction SQL*Plus EXIT. Voir cet exemple.
Ok merci !

Je me retrouve donc avec mon SQL :

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
SET heading OFF
SET linesize 1000
SET feedback OFF
SET echo OFF
SET verify OFF
SET SERVEROUTPUT ON SIZE 1000000
variable ret_val number
 
WHENEVER sqlerror exit FAILURE ROLLBACK;
 
declare
  i number;
begin
	dbms_output.put_line('Mes messages de LOG');
	dbms_output.put_line('Mes messages de LOG');
	dbms_output.put_line('Mes messages de LOG');
	:ret_val := 9;
	NULL;
exception
  when others then
    NULL;
end;
/
SHOW error;
exit :ret_val;
Mon Shell :

Code :
1
2
3
4
5
6
#!/bin/ksh
#---------------------------------------------------------------------
echo "LANCEMENT !"
ret_val=`sqlplus -S apps/apps @./sql.sql`
echo "#"$ret_val"#"
echo "FIN !"
Mais la valeur de la variable ne s'affiche, pas, à l'écran j'ai :

Citation:
LANCEMENT !
#Mes messages de LOG Mes messages de LOG Mes messages de LOG No errors.#
FIN !
macben est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 11h01   #8
Responsable Business Intelligence
 
Avatar de kalyparker
 
Femme
Consultant en Business Intelligence
Inscription : janvier 2007
Messages : 1 192
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : janvier 2007
Messages : 1 192
Points : 2 564
Points : 2 564
Merci Pifor pour l'astuce encore une fois

Macben, je pense que le problème viens du fait que tu affecte à ta variable le résultat de sqlplus. Essaye ça :
Code :
1
2
3
4
5
6
#!/bin/ksh
#---------------------------------------------------------------------
echo "LANCEMENT !"
sqlplus -S apps/apps @./sql.sql
echo "#"$ret_val"#"
echo "FIN !"
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 11h05   #9
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
Essayez de récupérer le code retour avec $? et non avec ``:

Code :
1
2
3
4
5
6
7
#!/bin/ksh
#---------------------------------------------------------------------
echo "LANCEMENT !"
sqlplus -S / @tcr.sql
ret_val=$?
echo "#"$ret_val"#"
echo "FIN !"
Sur Solaris 8, ça donne:

Code :
1
2
3
4
5
6
7
LANCEMENT !
Mes messages de LOG
Mes messages de LOG
Mes messages de LOG
No errors.
#9#
FIN !
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 11h14   #10
Membre éclairé
 
Avatar de macben
 
Inscription : mars 2004
Messages : 526
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : mars 2004
Messages : 526
Points : 379
Points : 379
Envoyer un message via AIM à macben Envoyer un message via MSN à macben
Merci pifor ! Tu as toutes les bonnes réponses !!!

Je met mon code définitif il pourra servir pour d'autres.

Merci à vous 2 pour vos réponses !

Fichier SQL :

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
SET heading OFF
SET linesize 1000
SET feedback OFF
SET echo OFF
SET verify OFF
SET SERVEROUTPUT ON SIZE 1000000
variable ret_val number
 
WHENEVER sqlerror exit FAILURE ROLLBACK;
 
declare
  i number;
begin
	dbms_output.put_line('Mes messages de LOG');
	dbms_output.put_line('Mes messages de LOG');
	dbms_output.put_line('Mes messages de LOG');
	:ret_val := 9;
	NULL;
exception
  when others then
    NULL;
end;
/
SHOW error;
exit :ret_val;
Fichier Shell :

Code :
1
2
3
4
5
6
7
#!/bin/ksh
#---------------------------------------------------------------------
echo "LANCEMENT !"
sqlplus -S apps/apps @./sql.sql
ret_val=$?
echo "#"$ret_val"#"
echo "FIN !"
macben est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h45.


 
 
 
 
Partenaires

Hébergement Web