2009-05-22 28 views
2

Gibt es eine Möglichkeit fehlende Kommandozeilenparameter von dem Oracle-Skript meines Orakel Skriptoracle sqlplus Befehlszeile Frage

zum Beispiel zu erkennen test.sql erwartet 3 Parameter zu laufen. Mein Skript wird von dem Installationsprogramm wie folgt ausgeführt sqlplus/NOLOG @ test.sql Benutzer-ID pw Tablespace Wenn einer der Parameter fehlt, die sqlplus-Eingabeaufforderung für die Benutzereingabe. Dies kann vom Installationsprogramm nicht erkannt werden. Ich muss den fehlenden Parameter im Skript finden und mit dem Fehlercode beenden. Ist es machbar?

Antwort

4

Ich glaube nicht, dass es eine Möglichkeit gibt, dies direkt mit sqlplus zu tun. Sie können die Ausführung von sqlplus in ein Befehls-/Shell-Skript einschließen, das die Parameter überprüft und anschließend sqlplus mit der Liste der überprüften Parameter aufruft.

+0

Eigentlich modifizieren wir die Installation, um die Anzahl der Eingabeparameter vor dem Aufruf des Skripts zu validieren. Das scheint die beste Option zu sein. – ipr

4

den Anrufs Einwickeln in einem Shell-Skript SQLPlus scheint, wie der einfachste Weg, dies zu tun, aber können Sie auch die Skript aufrufen mit: im Skript

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

und prüfen, ob alle Werte gleich sind "leer"? Auf diese Weise bleibt das Skript nicht hängen, auch wenn keine Parameter übergeben werden, da Sie immer noch die drei Füllparameter haben.

Sie könnten überprüfen, so etwas wie dies mit: (mit & & statt & heißt, dass Sie nur für den Wert einmal gefragt)

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; 
/

Der Rückgabewert, wenn die Eingänge sind ungültig wird 1. Ohne Wenn man weiß, welche gültigen Werte für die Parameter gelten, ist es schwer zu wissen, welcher davon weggelassen wurde.

+0

Dies funktioniert gut, bis einer der Werte, die Sie übergeben müssen, "leer" ist. Sie müssen eine Nonsense-Saite wählen, um sicher zu sein, und es ist hässlich. –