2010-02-12 22 views
2

J'ai une procédure stockée qui a un paramètre OUT, indiquant un code d'erreur. Si le code d'erreur est de 0, alors je lève une erreurSQL * Plus: Forcez-le à retourner un code d'erreur

DECLARE 
BEGIN 
foo (err_code); 

IF (err_code <> 0) THEN 
    raise_application_error(...); 

END; 

Jusqu'à présent, si bon, mais voici ma question.

Ce morceau de code (illustré ci-dessus) est exécuté par sqlplus, qui est appelé à partir d'un script shell, qui doit sortir avec 0/non 0 (comme le script sql).

#shell script 

sqlplus ... @myscript 
return $? 

Lorsque le RAISE_APPLICATION_ERROR exécute, le contrôle revient à sqlplus.

sql> 

Ce que je veux, est une façon de sortir de retour à la coque, sans sqlplus retourner un 0 sur $?

Des pensées? Merci d'avance.

Répondre

7
+0

Merci, exactement ce dont j'avais besoin. – Tom

+0

Nous faisons 'à chaque fois que sqlerror quitte sql.sqlcode', qui transmet un peu plus d'informations à l'appelant du script. Nous faisons également 'chaque fois que oserror exit 1' dans le cas où SQLPlus se déclenche sur une sorte d'erreur au niveau du système d'exploitation. –

0

Si vous souciez quelle erreur votre demande PL/SQL élevé, vous pouvez déclarer le code de retour comme * Plus la variable SQL, et retour ont la procédure PL/SQL régler.

#shell script 

sqlplus /nolog << EOF 
connect uid/pw 
variable retval number; 
BEGIN 
    foo (:retval); 
END; 
/

exit retval; 
EOF 

return $?