Info zu Data Manipulation Language- (DML-)Anweisungen

Data Manipulation Language-(DML-)Anweisungen greifen auf Daten in vorhandenen Tabellen zu und ändern sie.

In der SQL*Plus-Umgebung können Sie eine DML-Anweisung nach der Eingabeaufforderung SQL> eingeben.

In der SQL Developer-Umgebung können Sie eine DML-Anweisung in das Arbeitsblatt eingeben. Alternativ können Sie für den Zugriff auf die Daten und die zugehörigen Tools den SQL Developer-Verbindungsframe und die zugehörigen Tools verwenden.

Um die Auswirkung einer DML-Anweisung in SQL Developer zu sehen, müssen Sie möglicherweise den Schemaobjekttyp des geänderten Objekts im Schritt "Verbindungen" auswählen und dann auf das Symbol "Aktualisieren" klicken.

Die Auswirkung einer DML-Anweisung ist erst dauerhaft, wenn die Transaktion, die die DML-Anweisung enthält, festgeschrieben wurde. Eine Transaktion ist eine Folge von SQL-Anweisungen, die Oracle Database als Einheit behandelt (es kann sich um eine einzelne DML-Anweisung handeln). Bis zum Festschreiben einer Transaktion kann diese zurückgerollt (rückgängig gemacht) werden. Weitere Informationen zu Transaktionen finden Sie unter "Info zu Transaktionssteuerungs-Anweisungen".

Siehe auch: Oracle Database SQL Language Reference für weitere Informationen zu DML-Anweisungen

Anweisung INSERT

Mit der INSERT-Anweisung werden Zeilen in einer vorhandenen Tabelle eingefügt.

Die einfachste empfohlene Form der INSERT-Anweisung weist folgende Syntax auf:

INSERT INTO table_name (list_of_columns)
VALUES (list_of_values);

Jede Spalte in list_of_columns muss über einen gültigen Wert an der entsprechenden Position in list_of_values verfügen. Bevor Sie eine Zeile in einer Tabelle einfügen können, müssen Sie daher die Spalten der Tabelle und ihre gültigen Werte kennen. Informationen über das Abrufen dieser Informationen mithilfe von SQL Developer finden Sie unter Tutorial: Eigenschaften und Daten der Tabelle EMPLOYEES mit SQL Developer anzeigen. Wenn Sie diese Informationen mithilfe von SQL*Plus abrufen möchten, verwenden Sie die Anweisung DESCRIBE. Beispiel:

DESCRIBE EMPLOYEES;

Ergebnis:

Name                                      Null?    Type
----------------------------------------- -------- ------------

EMPLOYEE_ID                               NOT NULL NUMBER(6)
FIRST_NAME                                         VARCHAR2(20)
LAST_NAME                                 NOT NULL VARCHAR2(25)
EMAIL                                     NOT NULL VARCHAR2(25)
PHONE_NUMBER                                       VARCHAR2(20)
HIRE_DATE                                 NOT NULL DATE
JOB_ID                                    NOT NULL VARCHAR2(10)
SALARY                                             NUMBER(8,2)
COMMISSION_PCT                                     NUMBER(2,2)
MANAGER_ID                                         NUMBER(6)
DEPARTMENT_ID                                      NUMBER(4)

Mit der INSERT-Anweisung in Beispiel 3-1 wird in der EMPLOYEES-Tabelle eine Zeile für einen Mitarbeiter eingefügt, für die alle Spaltenwerte bekannt sind.

Sie dürfen nicht alle Spaltenwerte kennen, um eine Zeile in eine Tabelle einzufügen, aber Sie haben die Werte aller NOT NULL-Spalten. Wenn Ihnen der Wert einer Spalte, die NULL sein kann, nicht bekannt sind, können Sie diese Spalte in list_of_columns weglassen. Der Wert wird dann standardmäßig auf NULL festgelegt.

Mit der INSERT-Anweisung in Beispiel 3-2 wird in der EMPLOYEES-Tabelle eine Zeile für einen Mitarbeiter eingefügt, für die alle Spaltenwerte außer SALARY bekannt sind. Vorübergehend darf für SALARY der Wert NULL sein. Sobald der Wert bekannt sind, kann er mit der UPDATE-Anweisung geändert werden (siehe Beispiel 3-4).

Mit der INSERT-Anweisung in Beispiel 3-3 wird in der EMPLOYEES-Tabelle eine Zeile für einen Mitarbeiter eingefügt, für den LAST_NAME nicht bekannt ist.

Beispiel 3-1: INSERT-Anweisung verwenden, wenn alle Informationen verfügbar sind

INSERT INTO EMPLOYEES (
  EMPLOYEE_ID,
  FIRST_NAME,
  LAST_NAME,
  EMAIL,
  PHONE_NUMBER,
  HIRE_DATE,
  JOB_ID,
  SALARY,
  COMMISSION_PCT,
  MANAGER_ID,
  DEPARTMENT_ID
)
VALUES (
  10,              -- EMPLOYEE_ID
  'George',        -- FIRST_NAME
  'Gordon',        -- LAST_NAME
  'GGORDON',       -- EMAIL
  '650.506.2222',  -- PHONE_NUMBER
  '01-JAN-07',     -- HIRE_DATE
  'SA_REP',        -- JOB_ID
  9000,            -- SALARY
  .1,              -- COMMISSION_PCT
  148,             -- MANAGER_ID
  80               -- DEPARTMENT_ID
);

