sql >> Databasteknik >  >> RDS >> Oracle

PL/SQL-samling:Kapslad tabell i Oracle-databas

Hur man skapar kapslade bord i PL/SQL-blocket

Välkommen till den andra handledningen i PL/SQL Collection-serien. I den här handledningen kommer vi att lära oss den första typen av samling som är "Inbäddad tabell". En tabell inuti en tabell är den enklaste definitionen man kan komma på och den är korrekt på alla sätt eftersom en tabell som är inbäddad i en annan tabell är exakt vad namnet kapslad tabell antyder.

Men om vi måste definiera samlingen "Nested table" på ett mer snyggt och tekniskt sätt så kan vi säga att inkapslade tabeller är endimensionella strukturer som är beständiga och obegränsade till sin natur. De är tillgängliga i SQL såväl som PL/SQL och kan användas i tabeller, poster och objektdefinitioner. Eftersom det är en obegränsad PL/SQL-samling kan den därför innehålla valfritt antal element i en slumpmässigt ordnad uppsättning.

Definition
Inkapslade tabeller är endimensionella strukturer som är beständiga och ogränsade till sin natur. De är tillgängliga i SQL såväl som PL/SQL och kan användas i tabeller, poster och objektdefinitioner. Eftersom det är en ogränsad PL/SQL-samling kan den därför innehålla valfritt antal element i en oordnad uppsättning.

Föreslagen läsning:Introduktion till PL/SQL-samlingen

En kapslad tabell kan skapas inuti PL/SQL-blocket eller i databasen som ett samlingsobjekt (Schema Object). I fallet med den tidigare kapslade tabellen beter sig som en endimensionell array utan någon indextyp eller någon övre gräns.

Så låt oss för närvarande koncentrera oss på hur man skapar kapslade tabeller i PL/SQL-blocket och lämna resten till nästa handledning.

Syntax för att skapa kapslade tabeller

DECLRE 
TYPE nested_table_name IS TABLE OF element_type [NOT NULL];

Jag har förklarat denna syntax i detalj i min videohandledning på min YouTube-kanal. Jag rekommenderar starkt att du tittar på den videon.

Exempel:Hur skapar man kapslade tabeller i ett PL/SQL-block?

Följande exempel är endast till för att demonstrera hur man skapar kapslade tabeller, det finns inget fancy med det.

SET SERVEROUTPUT ON;
DECLARE
   TYPE my_nested_table   IS TABLE OF number;
    var_nt  my_nested_table :=  my_nested_table (9,18,27,36,45,54,63,72,81,90);
BEGIN
   DBMS_OUTPUT.PUT_LINE ('Value Stored at index 1 in NT is ' ||var_nt (1)); 
   DBMS_OUTPUT.PUT_LINE ('Value Stored at index 2 in NT is ' ||var_nt (2));
   DBMS_OUTPUT.PUT_LINE ('Value Stored at index 3 in NT is ' ||var_nt (3));
END;
 /

Ovanstående exempel är ett mycket enkelt sådant där vi skapade en kapslad tabell och gav den namnet 'my_nested_table' (radnummer 3). På nästa rad (rad nummer 4) skapade vi en instans av samma samling och använde den för att initiera den kapslade tabellen och lagra lite data i den. I exekveringssektionen kommer vi åt de lagrade data individuellt med hjälp av indexnumret, på samma sätt som vi brukade göra i arrayer.

Istället för att komma åt data en efter en manuellt med hjälp av index kan vi använda loopar och cykla igenom varje element i den samlingskapslade tabellen.

 SET SERVEROUTPUT ON;
 DECLARE
   TYPE my_nested_table   IS TABLE OF number;
   var_nt  my_nested_table :=  my_nested_table (9,18,27,36,45,54,63,72,81,90);
 BEGIN
   FOR i IN 1..var_nt.COUNT
   LOOP
     DBMS_OUTPUT.PUT_LINE ('Value stored at index '||i||'is '||var_nt(i));
   END LOOP;
 END;
 /

Det är ytterligare ett exempel på hur man skapar kapslade tabeller där vi bläddrar igenom data och visar den tillbaka till användaren med hjälp av For Loop.

Det handlar om hur man skapar kapslade tabeller i PL/SQL-block. Håll utkik eftersom i nästa handledning kommer vi att lära oss hur du skapar kapslade tabeller som databassamlingsobjekt och vilka alla datalexikonvyer du kan använda för att få information om de kapslade tabellerna som är lagrade i din databas.

Det är allt. Tack för att du läser och ha en bra dag!


  1. Stöder Python MySQL-förberedda uttalanden?

  2. Hur hittar jag datakatalogen för en SQL Server-instans?

  3. PostgreSQL 9.2 JDBC-drivrutinen använder klientens tidszon?

  4. Använda pt-pg-summary Percona Toolkit för PostgreSQL