Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie beende ich ein Skript in SQLPlus, wenn ein Fehler auftritt, und kehre zur SQLPlus-Eingabeaufforderung zurück, ohne die Verbindung zu trennen oder SQLPlus zu beenden?

Ich habe hier eine interessante Idee gefunden, die mir in Kombination mit der Antwort von spencer7593 einen selektiven Subskriptaufruf bringt, an den ich die PL/SQL-Ausgabewerte übergeben kann. Nämlich:

VAR continue number;
EXEC :continue := 1;
BEGIN
   SELECT some_bool_test() INTO :continue FROM dual;
END;

SET termout OFF
COLUMN script_name NEW_VALUE v_script_name
SELECT decode(:continue, 1, 'run_stuff.sql', 'skip.sql') script_name FROM dual;
SET termout ON

@&v_script_name :some_other_values

Wobei skip.sql ist eine leere Textdatei.
 

AKTUALISIERUNG: Ich habe das meiste davon in eine RUN.SQL verschoben Datei, wo ich den booleschen Wert (0 oder 1) als &1 übergebe , der Skriptname, der bei Erfolg als &2 aufgerufen werden soll , und dann alle anderen erwarteten Parameter, die an das aufgerufene Skript übergeben werden sollen. Somit sieht es am Ende etwa so aus:

VAR continue number;
EXEC :continue := 1;
BEGIN
   SELECT some_bool_test() INTO :continue FROM dual;
END;

@run.sql :continue 'run_stuff.sql' :some_other_values