Ergebnis:

1 row created.

Beispiel 3-2: INSERT-Anweisung verwenden, wenn nicht alle Informationen verfügbar sind

INSERT INTO EMPLOYEES (
  EMPLOYEE_ID,
  FIRST_NAME,
  LAST_NAME,
  EMAIL,
  PHONE_NUMBER,
  HIRE_DATE,
  JOB_ID,          -- Omit SALARY; its value defaults to NULL.
  COMMISSION_PCT,
  MANAGER_ID,
  DEPARTMENT_ID
)
VALUES (
  20,              -- EMPLOYEE_ID
  'John',          -- FIRST_NAME
  'Keats',         -- LAST_NAME
  'JKEATS',        -- EMAIL
  '650.506.3333',  -- PHONE_NUMBER
  '01-JAN-07',     -- HIRE_DATE
  'SA_REP',        -- JOB_ID
  .1,              -- COMMISSION_PCT
  148,             -- MANAGER_ID
  80               -- DEPARTMENT_ID
);

Ergebnis:

1 row created.

Beispiel 3-3: Falsche Verwendung der INSERT-Anweisung

INSERT INTO EMPLOYEES (
  EMPLOYEE_ID,
  FIRST_NAME,      -- Omit LAST_NAME (error)
  EMAIL,
  PHONE_NUMBER,
  HIRE_DATE,
  JOB_ID,
  COMMISSION_PCT,
  MANAGER_ID,
  DEPARTMENT_ID
)
VALUES (
  20,              -- EMPLOYEE_ID
  'John',          -- FIRST_NAME
  'JOHN',          -- EMAIL
  '650.506.3333',  -- PHONE_NUMBER
  '01-JAN-07',     -- HIRE_DATE
  'SA_REP',        -- JOB_ID
  .1,              -- COMMISSION_PCT
  148,             -- MANAGER_ID
  80               -- DEPARTMENT_ID
);

Ergebnis:

ORA-01400: cannot insert NULL into ("HR"."EMPLOYEES"."LAST_NAME")

Siehe:

Info zur UPDATE-Anweisung

Mit der UPDATE-Anweisung wird eine Gruppe von bereits vorhandenen Tabellenzeilen aktualisiert (d.h. sie ändert ihre Werte).

Eine einfache Form der UPDATE-Anweisung hat folgende Syntax:

UPDATE table_name
SET column_name = value [, column_name = value]...
[ WHERE condition ];

Jeder Wert muss für seinen column_name gültig sein. Bei Verwendung der WHERE-Klausel werden die Spaltenwerte durch diese Anweisung nur in jenen Zeilen aktualisiert, welche die Bedingung erfüllen.

Die UPDATE-Anweisung in Beispiel 3-4 aktualisiert den Wert der Spalte SALARY in der Zeile, die in Beispiel 3-2 in die Tabelle EMPLOYEES eingefügt wurde, bevor das Gehalt des Angestellten bekannt war.

Mit der UPDATE-Anweisung in Beispiel 3-5 wird der Prozentsatz für Provisionen für alle Mitarbeiter in Abteilung 80 aktualisiert.

Beispiel 3-4: Mittels der UPDATE-Anweisung Daten hinzufügen

UPDATE EMPLOYEES
SET SALARY = 8500
WHERE LAST_NAME = 'Keats';

Ergebnis:

1 row updated.

Beispiel 3-5: Mittels der UPDATE-Anweisung mehrere Zeilen aktualisieren

UPDATE EMPLOYEES
SET COMMISSION_PCT = COMMISSION_PCT + 0.05
WHERE DEPARTMENT_ID = 80;

Ergebnis:

34 rows updated.

Siehe:

Info zur DELETE-Anweisung

Mit der Anweisung DELETE werden Zeilen aus einer Tabelle entfernt.

Eine einfache Form der DELETE-Anweisung hat folgende Syntax:

DELETE FROM table_name [ WHERE condition ];

Wenn Sie die WHERE-Klausel einbindet, löscht die Anweisung nur Zeilen, die Bedingung erfüllen. Wenn Sie die WHERE-Klausel nicht einbunden, werden alle Zeilen aus der Tabelle gelöscht, die leere Tabelle bleibt jedoch erhalten. Verwenden Sie die Anweisung DROP TABLE, um eine Tabelle zu löschen.

Die DELETE-Anweisung in Beispiel 3-6 löscht die Zeilen, die in Beispiel 3-1 und Beispiel 3-2 eingefügt wurden.

Beispiel 3-6: Anweisung DELETE

DELETE FROM EMPLOYEES
WHERE HIRE_DATE = TO_DATE('01-JAN-07', 'dd-mon-yy');

Ergebnis:

2 rows deleted.

Siehe: