Bonjour,

J'ai besoin d'une aide pour un problème dont je n'arrive pas à trouver la solution sur le net.

J'ai un script perl qui exécute via une commande système (avec sqlplus) un script sql. Je teste le code retour de ma commande système qui doit être à 0 si tout est OK. Seulement, même si le script sql contient des erreurs, le code retour est toujours égal à 0 et cela m'embête pas mal.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
$CmdText="sqlplus $ENV{'PROFINT_DBUID'}/$ENV{'PROFINT_DBPWD'}\@$ENV{ORA_DFLT_HOSTSTR} \@$ENV{'PROFINT_SQLBTC'}/rssh_btc.sql $ENV{'PROFINT_SQLBTC'}";
 
print OUT "$CmdText\n";
 
	if ( system("$CmdText >> $trace") != 0 ) {
		print OUT "ERROR: Failed to execute $ENV{'PROFINT_SQLBTC'}/rssh_btc.sql.\n";
		&exit(1)
	}
Et voila mon script sql :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
SET SCAN OFF;
SET ECHO ON;
SET serveroutput ON;
WHENEVER SQLERROR EXIT 1;
WHENEVER OSERROR EXIT 2;
 
 
@/opt/PRO/Profint/SQL/BTC/venv_btc.sql
WHENEVER SQLERROR EXIT 1;
WHENEVER OSERROR EXIT 2;
dbms_snapshot.refresh('&BTCSCOTB','C');
 
exit;
On voit bien que j'aurai du mettre "exec dbms_snapshot.refresh('&BTCSCOTB','C');" dans la commande de rafraichissement de snapshot mais cette erreur est signalée et ne change pas le code retour.

Une idée???

Merci