SQLPlus bedingte Ausführung mit Variablen aus der Abfrage
Habe ich eine batch-Datei, die viele Schritte Sie ausgeführt werden eins nach dem anderen.
Jedoch in der Lage sein, es flexibler zu machen, möchte ich eine Bedingung einschließen, check-in SQLPlus
.
Etwas wie, um die bedingten Variablen' Wert aus einer Abfrage zuerst und lagern Sie in sagen v_variable
. Verwenden Sie es dann für einige Prüfungen wie
IF v_variable = 'Y' THEN
--DO SOME DDL
ELSE
--DO OTHER DDL
END IF
Muss ich wiederholen Sie diesen block an vielen Orten in der batch-Datei und ich kann es nicht durch ein PL/SQL-irgendwie.
Ich versuche, mit diesem COLUMN
Befehl in SQLPlus
aber irgendwie nicht immer den Wert der Variablen zu erhalten gespeichert.
COLUMN VARIABLE1 NEW_VALUE V_VARIABLE1
SELECT PARAM_VAL AS VARIABLE1 FROM TABLE_T WHERE PARAM_TYPE = 'XYZ';
-- This query will only throw one record.
DEFINE V_VARIABLE1
Ist das absolut falsch? Was tun wir, um zu sehen, ob die V_VARIABLE1
wird immer der Wert aus der Abfrage?
Und auch nachdem ich es richtig, ich bin ahnungslos auf der IF-ELSE
Teil. Kann jemand hier helfen? Ich bin interessiert in der Lösung, die funktioniert für SQLPlus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
sql*plus nicht unterstützt flow control nativ, also alles, was Sie tun können, hier würde irgendwo zwischen "workaround" und "hack". Einige der möglichen Optionen sind:
Verwenden PL/SQL-block und ausführen der DDL-als dynamische SQL über
execute
oderimmediate
dbms_utility.execute_ddl_statement
. Vollen Zugriff aufPL/SQL-features, so dass die meisten flexibel in Bezug auf flow-control-und
statement Gebäude, jedoch schwieriger zu verwalten, wenn Sie die Bereitstellung
etwas großes.
Schreiben Sie eine Skript-Datei per if/else-Zweig, seinen Namen mit etwas
wie Spalte/Abfrage trick, den Sie in Ihrem post, es mit
so etwas wie
@&scriptname
.Ersatzvariablen verwenden, die, wenn Sie ordnungsgemäß verwendet, wird Kommentar
einige Teile des Skripts. Sie können Tanel Poder ist snapper
utility Skript als Beispiel; Hinweis
&_IF_
substitutionVariablen gibt.
Können Sie einbetten Kind-script in parent-Skript die pl/sql-block. Wie
diese:
--
Ich habe keine Erfahrung mit SQLPlus. Ich gehe davon aus, dass Sie die Umleitung der Ausgabe des select-Befehls in eine temp-Datei. Vorausgesetzt, dass Sie nur ausgewählte Spalte in 1-Datensatz können Sie dann etwas wie das hier tun:
"tokens=*" ist optional. Es wird entfernen von führenden Leerzeichen und speichern Sie den rest der Zeichenfolge, einschließlich Leerzeichen. Nicht relevant, abhängig von Ihren Daten.
Müssen Sie möglicherweise nicht die 'FINDSTR /V "(" und das nachgestellte " entweder. Ich gehe davon aus, dass die Ausgabe von SQLPlus, wird ähnlich zu SQL, und dies würde ausschließen, die Anzahl der Zeilen, die verarbeitet wurden, dass wird gemeldet von SQL. Alles ist möglich. Wenn Sie nicht machen diese Arbeit, posten Sie den Inhalt der temp-Datei und wir machen die notwendigen änderungen.