pl sql collections nested table
Lær det grundlæggende i PL SQL-samlinger, indsamlingsmetoder, Varray, indlejret tabel og tilknyttet matrix ved hjælp af kodeeksempler:
I PL / SQL-underprogrammer tutorial af PL / SQL-serien , vi lærte om procedurer og funktioner, forskellige parameteroverførselsmetoder, og hvordan man opretter / sletter procedurer og funktioner i PL / SQL.
I denne artikel vil vi diskutere PL SQL-samlinger og relaterede begreber. Vi forklarer også begrebet Varrays, indlejrede tabeller og indeks-efter-tabeller, der er tilgængelige i PL / SQL.
Derudover vil vi undersøge nogle af de indbyggede undtagelser og indsamlingsmetoder.
Hvad du vil lære:
- PL SQL-samlinger
- Indlejrede tabeller i PL / SQL
- Associerende matrix eller indeks efter tabeller
- Varianter i PL / SQL
- Konklusion
PL SQL-samlinger
En samling er en gruppe af elementer af homogene datatyper. Det består generelt af arrays, lister, sæt osv. Hvert af elementerne har et bestemt abonnement, der afspejler dets position.
PL SQL-samlinger er af følgende typer:
- Associative Array / Index-by-tabeller
- Indlejrede tabeller.
- Varianter.
PL SQL-samlinger bruges generelt til lagring og manipulation af store klumper af data ved hjælp af nøgleordet BULK COLLECT i Oracle.
Indsamlingsmetoder
Pl / SQL har nogle indbyggede metoder under indsamling, som er angivet nedenfor.
Sl. Ingen. | Navn | Beskrivelser |
---|---|---|
7 | næste (m) | Giver det indeks, der efterfølger m. Indeks. |
1 | tælle | Giver antallet af elementer, der er til stede i samlingen. |
to | begrænse | Bekræfter samlingens størrelse. |
3 | eksisterer (m) | Returnerer sandt, hvis mth-element til stede i samlingen ellers returnerer falsk. |
4 | først | Giver startindeksnummer i samling med heltalsunderskrift. |
5 | sidst | Giver slutindeksnummer i samling med heltal-underskrift. |
6 | forlænge | Tilføjer NULL-element til samlingens slutning. |
8 | forudgående (m) | Giver det indeks, der går forud for m-indekset. |
9 | trimme | Sletter et element fra slutningen af samlingen. |
10 | trim (m) | Sletter m elementer fra slutningen af samlingen. |
elleve | slet | Sletter alle elementer fra samlingen, idet antallet tælles til 0. |
12 | slet (m) | Sletter mth-element fra samling, hvis mth-element er NULL, udføres der ingen handling. |
13 | slet (m, k) | Sletter element fra mth til kth position. |
14 | udvide (m) | Tilføjer m-element til samlingens slutning. |
femten | forlæng (m, k) | Tilføjer m kopier af kth-elementet til slutningen af samlingen. |
Samlingsundtagelser
Nogle af de almindelige undtagelser for samling er som følger:
- VALUE_ERROR: Denne undtagelse kastes, hvis et abonnement ikke kan konverteres til nøgletypen eller er NULL. Denne undtagelse hæves normalt, hvis en nøgle er af typen PLS_INTEGER-område, og abonnementet ligger uden for dette interval.
- INGEN DATA FUNDET: Denne undtagelse kastes af PL / SQL, hvis enten en SELECT-sætning ikke henter rækker, eller et program peger på et element, der slettes i en indlejret tabel. Denne undtagelse kan også hæves med et element, der ikke er initialiseret i en indeks-efter-tabel.
- COLLECTION_IS_NULL: Denne undtagelse kastes af PL / SQL, hvis samlingen er NULL som standard.
- SUBSCRIPT_BEYOND_COUNT: Denne undtagelse kastes, når et abonnement er mere end det samlede antal af antallet af elementer i samlingen.
- SUBSCRIPT_OUTSIDE_LIMIT: Denne undtagelse kastes, når et abonnement er uden for tærskelområdet.
Indlejrede tabeller i PL / SQL
De indlejrede tabeller er som en enkelt kolonnedatabeltabel eller et 1-dimensionelt array, hvor arraystørrelsen er dynamisk. Dens abonnement er af numerisk type. Vi kan få den indlejrede tabel i en variabel ved at give rækkerne et abonnement, der begynder med 1. Denne funktion gør den ens i naturen som en matrix.
En indlejret tabel kan holdes i en kolonne i en database. Det kan også bruges til at manipulere SQL-operationer ved at slutte sig til tabeller. Da det er som et dynamisk array, så kan den øvre grænse være af enhver størrelse.
En indlejret tabel kan have både tætte og sparsomme indsamlingsegenskaber, hvilket betyder, at ethvert element kan slettes tilfældigt (gør det sparsomt) ved hjælp af SLET-proceduren. Sletning af data forårsager diskontinuitet i indekset, men NEXT-funktionen hjælper med at gentage til de næste abonnementer. Da dataene er gemt i form af en tabel, kan de hentes ved hjælp af SELECT-udsagn.
En indlejret tabel kan bygges på skemaniveau eller i PL / SQL-blok. Det er som et databaseobjekt, der er tilgængeligt i databasen eller underprogrammet.
Forskelle mellem Array og Nested-tabellen er angivet nedenfor:
- Størrelsen på de indlejrede tabeller kan øges dynamisk. Den øvre grænse for en matrix er fast, men den er ikke fast for indlejrede tabeller.
- Arrayet har fortløbende abonnementer, der gør det tæt. En indlejret tabel er dog tæt på oprettelsestidspunktet, men bliver sparsom, når elementerne slettes imellem.
Syntaks for den indlejrede tabel:
TYPE <> IS TABLE OF <> (NOT NULL);
Her, 'type' er typespecifikatoren. 'element' er datatypen.
Kodeimplementering med den indlejrede tabel:
DECLARE TYPE subject IS TABLE OF VARCHAR(15); TYPE teacher IS TABLE OF VARCHAR2(20); subjectnames subject; subjectteacher teacher; summ integer; BEGIN -- adding subject and its teachers to the table subjectnames := subject('PLSQL', 'SELENIUM', 'JMETER'); subjectteacher:= teacher('Sashi', 'Mala', 'Mukund'); -- returns count of number of elements in nested table summ:= subjectteacher.count; -- printing the content to the console dbms_output.put_line('Total Number of Teachers: '|| summ); FOR i IN 1 .. summ LOOP dbms_output.put_line('Subject:'||subjectnames(i)||', Teacher:' || subjectteacher(i)); end loop; END;
Output af ovenstående kode skal være:
Associerende matrix eller indeks efter tabeller
Indeks-ved-tabellen kaldes almindeligvis det associerende array. Med hensyn til struktur er både index-by-tabellen og de indlejrede tabeller ens og har abonnement for at få adgang til elementerne.
Et associerende array er repræsenteret af et nøgleværdipar. Hver af de unikke nøgler bruges til at identificere værdien i arrayet. Datatypen for nøglen kan være en streng eller et heltal defineret under oprettelsen. En nøgle føjes til indeks-ved-tabellen ved blot at tildele en værdi for første gang. For at ændre den samme post skal vi bruge den samme nøgle.
Nøglen skal være en unik, enten som en primær nøgle i en tabel eller ved at kombinere strenge for at udvikle unik værdi. Denne type samling har en matrixstørrelse, der er dynamisk og har enten sparsomme eller tætte egenskaber. En forskel mellem indeks-efter-tabellen og den indlejrede tabel er, at den førstnævnte ikke kan gemmes i kolonnen i databasen, men den indlejrede tabel kan lagres.
De associerende arrays giver nem vedligeholdelse af abonnementet og oprettes inden for en PL / SQL-blok. Det er som en SQL-tabel, hvor værdier opnås ved hjælp af den primære nøgle. Dette bruges normalt til midlertidig datalagring og kan bruges i stedet for SQL-tabeller for at undgå netværkstrafik og disklagring, der kræves af SQL-tabeller.
Da de associerende arrays ikke gemmer vedvarende data, kan de ikke bruges med SQL-sætninger som SELECT og INSERT. De kan dog gøres uendelige til en session i databasen ved at erklære deres datatype som en pakke og definere dem inde i pakkeens krop.
Syntaks for indeks-efter-tabellen:
TYPE type IS TABLE OF element (NOT NULL) INDEX BY (BINARY_INTEGER | PLS_INTEGER | VARCHAR2(size)); INDEX BY key;
Her, den 'nøgle' er numerisk. Det kan være enten BINARY_INTEGER eller PLS_INTEGER. Dens datatype kan være varchar, varchar2, lang eller streng. Den varchar-baserede nøgle skal nævnes med længde.
'element' er datatypen.
'størrelse' er det maksimale antal elementer. Det er et positivt heltal.
'type' er typespecifikatoren.
Kodeimplementering med indeks-efter-tabellen:
DECLARE TYPE age IS TABLE OF NUMBER INDEX BY VARCHAR(25); age_empl age; employee VARCHAR(25); BEGIN -- adding employee details to the table age_empl('Sam') := 30; age_empl('Venu') := 35; -- printing the table contents in the console employee := age_empl.FIRST; WHILE employee IS NOT null LOOP dbms_output.put_line ('Employee name is ' || employee || ' and age is ' || TO_CHAR(age_empl(employee))); employee := age_empl.NEXT(employee); END LOOP; END; /
Output af ovenstående kode skal være:
Varianter i PL / SQL
Varrays gemmer et fast antal elementer og er som et endimensionelt array. Antallet af elementer kan dog ændres ved kørsel. Det er et sammenhængende sæt af elementer af lignende datatyper. Det kan gemmes i en databasetabel, der kan håndteres ved hjælp af SQL-udsagn. Men processen er ikke så let og fleksibel som i en indlejret tabel.
Den maksimale størrelse af Varray er defineret i dens typedefinition. Det har et efter hinanden hukommelsesarrangement, der begynder med 1 abonnement og den laveste placeringsadresse peger på startelementet og den højeste placeringsadressepunkt til slutelementet. Alle elementerne i et Varray er identificeret med et indeks.
Denne type samling har numerisk abonnement og har tætte egenskaber. Arrayelementerne kan således ikke slettes imellem. Enten skal hele Varray slettes, eller dens ende kan trimmes. På grund af dens tætte egenskaber har den mindre fleksibilitet i brugen.
Varray kan oprettes enten inden for en PL / SQL-blok eller på skema niveau. Det behandles som et databaseobjekt, der er tilgængeligt i databasen eller i et underprogram. Varray bruges oftere, når størrelsen på arrayet er kendt for os. Det skal initialiseres, inden det bruges, og det kan initialiseres ved hjælp af en konstruktør. Dens værdi er NULL, når deklareres og skal initialiseres, før der refereres til dens elementer.
Syntaks for Varray:
TYPE <> IS VARYING ARRAY (<>) OF <> (NOT NULL);
Her,
'type' er typespecifikatoren.
'element' er datatypen.
'størrelse' er det maksimale antal elementer i en matrix. Det er et positivt heltal.
Erklæring og initialisering af variabelvariabler
Efter at have oprettet et Varray kan vi erklære det på den måde, der er beskrevet nedenfor:
Syntaks:
name type_n (:= type_n(...));
Her,
'navn' er Varray-navnet.
'Type_n' er typen af Varray.
'Type_n (...)' er konstruktøren af typen Varray. Argumentlisterne er nævnt af en kommaseparator og af typen Varray.
Vi er nødt til at initialisere en Varray-variabel, før vi bruger den, ellers giver den uinitialiseret samlingsfejl. Initialiseringen sker på den måde, der er beskrevet nedenfor.
Syntaks:
name type_n := type_n();
Dette initialiserer variablen med nul elementer. For at udfylde elementer i variabelvariablerne syntaksen er:
name type_n := type_n(e1, e2, ...);
Adgang til Elements Of Varray
Du kan få adgang til elementerne ved nedenstående proces:
navn (m); hvor m er elementindekset, der starter med 1 og slutter med det maksimale antal af elementerne af typen Varray. Hvis m er uden for området 1 og det maksimale antal af antal elementer, SUBSCRIPT_BEYOND_COUNT undtagelse kastes af PL / SQL.
Størrelsen på Varray kan ændres ved hjælp af ALTER-erklæringen.
Kodeimplementering med ALTER.
CREATE Or REPLACE TYPE names AS VARRAY(2) OF VARCHAR(5); /
Output af ovenstående kode skal være.
Jeg har brug for en ny e-mail-udbyder
Kodeimplementering med Varray:
DECLARE type countrynames IS VARRAY(3) OF VARCHAR2(50); type currency IS VARRAY(3) OF VARCHAR2(15); country countrynames; cur currency; addition integer; BEGIN -- adding country and its currency to the table country := countrynames('INDIA', 'USA', 'UK'); cur:= currency('INR', 'DOLLAR', 'POUND'); -- returns count of number of countries in varray addition := country.count; -- printing the content to the console dbms_output.put_line('Total Number of countries : '|| addition); FOR i in 1 .. addition LOOP dbms_output.put_line('Country: ' || country(i) || ' ,Currency : ' || cur(i)); END LOOP; END; /
Output af ovenstående kode skal være:
Forskelle mellem Varrays og indlejrede tabeller
Forskellene er som følger:
- Mens vi arbejder på et scenarie, hvor antallet af elementer er kendt, og de er arrangeret i rækkefølge, bruges Varrays generelt. Et Varray, der er gemt i en database, opretholder sine abonnementer og sekvens. Det vedligeholdes altid som et enkelt objekt. Mens de indlejrede tabeller bruges, når antallet af elementer ikke er begrænset.
- Den indlejrede tabel har sparsomme egenskaber, der gør det muligt at fjerne ethvert element fra enhver position og ikke altid fra slutningen. Rækkefølgen og abonnementet på en indlejret tabel opretholdes ikke, når den er gemt i databasen. Elementerne i Varray opretholdes altid i rækkefølge.
Forskelle mellem associerede arrays og indlejrede tabeller
Forskellene er som følger:
- Indlejrede tabeller kan gemmes i en kolonne i databasen, men associerende arrays er det ikke. De indlejrede tabeller opretholder korrekte dataforhold, der lagres vedvarende.
- De associerende arrays er gode til små opslagstabeller, hvor samlingen kan bygges i hukommelsen, hver gang en pakke initialiseres eller en procedure kaldes. De er et godt valg, når størrelsen ikke er kendt på forhånd. Indeksværdierne for et associerende array er fleksible, da abonnementerne for dette array ikke er i rækkefølge eller kan være negative eller en streng i stedet for et tal.
Ofte stillede spørgsmål og svar
Q # 1) Hvorfor bruger vi samlinger i PL / SQL?
Svar: Der er tre typer samlinger - Indlejrede tabeller, associerede arrays og Varrays. De indlejrede tabeller kan gemme et tilfældigt antal elementer. Varianter kan gemme et fast antal elementer, og de associerende arrays giver os mulighed for at søge i elementer med tilfældige tal og strenge.
Q # 2) Hvad er den indlejrede tabel i PL / SQL?
Svar: En indlejret tabel har 1 dimensionel karakter, og dens størrelse forbliver ikke fast. De kan tilgås i SQL- og PL / SQL-blokke. Det kan bruges i poster, objektdefinitioner og tabeller.
Spørgsmål nr. 3) Hvad er en bulkindsamling i Oracle PL / SQL?
Svar: En bulkindsamling er en metode til at hente data, når PL / SQL-motoren informerer SQL-motoren om at akkumulere flere rækker på én gang og gemme dem i en samling.
Spørgsmål nr. 4) Hvorfor er bulkindsamling hurtigere i Oracle?
Svar: Den samlede indsamling forbedrer ydeevnen ved at skære ned i interaktionen mellem PL / SQL-motoren og databasen.
Spørgsmål nr. 5) Hvad er Varray i PL / SQL?
Svar: Det er en PL / SQL datastruktur, der bruges til at gemme en homogen samling af elementer af samme datatype i en sekvens. Det bruges mest til at indeholde et ordnet datasæt.
Q # 6) Kan vi slette element fra Varray i Oracle?
Svar: Vi kan ikke ændre eller slette elementer i et Varray ved hjælp af SQL-sætninger direkte. Vi er nødt til at vælge Varray fra tabellen, ændre den i PL / SQL og derefter ændre tabellen og gemme den i et nyt Varray.
Q # 7) Hvad er forskellen mellem det indlejrede bord og Varray?
Svar: Forskellene er anført nedenfor:
- Vi tager Varray, når antallet af elementer er kendt fra før. Denne begrænsning er ikke mulig i indlejrede tabeller.
- I Varray bruges elementerne i rækkefølge. Det indlejrede bord har både tætte og sparsomme egenskaber.
- Elementerne bestilles altid i Varray. Elementerne kan eller ikke være i orden i den indlejrede tabel.
Konklusion
I denne vejledning har vi detaljeret diskuteret nogle af de grundlæggende begreber i PL / SQL, der er vigtige for at udvikle viden om det.
Vi har dækket nedenstående emner:
- Grundlæggende forståelse af PL SQL-samlinger (metoder og undtagelser).
- Varianter.
- Indlejrede tabeller
- Indeks-ved-tabeller
<< PREV Tutorial | NÆSTE vejledning >>
Anbefalet læsning
- Array-datatyper - int Array, Double array, Array of Strings Etc.
- Java Array - Hvordan udskrives elementer af en matrix i Java?
- PL SQL-vejledning til begyndere med eksempler Hvad er PL / SQL
- Java Array - Erklære, oprette og initialisere en matrix i Java
- Java Array Length Tutorial med kodeeksempler
- SQL vs NoSQL Præcise forskelle og vide, hvornår man skal bruge NoSQL og SQL
- Forskellen mellem SQL Vs MySQL Vs SQL Server (med eksempler)
- JUnit 5 nestet klasse: @ nestet tutorial med eksempler