Oracle PL/SQL Einfügen, Aktualisieren, Löschen und Auswählen in [Beispiel]
⚡ Intelligente Zusammenfassung
SQL-Anweisungen innerhalb Oracle PL/SQL übernimmt alle Datenmanipulationsaufgaben und ermöglicht es einem Block, Zeilen direkt einzufügen, zu aktualisieren, zu löschen und auszuwählen. Die Befehle INSERT, UPDATE, DELETE und SELECT INTO verschieben und rufen Daten innerhalb der Datenbank ab.

DML-Transaktionen in PL/SQL
DML steht für Data Manipulation Language, die Gruppe von SQL Befehle, die die in einer Tabelle gespeicherten Daten ändern. Innerhalb eines PL/SQL-BlockDiese Befehle führen die Manipulationsarbeiten aus, während PL/SQL die umgebende Logik bereitstellt. DML befasst sich mit den folgenden Operationen.
- Dateneinfügung
- Datenaktualisierung
- Daten löschen
- Datenauswahl
In PL/SQL erfolgt die Datenmanipulation ausschließlich über SQL-Befehle.
Dateneinfügung
In PL/SQL werden Zeilen mit dem SQL-Befehl INSERT INTO zu einer Tabelle hinzugefügt. Dieser Befehl benötigt den Tabellennamen, die Zielspalten und die Spaltenwerte als Eingabe und fügt die Werte anschließend in die Basistabelle ein.
Der INSERT-Befehl kann die Werte auch direkt aus einer anderen Tabelle mithilfe einer SELECT-Anweisung übernehmen, anstatt die Werte für jede Spalte einzeln anzugeben. Mit einer SELECT-Anweisung lassen sich so viele Zeilen einfügen, wie die Quelltabelle enthält.
Syntax:
BEGIN INSERT INTO <table_name>(<column1>,<column2>,...,<column_n>) VALUES(<value1>,<value2>,...,<value_n>); END;
Die obige Syntax zeigt den Befehl INSERT INTO. Tabellenname und Werte sind Pflichtfelder, Spaltennamen hingegen optional, wenn die INSERT-Anweisung Werte für jede Spalte der Tabelle angibt. Das Schlüsselwort VALUES ist obligatorisch, wenn die Werte separat angegeben werden, wie oben gezeigt.
Syntax:
BEGIN INSERT INTO <table_name>(<column1>,<column2>,...,<column_n>) SELECT <column1>,<column2>,...,<column_n> FROM <table_name2>; END;
Diese zweite Form von INSERT INTO übernimmt die Werte direkt aus Verwendung des SELECT-Befehls. Das Schlüsselwort VALUES darf hier nicht vorkommen, da die Werte nicht separat angegeben werden.
Datenaktualisierung
Eine Datenaktualisierung bedeutet, den Wert einer Spalte in einer bestehenden Zeile zu ändern. Dies geschieht mit der UPDATE-Anweisung, die den Tabellennamen, den Spaltennamen und den neuen Wert als Eingabe benötigt und die Daten aktualisiert.
Syntax:
BEGIN UPDATE <table_name> SET <column1>=<value1>,<column2>=<value2>,<column_n>=<value_n> WHERE <condition that uniquely identifies the record that needs to be updated>; END;
Die obige Syntax zeigt die UPDATE-Anweisung. Das Schlüsselwort SET weist die PL/SQL-Engine an, die Spalte mit dem angegebenen Wert zu aktualisieren. Die WHERE-Klausel ist optional; wird sie nicht angegeben, wird der Wert der genannten Spalte in der gesamten Tabelle aktualisiert.
Daten löschen
Datenlöschung bedeutet das Entfernen eines vollständigen Datensatzes aus der Datenbanktabelle. Hierfür wird der Befehl DELETE verwendet.
Syntax:
BEGIN DELETE FROM <table_name> WHERE <condition that uniquely identifies the record that needs to be deleted>; END;
Die obige Syntax zeigt den DELETE-Befehl. Das Schlüsselwort FROM ist optional; der Befehl verhält sich mit und ohne FROM-Klausel gleich. Die WHERE-Klausel ist ebenfalls optional; wird sie nicht angegeben, wird die gesamte Tabelle geleert.
Datenauswahl
Datenprojektion, auch Datenabruf genannt, bedeutet, die benötigten Daten aus der Datenbanktabelle abzurufen. Dies geschieht mit dem SELECT-Befehl und der INTO-Klausel. Der SELECT-Befehl ruft die Werte aus der Datenbank ab, und die INTO-Klausel weist diese Werte den lokalen Variablen des PL/SQL-Blocks zu.
Bei der Verwendung einer SELECT-Anweisung mit INTO sind folgende Punkte zu beachten:
- Eine SELECT-Anweisung sollte bei Verwendung der INTO-Klausel nur einen Datensatz zurückgeben, da eine Variable nur einen Wert speichern kann. Gibt die SELECT-Anweisung mehr als eine Zeile zurück, … Ausnahme TOO_MANY_ROWS angehoben wird.
- Die SELECT-Anweisung weist der Variablen in der INTO-Klausel einen Wert zu und benötigt daher mindestens einen Datensatz. Wird kein Datensatz gefunden, wird die Ausnahme NO_DATA_FOUND ausgelöst.
- Die Anzahl der Spalten und ihre Datentypen in der SELECT-Klausel sollten mit der Anzahl der Variablen und ihren Datentypen in der INTO-Klausel übereinstimmen.
- Die Werte werden in der gleichen Reihenfolge abgerufen und aufgefüllt, wie in der Anweisung angegeben.
- Die WHERE-Klausel ist optional und ermöglicht es Ihnen, weitere Einschränkungen für die abzurufenden Datensätze festzulegen.
- Eine SELECT-Anweisung kann in der WHERE-Bedingung anderer DML-Anweisungen verwendet werden, um die Werte der Bedingungen zu definieren.
- Eine SELECT-Anweisung, die innerhalb von INSERT-, UPDATE- oder DELETE-Anweisungen verwendet wird, sollte keine INTO-Klausel enthalten, da in diesen Fällen keine Variable belegt wird.
Syntax:
BEGIN SELECT <column1>,...,<column_n> INTO <variable1>,...,<variable_n> FROM <table_name> WHERE <condition to fetch the required records>; END;
Die obige Syntax zeigt den SELECT-INTO-Befehl. Das Schlüsselwort FROM ist obligatorisch und gibt die Tabelle an, aus der die Daten abgerufen werden sollen. Die WHERE-Klausel ist optional; wird sie nicht angegeben, werden Daten aus der gesamten Tabelle abgerufen.
Beispiel 1: In diesem Beispiel sehen wir, wie man DML-Operationen in PL/SQL durchführt. Wir fügen die vier unten stehenden Datensätze in die Tabelle „emp“ ein.
| EMP_NAME | EMP_NO | GEHALT | MANAGER |
|---|---|---|---|
| BBB | 1000 | 25000 | AAA |
| XXX | 1001 | 10000 | BBB |
| Yyy | 1002 | 10000 | BBB |
| ZZZ | 1003 | 7500 | BBB |
Dann aktualisieren wir das Gehalt von 'XXX' auf 15000, löschen den Mitarbeiterdatensatz 'ZZZ' und projizieren schließlich die Details des Mitarbeiters 'XXX'.
Der untenstehende Screenshot zeigt den vollständigen PL/SQL-Block, der für dieses Beispiel verwendet wurde.
DECLARE l_emp_name VARCHAR2(250); l_emp_no NUMBER; l_salary NUMBER; l_manager VARCHAR2(250); BEGIN INSERT INTO emp(emp_name,emp_no,salary,manager) VALUES('BBB',1000,25000,'AAA'); INSERT INTO emp(emp_name,emp_no,salary,manager) VALUES('XXX',1001,10000,'BBB'); INSERT INTO emp(emp_name,emp_no,salary,manager) VALUES('YYY',1002,10000,'BBB'); INSERT INTO emp(emp_name,emp_no,salary,manager) VALUES('ZZZ',1003,7500,'BBB'); COMMIT; Dbms_output.put_line('Values Inserted'); UPDATE EMP SET salary=15000 WHERE emp_name='XXX'; COMMIT; Dbms_output.put_line('Values Updated'); DELETE emp WHERE emp_name='ZZZ'; COMMIT; Dbms_output.put_line('Values Deleted'); SELECT emp_name,emp_no,salary,manager INTO l_emp_name,l_emp_no,l_salary,l_manager FROM emp WHERE emp_name='XXX'; Dbms_output.put_line('Employee Detail'); Dbms_output.put_line('Employee Name:'||l_emp_name); Dbms_output.put_line('Employee Number:'||l_emp_no); Dbms_output.put_line('Employee Salary:'||l_salary); Dbms_output.put_line('Employee Manager Name:'||l_manager); END; /
Ausgang:
Values Inserted Values Updated Values Deleted Employee Detail Employee Name:XXX Employee Number:1001 Employee Salary:15000 Employee Manager Name:BBB
Code Erläuterung:
- Code Zeile 2-5: Deklaration der Variablen.
- Code Zeile 7-14: Die Datensätze werden in die Mitarbeitertabelle eingefügt.
- Code Zeile 15: Die Einfügetransaktionen werden ausgeführt.
- Code Zeile 17-19: Aktualisierung des Gehalts des Mitarbeiters 'XXX' auf 15000.
- Code Zeile 20: Die Aktualisierungstransaktion wird ausgeführt.
- Code Zeile 22: Der Datensatz 'ZZZ' wird gelöscht.
- Code Zeile 23: Die Löschtransaktion wird ausgeführt.
- Code Zeile 25: Der Datensatz 'XXX' wird ausgewählt und die Variablen l_emp_name, l_emp_no, l_salary und l_manager werden befüllt.
- Code Zeile 26-30: Die abgerufenen Datensatzwerte werden angezeigt.

