Hej gutter! I dag vil vi lære, hvordan du opretter indlejret tabeltypesamling ved hjælp af brugerdefineret datatype. Håber du havde en god tid med den sidste tutorial, hvor vi lærte oprettelsesprocessen af indlejret tabel med primitiv datatype. Jeg anbefaler stærkt, at du tager et kig på den tutorial, da vi skal bruge koncepterne derfra.
I lighed med primitiv datatype kan en indlejret tabel også oprettes ved hjælp af brugerdefinerede datatyper. Til demonstrationen vil vi bruge brugeren Oracle Object. Objekter kræver ingen introduktion, hvis du nogensinde har studeret OOP-koncepter. I Oracle, ligesom andre programmeringssprog, er objekttype en slags datatype, der fungerer på samme måde som andre datatyper såsom Char, Varchar2, Number osv., men med mere fleksibilitet.
For at skabe et Oracle-objekt bruger vi vores gamle og troværdige 'Create Type'-erklæring.
CREATE OR REPLACE TYPE object_type AS OBJECT ( obj_id NUMBER, obj_name VARCHAR2(10) ); /
Ovenstående sætning vil oprette et orakelobjekt med navnet 'objekttype' med to attributter obj_id og obj_name ved vellykket udførelse. Denne datatype kan derefter bruges til at oprette en indlejret tabel.
CREATE OR REPLACE TYPE My_NT IS TABLE OF object_type; /
Jeg tror, at hvis du tjekkede den sidste tutorial, så vil du finde denne ovenstående erklæring meget velkendt, undtagen elementtypen, som er en primitiv datatype der. Her bruger vi en brugerdefineret datatype, som er et Oracle Object.
Ovenstående udsagn er blevet forklaret i detaljer i det sidste selvstudie, som du kan tjekke her.
Hvad betyder det at oprette en indlejret tabel ved hjælp af Oracle Object?
Når du opretter en indlejret tabel ved hjælp af et Oracle-objekt, bliver objektets attributter kolonnerne i den tabel. For eksempel oprettede vi i vores tilfælde en indlejret tabel 'My_NT' ved hjælp af den brugerdefinerede datatype, som er et Oracle Object 'Object_Type', som har to attributter obj_id og obj_name. Disse to attributter for objektet vil fungere som kolonnerne i tabellen. Følgende billede vil hjælpe dig med at forstå dette mere klart.
Nu, hvor vi har oprettet den indlejrede tabel ved hjælp af brugerdefineret datatype, er det tid til at sætte det i gang.
CREATE TABLE Base_Table( tab_id NUMBER, tab_ele My_NT )NESTED TABLE tab_ele STORE AS stor_tab_1; /
Ovenstående tabel med navnet 'Base_Table' er en simpel tabel, som har 2 kolonner 'tab_id' og 'tab_ele'. Den første kolonne er af nummerdatatype, mens anden kolonne er af typen indlejret tabel. Det betyder, at den anden kolonne indeholder en tabel, og den tabel er vores indlejrede tabel 'My_Nt'
Selvom denne 'Base_Table' er en simpel tabel, men en af dens kolonne indeholder en indlejret tabel i den, som rejser nogle spørgsmål såsom:
Hvordan indsætter man data i tabellen? Hvordan opdaterer man tabellens data? Eller hvordan henter man data fra tabellen? Lad os prøve at finde ud af svarene på alle disse spørgsmål ét ad gangen.
Hvordan indsætter man data i den indlejrede tabel?
Ja, jeg er enig i, at det kan være vanskeligt at indsætte data i en tabel, der har en kolonne med indlejret tabeltype, men på en eller anden måde er vi nødt til at finde måden at gøre det på. Da en tabel uden data ikke er til nogen nytte for os. Ret? Lad os se, hvordan vi kan gøre det.
INSERT INTO base_table (tab_id, tab_ele) VALUES (801, -- value for 1st colum My_NT (object_type (1,'Superman') -- values for 2nd column ) );
Som du kan se i denne INSERT-sætning er alt det samme som en normal Insert DML undtagen linje nummer 3, hvor vi indsætter data i den anden kolonne i tabellen. For at indsætte data i kolonnen, som er af Nested Table type, skal du først skrive navnet på din indlejrede tabel, som i dette tilfælde er 'My_NT', derefter skal du skrive navnet på dit Oracle Object, som her er 'Object_Type' efterfulgt af de værdier, du vil indsætte i din tabel. Glem ikke at matche parentesen for tabelnavn og objektnavn, ellers får du en fejl.
Hvordan opdaterer man værdierne for den indlejrede tabel?
UPDATE base_table SET tab_ele = My_NT(object_type(1,'SpiderMan')) WHERE tab_id = 801;
Ovenstående DML-sætning vil opdatere værdierne i overensstemmelse hermed ved vellykket udførelse.
Hvordan henter man data fra den indlejrede tabel?
Du kan blot udføre Select-sætningen på din tabel for at få dataene.
Select tab_id, tab_ele FROM base_table;
Følgende billede viser dig resultatet fra denne tabel.
Som du kan se, vil denne SELECT-sætning vise dig dataene fra de kolonner, som er af primær datatype, men kun navnet på din indlejrede tabel sammen med Oracle-objektet fra den kolonne, som du definerer som en indlejret tabeltype. Du kan nemt overvinde dette problem ved at bruge TABLE-udtryk som dette.
SELECT * FROM TABLE( SELECT tab_ele FROM Base_Table WHERE tab_id = 801 )
Vellykket udførelse af ovenstående forespørgsel vil vise dig dataene fra anden kolonne i din tabel 'Base_Table' i et relationelt format.
Det var det for denne tutorial, håber du nød og lærte noget nyt. Sørg for at abonnere og tilmelde dig. Hav en god dag!