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

Sådan opretter du indlejret tabel som databaseobjekt i Oracle

Hvis du planlægger at genbruge den indlejrede tabel, som du vil oprette, er det det bedste valg for dig at gøre det som et databaseobjekt. Du kan gemme dem i din database permanent og bruge dem, når du vil.

Udover at oprette Nested Table type PL/SQL Collection inde i en PL/SQL-blok, kan du også oprette dem som databaseobjekt og gemme dem permanent. Du kan også genbruge dem, når du vil. Indlejret tabel oprettet som databaseobjekt kan være baseret på enten primitiv datatype eller brugerdefineret datatype. I denne øvelse vil vi koncentrere os om førstnævnte og forlade sidstnævnte til næste øvelse.

Sådan opretter du indlejret tabeltypesamling baseret på primitiv datatype

Med primitiv datatype mener vi de datatyper, som er foruddefineret af sproget og er navngivet af et reserveret nøgleord. Du kan henvise til dette Oracle-dokument for at læse mere om PL/SQL-datatyper.

De følgende tabeller har ingen begrænsninger, indeks eller andet designet på dem og er udelukkende oprettet for at demonstrere, hvordan man opretter indlejret tabel som databaseobjekt.

Trin 1:Indstil serveroutput til

SET SERVEROUTPUT ON;

Trin 2:Opret indlejret tabeltypesamling

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

Ovenstående erklæring om vellykket eksekvering vil skabe en indlejret tabel med navnet 'my_nested_table', som vil være baseret på primitiv datatype VARCHAR2.

Trin 3:Hvordan bruger man indlejret tabel?

Samlingstypen, som vi oprettede ovenfor, kan bruges til at angive typen af ​​en kolonne i en tabel.

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;
/

Ovenstående tabel er en normal tabel bortset fra, at dens 3 kolonne er af indlejret tabeltype, som kan indeholde flere værdier. For at definere en kolonne i en tabel som indlejret tabeltype, skal du fortælle compileren navnet på kolonnen og en lagertabel. Du kan gøre det ved at bruge NESTED ABLE og STORE AS-klausulen, som vi gjorde her i linje nummer 5. Ved hjælp af klausul NESTED TABLE angiver vi navnet på kolonnen, og ved hjælp af STORE AS-klausulen angiver vi lagertabellen for den indlejrede tabel.

Du kan henvise til videotutorialen, hvor jeg trinvist har forklaret ovenstående tabeloprettelsesprocessen.

Indsæt rækker i tabellen

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

Du indsætter rækker i den indlejrede tabel på samme måde som du indsætter i den normale tabel. Men for at indsætte data i kolonnen med indlejret tabeltype skal du først skrive navnet på indlejret tabel, som i vores tilfælde er 'my_nested_table' (se trin 2) og derefter skrive dataene i henhold til datatypen for din indlejrede tabel og omslutt det inden for parentesen.

Hent data fra tabellen

En simpel SELECT DML-sætning kan bruges til at hente data fra tabellen.

SELECT * FROM my_subject;

Denne simple DML-sætning viser dig alle de data, der er gemt i tabellen, som vi oprettede ovenfor. For at se data fra en bestemt række kan du bruge WHERE-sætning med SELECT DML

SELECT * FROM my_subject WHERE sub_id = 101;

Hvis du vil, kan du tage hjælp af underforespørgsel til bare at kontrollere dataene fra den kolonne, som du definerede som indlejret tabeltype.

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

Ovenstående forespørgsel viser dig dataene for emnet, som kun har emne-id 101 fra sub_schedule_day kolonnen. I denne forespørgsel brugte vi TABLE-udtryk til at åbne forekomsten og vise dataene i relationelt format.

Opdater data for tabellen

Du kan enten opdatere alle værdierne i den kolonne, som du definerer som indlejret tabel, eller du kan opdatere en enkelt forekomst af samme.

Opdater alle værdierne i den indlejrede tabeltypekolonne.

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

Ovenstående forespørgsel vil opdatere alle værdierne for sub_schedule_day fra 'man', 'fre' til 'tir' og 'lør'. Antag nu, at du kun vil opdatere en enkelt forekomst af denne kolonne ved at erstatte 'lør' med 'tors'. Hvordan vil du gøre det?

Opdater enkelt forekomst af indlejret tabel

For at opdatere en enkelt forekomst af indlejret tabeltypekolonne kan du igen tage hjælp af TABLE-udtryk.

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

Ovenstående forespørgsel vil opdatere værdien fra 'lør' til 'tors' i tabellen.

Håber du nød at læse og lærte noget nyt. Sørg for at abonnere på vores kanal, da mange sådanne interessante tutorials er på vej. Tak og god dag!


  1. Sådan undgår du at bruge + i versionsnummer med SQLiteAssetHelper

  2. Indsæt hvis det ikke findes, ellers returner id i postgresql

  3. PostgreSQL-streaming vs logisk replikering – sammenligning

  4. Sådan tilføjer du en opslagskontrol til en formular i Access 2016