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

Come creare una tabella nidificata utilizzando il tipo di dati definito dall'utente nel database Oracle

Hey ragazzi! Oggi impareremo come creare una raccolta di tipi di tabella nidificata utilizzando il tipo di dati definito dall'utente. Spero ti sia divertito con l'ultimo tutorial in cui abbiamo appreso il processo di creazione di tabelle nidificate con tipo di dati primitivo. Ti consiglio vivamente di dare un'occhiata a quel tutorial poiché useremo i concetti da lì.

Simile al tipo di dati primitivo, è possibile creare una tabella nidificata utilizzando anche i tipi di dati definiti dall'utente. Per la dimostrazione utilizzeremo l'utente Oracle Object. Gli oggetti non richiedono presentazioni, se hai mai studiato i concetti OOP. In Oracle, come in altri linguaggi di programmazione, il tipo di oggetto è una specie di tipo di dati che funziona allo stesso modo di altri tipi di dati come Char, Varchar2, Number ecc. ma con maggiore flessibilità.

Per creare un oggetto Oracle utilizziamo la nostra vecchia e affidabile istruzione "Crea tipo".

CREATE OR REPLACE TYPE object_type AS OBJECT (
  obj_id  NUMBER,
  obj_name  VARCHAR2(10)
);
/

L'istruzione precedente creerà un oggetto Oracle con il nome "tipo di oggetto" con due attributi obj_id e obj_name in caso di esecuzione riuscita. Questo tipo di dati può quindi essere utilizzato per creare una tabella nidificata.

CREATE OR REPLACE TYPE My_NT IS TABLE OF object_type;
/

Penso che se hai controllato l'ultimo tutorial, troverai questa affermazione sopra molto familiare, ad eccezione del tipo di elemento che è un tipo di dati primitivo lì. Qui utilizziamo un tipo di dati definito dall'utente che è un oggetto Oracle.

La dichiarazione di cui sopra è stata spiegata in dettaglio nell'ultimo tutorial che puoi controllare qui.

Cosa significa creare una tabella nidificata utilizzando Oracle Object?

Ogni volta che crei una tabella nidificata utilizzando un oggetto Oracle, gli attributi dell'oggetto diventano le colonne di quella tabella. Ad esempio, nel nostro caso abbiamo creato una tabella nidificata "My_NT" utilizzando il tipo di dati definito dall'utente che è un oggetto Oracle "Object_Type" che ha due attributi obj_id e obj_name. Questi due attributi dell'oggetto fungeranno da colonne della tabella. L'immagine seguente ti aiuterà a capirlo più chiaramente.

Ora che abbiamo creato la tabella nidificata utilizzando il tipo di dati definito dall'utente, è ora di metterla al lavoro.

CREATE TABLE Base_Table(
  tab_id  NUMBER,
  tab_ele My_NT
)NESTED TABLE tab_ele STORE AS stor_tab_1;
/

La tabella sopra denominata "Base_Table" è semplice con 2 colonne "tab_id" e "tab_ele". La prima colonna è di tipo Number Datatype mentre la seconda colonna è di tipo Nested Table. Ciò significa che la seconda colonna contiene una tabella e quella tabella è la nostra tabella nidificata "My_Nt"

Sebbene questa 'Base_Table' sia una tabella semplice, ma una delle sue colonne contiene una tabella nidificata che pone alcune domande come:

Come inserire i dati nella tabella? Come aggiornare i dati della tabella? O come recuperare i dati dalla tabella? Proviamo a scoprire le risposte a tutte queste domande una alla volta.

Come inserire i dati nella tabella nidificata?

Sì, sono d'accordo sul fatto che inserire dati in una tabella che ha una colonna di tipo tabella nidificata può essere complicato, ma in qualche modo dobbiamo trovare il modo per farlo. Come una tabella senza dati non ci serve. Giusto? Vediamo come possiamo farlo.

 INSERT INTO base_table (tab_id, tab_ele) VALUES
 (801,  -- value for 1st colum 
   My_NT (object_type (1,'Superman') -- values for 2nd column )
 );

Come puoi vedere in questa istruzione INSERT, tutto è uguale a un normale DML di inserimento tranne la riga numero 3 in cui stiamo inserendo i dati nella seconda colonna della tabella. Per inserire i dati nella colonna che è di tipo Nested Table devi prima scrivere il nome della tua tabella annidata che in questo caso è 'My_NT' poi devi scrivere il nome del tuo Oracle Object che qui è 'Object_Type' seguito dai valori che vuoi inserire nella tua tabella. Non dimenticare di abbinare le parentesi per il nome della tabella e il nome dell'oggetto, altrimenti riceverai un errore.

Come aggiornare i valori della tabella nidificata?

UPDATE base_table SET tab_ele = My_NT(object_type(1,'SpiderMan')) WHERE tab_id = 801; 

L'istruzione DML sopra aggiornerà i valori di conseguenza in caso di esecuzione riuscita.

Come recuperare i dati dalla tabella nidificata?

Puoi semplicemente eseguire l'istruzione Select sulla tua tabella per ottenere i dati.

Select tab_id, tab_ele FROM base_table;

L'immagine seguente ti mostrerà il risultato restituito da questa tabella.

Come puoi vedere, questa istruzione SELECT ti mostrerà i dati delle colonne che sono di tipo di dati primario ma solo il nome della tua tabella nidificata insieme all'oggetto Oracle dalla colonna che definisci come tipo di tabella nidificata. Puoi facilmente superare questo problema usando l'espressione TABLE in questo modo.

SELECT * FROM TABLE(
  SELECT tab_ele FROM Base_Table WHERE tab_id = 801
)

L'esecuzione riuscita della query precedente ti mostrerà i dati della seconda colonna della tabella "Base_Table" in un formato relazionale.

Questo è tutto per questo tutorial, spero che ti sia piaciuto e hai imparato qualcosa di nuovo. Assicurati di iscriverti e iscriverti. Buona giornata!