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

Come creare una tabella annidata come oggetto di database in Oracle

Se prevedi di riutilizzare la tabella nidificata che desideri creare, farlo come oggetto di database è la scelta migliore per te. Puoi archiviarli nel tuo database in modo permanente e utilizzarli quando vuoi.

Oltre a creare una raccolta PL/SQL di tipo Nested Table all'interno di un blocco PL/SQL, puoi anche crearli come oggetti di database e archiviarli in modo permanente. Inoltre puoi riutilizzarli quando vuoi. La tabella nidificata creata come oggetto di database può essere basata sul tipo di dati primitivo o sul tipo di dati definito dall'utente. In questo tutorial ci concentreremo sul primo e lasceremo il secondo per il prossimo tutorial.

Come creare una raccolta di tipi di tabelle nidificate in base al tipo di dati primitivo

Per tipo di dati primitivo si intendono i tipi di dati che sono predefiniti dal linguaggio e sono nominati da una parola chiave riservata. Puoi fare riferimento a questo documento Oracle per saperne di più sui tipi di dati PL/SQL.

Le seguenti tabelle non hanno vincoli, indici o altro progettato su di esse e sono create esclusivamente per dimostrare come creare una tabella nidificata come oggetto di database.

Passaggio 1:attiva l'output del server

SET SERVEROUTPUT ON;

Passaggio 2:crea una raccolta di tipi di tabelle nidificate

CREATE OR REPLACE TYPE my_nested_table IS TABLE OF VARCHAR2 (10);
/

L'istruzione precedente sull'esecuzione riuscita creerà una tabella annidata con il nome "my_nested_table" che sarà basata sul tipo di dati primitivo VARCHAR2.

Passaggio 3:come utilizzare la tabella nidificata?

Il tipo di raccolta che abbiamo creato sopra può essere utilizzato per specificare il tipo di una colonna di una tabella.

CREATE TABLE my_subject(
	  sub_id    	NUMBER,
	  sub_name  	VARCHAR2 (20),
	  sub_schedule_day    my_nested_table
) NESTED TABLE sub_schedule_day STORE AS nested_tab_space;
/

La tabella sopra è una tabella normale tranne per il fatto che la sua colonna 3 è di tipo tabella nidificata che può contenere più valori. Per definire una colonna di una tabella come tipo di tabella nidificata devi comunicare al compilatore il nome della colonna e una tabella di archiviazione. Puoi farlo usando la clausola NESTED ABLE e STORE AS, come abbiamo fatto qui nella riga numero 5. Usando la clausola NESTED TABLE specifichiamo il nome della colonna e usando la clausola STORE AS specifichiamo la tabella di archiviazione per la tabella nidificata.

Puoi fare riferimento al tutorial video in cui ho spiegato passo passo il processo di creazione della tabella sopra.

Inserisci righe nella tabella

INSERT INTO my_subject (sub_id, sub_name, sub_schedule_day)
VALUES (101, 'Maths', my_nested_table('mon', 'Fri'));

Inserisci le righe nella tabella nidificata come le inserisci nella tabella normale. Tuttavia per inserire i dati nella colonna del tipo di tabella nidificata devi prima scrivere il nome della tabella nidificata che nel nostro caso è 'my_nested_table' (fare riferimento al passaggio 2) e quindi scrivere i dati in base al tipo di dati della tabella nidificata e racchiudilo tra parentesi.

Recupera i dati dalla tabella

Una semplice istruzione SELECT DML può essere utilizzata per recuperare i dati dalla tabella.

SELECT * FROM my_subject;

Questa semplice istruzione DML ti mostrerà tutti i dati memorizzati nella tabella che abbiamo creato sopra. Per vedere i dati da una riga specifica puoi usare la clausola WHERE con SELECT DML

SELECT * FROM my_subject WHERE sub_id = 101;

Se lo desideri, puoi chiedere aiuto alla sottoquery per controllare semplicemente i dati dalla colonna che hai definito come tipo di tabella nidificata.

SELECT * FROM TABLE (
  SELECT sub_schedule_day FROM my_subject WHERE sub_id = 101
);

La query precedente ti mostrerà i dati del soggetto che ha l'id-oggetto 101 solo dalla colonna sub_schedule_day. In questa query abbiamo utilizzato l'espressione TABLE per aprire l'istanza e visualizzare i dati in formato relazionale.

Aggiorna i dati della tabella

Puoi aggiornare tutti i valori della colonna che definisci come tabella nidificata oppure puoi aggiornare una singola istanza della stessa.

Aggiorna tutti i valori della colonna del tipo di tabella nidificata.

UPDATE my_subject SET sub_schedule_day = my_nested_table('Tue', 'Sat') 
WHERE sub_id = 101;
/

La query sopra aggiornerà tutti i valori di sub_schedule_day da "lun", "ven" a "mar" e "sab". Supponiamo ora di voler aggiornare solo una singola istanza di questa colonna sostituendo "Sat" con "Thu". Come lo farai?

Aggiorna una singola istanza della tabella nidificata

Per aggiornare una singola istanza di una colonna di tipo tabella nidificata puoi ancora una volta utilizzare l'aiuto dell'espressione TABLE.

UPDATE TABLE
  (SELECT sub_schedule_day FROM my_subject 
  WHERE sub_id = 101) A
SET A.COLUMN_VALUE   = 'Thur' 
WHERE A.COLUMN_VALUE = 'Sat';

La query precedente aggiornerà il valore da "Sab" a "Gio" nella tabella.

Spero ti sia piaciuto leggere e imparato qualcosa di nuovo. Assicurati di iscriverti al nostro canale poiché molti tutorial interessanti sono in arrivo. Grazie e buona giornata!