sql >> Databasteknik >  >> RDS >> Oracle

Hur man skapar kapslade tabeller som databasobjekt i Oracle

Om du planerar att återanvända den kapslade tabellen som du vill skapa är det bästa valet för dig att göra det som ett databasobjekt. Du kan lagra dem i din databas permanent och använda dem när du vill.

Förutom att skapa kapslade tabeller av typen PL/SQL-samling i ett PL/SQL-block kan du också skapa dem som databasobjekt och lagra dem permanent. Du kan också återanvända dem när du vill. Kapslade tabeller skapade som databasobjekt kan baseras på antingen Primitive Datatype eller User-Define Datatype. I den här handledningen kommer vi att koncentrera oss på det förra och lämna det senare till nästa handledning.

Så här skapar du en samling av kapslade tabelltyper baserat på primitiv datatyp

Med primitiv datatyp menar vi de datatyper som är fördefinierade av språket och namnges av ett reserverat nyckelord. Du kan hänvisa till detta Oracle-dokument för att läsa mer om PL/SQL-datatyper.

Följande tabeller har inga begränsningar, index eller något designat på dem och är skapade enbart för att demonstrera hur man skapar kapslade tabeller som databasobjekt.

Steg 1:Aktivera serverutgång

SET SERVEROUTPUT ON;

Steg 2:Skapa samling av kapslade tabelltyper

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

Ovanstående uttalande om framgångsrik exekvering kommer att skapa en kapslad tabell med namnet 'my_nested_table' som kommer att baseras på primitiv datatyp VARCHAR2.

Steg 3:Hur använder man kapslade tabeller?

Samlingstypen som vi skapade ovan kan användas för att specificera typen av en kolumn i en tabell.

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

Tabellen ovan är en normal tabell förutom att dess 3 kolumn är av kapslad tabelltyp som kan innehålla flera värden. För att definiera en kolumn i en tabell som kapslad tabelltyp måste du berätta för kompilatorn namnet på kolumnen och en lagringstabell. Du kan göra det genom att använda NESTED ABLE och STORE AS-satsen, som vi gjorde här på rad nummer 5. Med hjälp av satsen NESTED TABLE anger vi namnet på kolumnen och med STORE AS-satsen anger vi lagringstabellen för den kapslade tabellen.

Du kan hänvisa till videohandledningen där jag stegvis har förklarat processen för att skapa tabellen ovan.

Infoga rader i tabellen

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

Du infogar rader i den kapslade tabellen på samma sätt som du infogar i den normala tabellen. Men för att infoga data i kolumnen för kapslad tabelltyp måste du först skriva namnet på kapslad tabell som i vårt fall är 'my_nested_table' (se steg 2) och sedan skriva data enligt datatypen för din kapslade tabell och omslut den inom parentesen.

Hämta data från tabellen

En enkel SELECT DML-sats kan användas för att hämta data från tabellen.

SELECT * FROM my_subject;

Denna enkla DML-sats visar dig all data som lagras i tabellen som vi skapade ovan. För att se data från en specifik rad kan du använda WHERE-satsen med SELECT DML

SELECT * FROM my_subject WHERE sub_id = 101;

Om du vill kan du ta hjälp av underfrågan för att bara kontrollera data från kolumnen som du definierade som kapslad tabelltyp.

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

Frågan ovan kommer att visa dig data från ämnet som har ämnes-id 101 endast från kolumnen sub_schedule_day. I den här frågan använde vi TABLE-uttryck för att öppna instansen och visa data i relationsformat.

Uppdatera tabellens data

Du kan antingen uppdatera alla värden i kolumnen som du definierar som kapslade tabeller eller så kan du uppdatera en enda instans av densamma.

Uppdatera alla värden i den kapslade tabelltypkolumnen.

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

Ovanstående fråga kommer att uppdatera alla värden för sub_schedule_day från 'mån', 'fre' till 'tis' och 'lör'. Anta nu att du bara vill uppdatera en enda instans av den här kolumnen genom att ersätta "lör" med "tor". Hur gör du det?

Uppdatera enstaka instans av kapslad tabell

För att uppdatera en enskild instans av kapslad kolumn av tabelltyp kan du återigen ta hjälp av TABLE-uttrycket.

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

Ovanstående fråga kommer att uppdatera värdet från "lör" till "tor" i tabellen.

Hoppas du tyckte om att läsa och lärde dig något nytt. Se till att prenumerera på vår kanal eftersom många sådana intressanta tutorials är på väg. Tack &ha en bra dag!


  1. Oracles återgång till användning i Java (JDBC, Prepared Statement)

  2. SQL Server RAISERROR-uttalande med enkla exempel

  3. Avgränsare i MySQL

  4. Skapa en e-postprofil för databas i SQL Server (T-SQL)