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-Befehle: INSERT, UPDATE, DELETE und SELECT INTO führen alle Datenmanipulationsaufgaben innerhalb eines PL/SQL-Blocks aus.
  • Dateneinfügung: INSERT INTO fügt Zeilen aus expliziten VALUES oder direkt aus einer anderen Tabelle mittels SELECT hinzu.
  • 🔄 Datenaktualisierung: Mit UPDATE und SET werden Spaltenwerte geändert, während eine optionale WHERE-Klausel die Anzahl der betroffenen Zeilen begrenzt.
  • 🗑️ Datenlöschung: DELETE entfernt übereinstimmende Datensätze, und das Weglassen der WHERE-Klausel löscht die gesamte Tabelle.
  • 🎯 Auswählen in: SELECT INTO muss genau eine Zeile zurückgeben, oder Oracle löst NO_DATA_FOUND oder TOO_MANY_ROWS aus.
  • 🤖 KI-Unterstützung: KI-Assistenten wie GitHub Copilot entwerfen DML-Blöcke und weisen auf fehlende WHERE- oder COMMIT-Anweisungen hin.

Oracle PL/SQL Insert Update Delete Select Into

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.

Oracle PL/SQL-Block, der INSERT-, UPDATE-, DELETE- und SELECT-Anweisungen für die Tabelle „emp“ ausführt.

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.

Häufig gestellte Fragen

Nein. Statisches PL/SQL kann DDL nicht direkt ausführen. Erstellen Sie die Anweisung als Zeichenkette und führen Sie sie mit [hier fehlende Information] aus. SOFORT AUSFÜHREN, das CREATE-, ALTER- und DROP-Operationen zur Laufzeit verarbeitet.

Eine SELECT INTO-Anweisung muss genau eine Zeile zurückgeben. Um mehrere Zeilen zu lesen, verwenden Sie eine explizite Abfrage. Cursor mit einer FETCH-Schleife oder BULK COLLECT INTO einer Sammlung.

DELETE ist eine DML-Anweisung: Sie löscht ausgewählte Zeilen mithilfe einer WHERE-Klausel und kann rückgängig gemacht werden. TRUNCATE ist eine DDL-Anweisung: Sie löscht sofort alle Zeilen, führt ein automatisches Commit durch und kann nicht rückgängig gemacht werden.

Ja. Änderungen durch Einfügen, Aktualisieren und Löschen bleiben in Ihrer Sitzung erhalten, bis Sie sie löschen. VERPFLICHTENPL/SQL führt keine automatische Commit-Operation durch. Verwenden Sie COMMIT zum Speichern oder ROLLBACK zum Verwerfen.

MERGE führt ein Upsert durch – es aktualisiert Zeilen, die einer Join-Bedingung entsprechen, und fügt diejenigen ein, die dies nicht tun – in einer einzigen Anweisung anstatt in separaten UPDATE- und INSERT-Durchläufen.

RETURNING INTO erfasst Spaltenwerte aus den Zeilen, die von einem INSERT-, UPDATE- oder DELETE-Befehl betroffen sind, und speichert sie in Variablen, wodurch ein zusätzliches SELECT zum Lesen der geänderten Daten vermieden wird.

Ja. GitHub-Copilot Erstellt INSERT-, UPDATE-, DELETE- und SELECT INTO-Blöcke anhand eines kurzen Kommentars, schlägt Bindungsvariablen vor und vervollständigt Spaltenlisten. Sie sollten jedoch vorher die Logik überprüfen.

KI-Assistenten scannen DML-Code nach fehlenden WHERE-Klauseln, fehlenden COMMIT-Anweisungen und unsicheren Verkettungen, schlagen Korrekturen vor und erklären Fehler. Diese maschinelle Lernprüfung erkennt riskante Änderungen, bevor sie in der Produktion eingesetzt werden.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: