Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Datensatzbasiertes Einfügen und Aktualisieren in Oracle

Sie können auch Datensätze verwenden, die auf %ROWTYPE-Deklarationen für die Tabelle basieren, in der eingefügt und aktualisiert wird, oder auf einem expliziten Datensatz-TYPE, der mit der Struktur der Tabelle kompatibel ist.

Beispiel für eine datensatzbasierte Einfügung:

DECLARE
my_book books%ROWTYPE;
BEGIN
my_book.isbn :='1-123456-123-1';
my_book.title :='Fox Infotech Blogs';
my_book.summary :='Fox-Beispiele';
my_book.author :='V. Kapoor';
my_book.page_count :=300;
INSERT INTO books VALUES my_book;
END;
/
Beachten Sie, dass Sie keine Klammern um den Datensatzbezeichner einfügen . Wenn Sie dieses Format verwenden:

INSERT INTO books VALUES (my_book); -- Mit Klammern, UNGÜLTIG!

dann erhalten Sie eine Ausnahme ORA-00947:nicht genügend Werte, da das Programm einen separaten Ausdruck für jede Spalte in der Tabelle erwartet.

Beispiel für datensatzbasierte Aktualisierung:

Sie können auch Aktualisierungen einer ganzen Zeile mit einem Datensatz durchführen. Im folgenden Beispiel wird eine Zeile in der Tabelle books mit einem %ROWTYPE-Datensatz aktualisiert. Beachten Sie, dass ich das Schlüsselwort ROW verwende, um anzuzeigen, dass ich die gesamte Zeile mit einem Datensatz aktualisiere:

DECLARE
my_book books%ROWTYPE;
BEGIN
my_book.isbn :='1-123456-123-1';
my_book.title :='Fox Infotech Blogs';
my_book.summary :='Fox-Beispiele';
my_book.author :='V. Kapoor';
my_book.page_count :=300;

UPDATE books
SET ROW =my_book
WHERE isbn =my_book.isbn;
END;
/
Es gibt einige Einschränkungen für datensatzbasierte Updates:

Sie müssen eine ganze Zeile mit der ROW-Syntax aktualisieren. Sie können eine Teilmenge von Spalten nicht aktualisieren (obwohl dies möglicherweise in zukünftigen Versionen unterstützt wird). Alle Felder, deren Werte NULL bleiben, führen dazu, dass der entsprechenden Spalte ein NULL-Wert zugewiesen wird.
Sie können keine Aktualisierung mit einer Unterabfrage durchführen.
Und falls Sie sich fragen, Sie können keine Tabellenspalte namens ROW erstellen.