Unten finden Sie ein Beispiel für die Verwendung von Variablen in SQL Server 2000.
DECLARE @EmpIDVar INT
SET @EmpIDVar = 1234
SELECT *
FROM Employees
WHERE EmployeeID = @EmpIDVar
Ich möchte genau dasselbe in Oracle mit SQL Developer ohne zusätzliche Komplexität tun. Es scheint eine sehr einfache Sache zu sein, aber ich kann keine einfache Lösung finden. Wie kann ich es tun?
Antworten:
Ich verwende den SQL-Developer in Version 3.2. Das andere Zeug hat bei mir nicht funktioniert, aber das hat funktioniert:
Es ist auch der bisher schickste Weg, der hier vorgestellt wird.
(Wenn Sie den "define" -Teil weglassen, werden Sie zur Eingabe dieses Werts aufgefordert.)
quelle
In SQL-plus gibt es zwei Arten von Variablen: Ersetzen und Binden.
Dies ist eine Substitution (Substitutionsvariablen können SQL * Plus-Befehlsoptionen oder anderen fest codierten Text ersetzen):
Das ist bind (Bindungsvariablen speichern Datenwerte für SQL- und PL / SQL-Anweisungen, die im RDBMS ausgeführt werden; sie können einzelne Werte oder vollständige Ergebnismengen enthalten):
SQL Developer unterstützt Substitutionsvariablen. Wenn Sie jedoch eine Abfrage mit Bindungssyntax ausführen, werden
:var
Sie zur Eingabe der Bindung aufgefordert (in einem Dialogfeld).Referenz:
UPDATE- Substitutionsvariablen sind etwas schwierig zu verwenden.
quelle
var x
undexec :x
ohne Aufforderung.In SQL * Plus können Sie etwas sehr Ähnliches tun
Wenn Sie in SQL Developer eine Anweisung ausführen, die eine beliebige Anzahl von Bindevariablen enthält (denen ein Doppelpunkt vorangestellt ist), werden Sie aufgefordert, Werte einzugeben. Wie Alex betont, können Sie mit der Funktion "Skript ausführen" (F5) mit der alternativen EXEC-Syntax, die Alex vorschlägt, auch etwas Ähnliches tun.
quelle
select...into
(ORA-01006) nicht zu mögen , also müssten Sie esexec :v_emp_id := 1234;
stattdessen tun .Ok, ich weiß, dass dies ein bisschen hackt, aber dies ist eine Möglichkeit, eine Variable in einer einfachen Abfrage zu verwenden, nicht in einem Skript:
Sie können es überall ausführen.
quelle
Einfache Antwort NEIN.
Sie können jedoch etwas Ähnliches erreichen, indem Sie die folgende Version mit Bindevariablen ausführen:
Sobald Sie die obige Abfrage in SQL Developer ausführen, werden Sie aufgefordert, einen Wert für die Bindungsvariable EmployeeID einzugeben.
quelle
Sie können sich an anderer Stelle über Substitutionsvariablen informieren. Sie sind in SQL Developer sehr praktisch. Aber ich habe Probleme beim Versuch, Bindungsvariablen in SQL Developer zu verwenden. Das ist was ich mache:
SET SERVEROUTPUT ON
macht es so, dass Text auf der Skriptausgabekonsole gedruckt werden kann.Ich glaube, was wir hier machen, heißt offiziell PL / SQL. Wir haben das reine SQL-Land verlassen und verwenden in Oracle eine andere Engine. Siehst du das
SELECT
oben? In PL / SQL müssen Sie immerSELECT ... INTO
entweder eine Variable oder einen Refcursor verwenden. Sie könnenSELECT
eine Ergebnismenge in PL / SQL nicht einfach zurückgeben.quelle
Ich denke, dass der einfachste Weg in Ihrem Fall ist:
Für die Zeichenfolgenwerte sieht es so aus:
quelle
Verwenden Sie die nächste Abfrage:
quelle
Versuchen Sie dies, es wird funktionieren, es ist besser, eine Prozedur zu erstellen. Wenn eine Prozedur nicht möglich ist, können Sie dieses Skript verwenden.
quelle
In SQL Developer definieren Sie Eigenschaften standardmäßig "ON". Wenn es auf jeden Fall "AUS" ist, führen Sie die folgenden Schritte aus.
set define on; define batchNo='123'; update TABLE_NAME SET IND1 = 'Y', IND2 = 'Y' WHERE BATCH_NO = '&batchNo';
quelle