2009-05-22 8 views
2

Y at-il un moyen de détecter les paramètres manquants de la ligne de commande à partir du script oracleoracle ligne de commande de la question

par exemple mon test.sql script Oracle attend 3 paramètres à exécuter. mon script est exécuté à partir du programme d'installation comme ceci sqlplus/NOLOG @ test.sql userid pw tablespace Lorsque l'un des paramètres est manquant, le sqlplus demande le userinput. Cela ne peut pas être reconnu à partir du programme d'installation. J'ai besoin de trouver le paramètre manquant dans le script et de sortir avec le code d'erreur. Est-ce faisable?

Répondre

4

Je ne pense pas qu'il existe un moyen de le faire directement avec sqlplus. Vous pouvez envelopper l'exécution de sqlplus dans un script de commande/shell qui vérifie les paramètres, puis appelle sqlplus avec la liste de paramètres validée.

+0

En fait, nous modifions l'installation pour valider le nombre de paramètres d'entrée avant d'appeler le script. Cela semble être la meilleure option. – ipr

4

Envelopper l'appel à sqlplus dans un script shell semble être la meilleure façon de le faire, mais pourriez-vous aussi appeler le script en utilisant:

sqlplus /NOLOG @test.sql <userid> <pw> <tablespace> empty empty empty 

et vérifier à l'intérieur du script si l'une des valeurs sont égales à "vide"? De cette façon, le script ne sera pas suspendu même si aucun paramètre n'est passé, car vous aurez toujours les trois paramètres de remplissage.

Vous pouvez vérifier en utilisant quelque chose comme ceci: (en utilisant & & au lieu de & signifie que vous ne serez invité à la valeur une fois)

var status number; 
set verify on 
whenever sqlerror exit 1; 
begin 
    :status := 0; 
    select decode('&&1','empty',1,:status) into :status from dual; 
    select decode('&&2','empty',2,:status) into :status from dual; 
    select decode('&&3','empty',3,:status) into :status from dual; 
    IF :status != 0 THEN 
    RAISE_APPLICATION_ERROR (
    -20000+-1*:status,'parameter '|| :status || ' is missing'); 
    END IF; 
end; 
/

La valeur de retour lorsque les entrées ne sont pas valides seront 1. Sans sachant quelles sont les valeurs valables pour les paramètres, il est difficile de savoir lequel a été omis.

+0

Cela fonctionne bien jusqu'à ce que l'une des valeurs que vous devez passer soit "vide". Vous devez choisir une chaîne de non-sens pour être sûr, et c'est moche comme l'enfer. –

Questions connexes