Oracle
 sql >> Database >  >> RDS >> Oracle

Inserimento e aggiornamento basati su record in Oracle

Puoi anche utilizzare record basati su dichiarazioni %ROWTYPE rispetto alla tabella in cui vengono effettuati l'inserimento e l'aggiornamento o su un record esplicito TYPE compatibile con la struttura della tabella.

Esempio di inserimento basato su record:

DICHIARA
my_book books%ROWTYPE;
BEGIN
my_book.isbn :='1-123456-123-1';
my_book.title :='Fox Infotech Blogs';
my_book.summary :='Esempi Fox';
my_book.author :='V. Kapoor';
my_book.page_count :=300;
INSERT INTO books VALUES my_book;
END;
/
Nota di non includere parentesi attorno all'identificatore di record . Se utilizzi questo formato:

INSERT IN VALUES libri (my_book); -- Tra parentesi, NON VALIDO!

quindi otterrai un'eccezione ORA-00947:valori non sufficienti, poiché il programma si aspetta un'espressione separata per ogni colonna della tabella.

Esempio di aggiornamento basato su record:

Puoi anche eseguire gli aggiornamenti di un'intera riga utilizzando un record. L'esempio seguente aggiorna una riga nella tabella libri con un record %ROWTYPE. Si noti che utilizzo la parola chiave RIGA per indicare che sto aggiornando l'intera riga con un record:

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

UPDATE libri
SET ROW =my_book
WHERE isbn =my_book.isbn;
END;
/
Ci sono alcune restrizioni sugli aggiornamenti basati sui record:

È necessario aggiornare un'intera riga con la sintassi ROW. Non è possibile aggiornare un sottoinsieme di colonne (sebbene ciò possa essere supportato nelle versioni future). Tutti i campi i cui valori sono lasciati NULL risulteranno in un valore NULL assegnato alla colonna corrispondente.
Non è possibile eseguire un aggiornamento utilizzando una sottoquery.
E, nel caso te lo stia chiedendo, non puoi creare una colonna di tabella chiamata ROW.