sql >> Databasteknik >  >> RDS >> Oracle

Record-baserad infogning och uppdatering i Oracle

Du kan också använda poster som är baserade på %ROWTYPE-deklarationer mot tabellen som infogningen och uppdateringen görs till, eller på en explicit postTYPE som är kompatibel med tabellens struktur.

Exempel på postbaserat infogning:

DEKLARE
my_book books%ROWTYPE;
BEGIN
my_book.isbn :='1-123456-123-1';
my_book.title :='Fox Infotech Blogs';
my_book.summary :='Rävexempel';
my_book.author :='V. Kapoor';
my_book.page_count :=300;
INSERT INTO books VALUES my_book;
END;
/
Observera att du inte inkluderar parenteser runt postspecifikationen . Om du använder detta format:

INSERT INTO books VALUES (min_bok); -- Med parentes, INVALID!

då får du ett ORA-00947:inte tillräckligt med värdeundantag, eftersom programmet förväntar sig ett separat uttryck för varje kolumn i tabellen.

Exempel på postbaserad uppdatering:

Du kan också utföra uppdateringar av en hel rad med hjälp av en post. Följande exempel uppdaterar en rad i boktabellen med en %ROWTYPE-post. Observera att jag använder nyckelordet ROW för att indikera att jag uppdaterar hela raden med en post:

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

UPPDATERA böcker
SET ROW =my_book
WHERE isbn =my_book.isbn;
END;
/
Det finns vissa begränsningar för rekordbaserade uppdateringar:

Du måste uppdatera en hel rad med ROW-syntaxen. Du kan inte uppdatera en delmängd av kolumner (även om detta kan stödjas i framtida versioner). Alla fält vars värden lämnas NULL kommer att resultera i ett NULL-värde som tilldelas motsvarande kolumn.
Du kan inte utföra en uppdatering med en underfråga.
Och, om du undrar, kan du inte skapa en tabellkolumn som heter ROW.

  1. PL/SQL-prestandajustering för LIKE '%...%' jokerteckenfrågor

  2. WHERE-sats på SQL Server Textdatatyp

  3. Hur ISNUMERIC() fungerar i SQL Server

  4. PHP - Använder PDO med IN-klausul array