In SQL Server können wir dies verwenden:
DECLARE @variable INT;
SELECT @variable= mycolumn from myTable;
Wie kann ich dasselbe in Oracle machen? Ich versuche gerade folgendes:
DECLARE COMPID VARCHAR2(20);
SELECT companyid INTO COMPID from app where appid='90' and rownum=1;
Warum ist das nicht Arbeit ?
DECLARE
the_variable NUMBER;
BEGIN
SELECT my_column INTO the_variable FROM my_table;
END;
Stellen Sie sicher, dass die Abfrage nur eine einzelne Zeile zurückgibt:
Standardmäßig darf eine SELECT INTO-Anweisung nur eine Zeile zurückgeben. Andernfalls löst PL/SQL die vordefinierte Ausnahme TOO_MANY_ROWS aus und die Werte der Variablen in der INTO-Klausel sind undefiniert. Stellen Sie sicher, dass Ihre WHERE-Klausel genau genug ist, um nur eine Zeile zu finden
Wenn keine Zeilen zurückgegeben werden, führt PL/SQL NO_DATA_FOUND aus. Sie können sich gegen diese Ausnahme schützen, indem Sie das Ergebnis einer Aggregatfunktion wie COUNT (*) oder AVG () auswählen, sofern dies sinnvoll ist. Diese Funktionen geben garantiert einen einzelnen Wert zurück, auch wenn keine Zeilen der Bedingung entsprechen.
Eine SELECT ... BULK COLLECT INTO-Anweisung kann mehrere Zeilen zurückgeben. Sie müssen Erfassungsvariablen einrichten, um die Ergebnisse zu speichern. Sie können assoziative Arrays oder geschachtelte Tabellen deklarieren, die nach Bedarf vergrößert werden, um die gesamte Ergebnismenge aufzunehmen.
Das implizite Cursor-SQL und seine Attribute% NOTFOUND,% FOUND,% ROWCOUNT und% ISOPEN enthalten Informationen zur Ausführung einer SELECT INTO-Anweisung.
Nicht ganz sicher, was Sie wollen, aber in PL/SQL würden Sie dies einfach tun
DECLARE
v_variable INTEGER;
BEGIN
SELECT mycolumn
INTO v_variable
FROM myTable;
END;
Ollie.
Ein zusätzlicher Punkt:
Wenn Sie von tsql
in plsql
konvertieren, müssen Sie sich um die no_data_found
-Ausnahme sorgen
DECLARE
v_var NUMBER;
BEGIN
SELECT clmn INTO v_var FROM tbl;
Exception when no_data_found then v_var := null; --what ever handle the exception.
END;
In tsql
wenn no data found
, wird die Variable null
sein, aber keine exception
ORA-01422: Exakter Abruf gibt mehr als die angeforderte Anzahl von Zeilen zurück
wenn Sie den genauen Datensatz nicht mit der where-Bedingung angeben, wird die obige Ausnahme angezeigt
DECLARE
ID NUMBER;
BEGIN
select eid into id from employee where salary=26500;
DBMS_OUTPUT.PUT_LINE(ID);
END;
Zum Speichern einer einzelnen Zeilenausgabe in einer Variablen von der Auswahl in die Abfrage:
deklariere v_username varchare (20); SELECT Benutzername in v_username FROM Benutzer WHERE user_id = '7';
dadurch wird der Wert eines einzelnen Datensatzes in der Variablen v_username gespeichert.
Zum Speichern mehrerer Zeilen in einer Variablen von der Auswahl in die Abfrage:
sie müssen die Listagg-Funktion verwenden. listagg verkettet die resultierenden Zeilen einer Spalte in einer einzelnen Spalte, und um sie zu unterscheiden, können Sie ein spezielles Symbol verwenden. Verwenden Sie die Abfrage wie folgt SELECT listagg (Benutzername || ',') innerhalb der Gruppe (Reihenfolge nach Benutzername) in v_Benutzername FROM Benutzer;