pl sql collections nested table
Lær det grunnleggende om PL SQL-samlinger, samlingsmetoder, Varray, nestet tabell og tilknyttet matrise ved hjelp av kodeeksempler:
I PL / SQL-underprogrammer opplæring av PL / SQL-serien , lærte vi om prosedyrer og funksjoner, forskjellige parameteroverføringsmetoder, og hvordan du oppretter / sletter prosedyrer og funksjoner i PL / SQL.
I denne artikkelen vil vi diskutere PL SQL-samlinger og relaterte konsepter. Vi skal også forklare begrepet Varrays, nestede tabeller og index-by-tabeller som er tilgjengelige i PL / SQL.
Dessuten vil vi utforske noen av de innebygde unntakene for samlingen og samlingsmetodene.
Hva du vil lære:
- PL SQL-samlinger
- Nestede tabeller i PL / SQL
- Associative Array or Index-by Tables
- Varianter i PL / SQL
- Konklusjon
PL SQL-samlinger
En samling er en gruppe elementer av homogene datatyper. Den består vanligvis av matriser, lister, sett og så videre. Hvert av elementene har et bestemt abonnement som gjenspeiler dets posisjon.
PL SQL-samlinger er av følgende typer:
- Associative Array / Index-by tabeller
- Nestede bord.
- Varianter.
PL SQL-samlinger brukes vanligvis til lagring og manipulering av store deler av data, ved å bruke nøkkelordet BULK COLLECT i Oracle.
Samlingsmetoder
Pl / SQL har noen innebygde metoder under samling som er oppført nedenfor.
Sl. Nei. | Navn | Beskrivelser |
---|---|---|
7 | neste (m) | Gir indeksen som etterfølger mnd-indeksen. |
1 | telle | Gir antall elementer som er til stede i samlingen. |
to | grense | Bekrefter samlingsstørrelsen. |
3 | eksisterer (m) | Returnerer sant hvis mth-elementet som er tilstede i samlingen ellers returnerer false. |
4 | først | Gir startindeksnummer i samling med heltalsskript. |
5 | siste | Gir sluttindeksnummer i samling med heltalsskript. |
6 | forlenge | Legger til NULL-element i slutten av samlingen. |
8 | forrige (m) | Gir indeksen som går foran m-indeksen. |
9 | listverk | Sletter et element fra slutten av samlingen. |
10 | trim (m) | Sletter m elementer fra slutten av samlingen. |
elleve | slett | Sletter alle elementene fra samlingen, og teller til 0. |
12 | slett (m) | Sletter mth-elementet fra samlingen, hvis mth-elementet er NULL, utføres ingen handling. |
1. 3 | slett (m, k) | Sletter element fra mth til kth posisjon. |
14 | utvide (m) | Legger til m-element i samlingsslutt. |
femten | utvide (m, k) | Legger til m kopier av kth-elementet til slutten av samlingen. |
Samlings unntak
Noen av de vanligste unntakene for samlingen er som følger:
- VALUE_ERROR: Dette unntaket blir kastet hvis et abonnement ikke kan konverteres til nøkkeltypen eller er NULL. Dette unntaket heves normalt hvis en nøkkel er av typen PLS_INTEGER-område og abonnementet ligger utenfor dette området.
- INGEN DATA FUNNET: Dette unntaket blir kastet av PL / SQL hvis en SELECT-setning ikke henter noen rader eller et program peker på et element som blir slettet i en nestet tabell. Dette unntaket kan også heves med et element som ikke er initialisert i en indeks for tabell.
- COLLECTION_IS_NULL: Dette unntaket blir kastet av PL / SQL hvis samlingen er NULL som standard.
- SUBSCRIPT_BEYOND_COUNT: Dette unntaket blir kastet når et abonnement er mer enn det totale antallet antall elementer i samlingen.
- SUBSCRIPT_OUTSIDE_LIMIT: Dette unntaket blir kastet når et abonnement er utenfor terskelområdet.
Nestede tabeller i PL / SQL
De nestede tabellene er som en enkelt kolonnedatabasetabell eller en 1-dimensjonal matrise der matrisestørrelsen er dynamisk. Dens abonnement er av numerisk type. Vi kan få den nestede tabellen til en variabel ved å gi radene et abonnement som begynner med 1. Denne funksjonen gjør den lik i naturen som en matrise.
En nestet tabell kan holdes i en kolonne i en database. Den kan også brukes til å manipulere SQL-operasjoner ved å bli med i tabeller. Siden det er som et dynamisk utvalg, kan den øvre grensen være av hvilken som helst størrelse.
En nestet tabell kan ha både tette og sparsomme samleegenskaper, noe som betyr at ethvert element kan slettes tilfeldig (gjør det sparsomt) ved hjelp av SLETT-prosedyren. Sletting av data fører til diskontinuitet i indeksen, men NEXT-funksjonen hjelper til med å gjenta til neste abonnement. Siden dataene er lagret i form av en tabell, kan de hentes ved hjelp av SELECT-setninger.
En nestet tabell kan bygges på skjemanivå eller i PL / SQL-blokk. Det er som et databaseobjekt som er tilgjengelig i databasen eller underprogrammet.
Forskjellene mellom tabellen Array og Nested er oppført nedenfor:
- Størrelsen på de nestede tabellene kan økes dynamisk. Den øvre grensen for en matrise er fast, men den er ikke fast for nestede tabeller.
- Matrisen har påfølgende abonnementer som gjør den tett. Imidlertid er en nestet tabell tett på tidspunktet for opprettelsen, men blir sparsom når elementene er slettet i mellom.
Syntaks for det nestede bordet:
TYPE <> IS TABLE OF <> [NOT NULL];
Her, 'type' er typespesifikatoren. 'element' er datatypen.
Kodeimplementering med den nestede tabellen:
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;
Resultatet av koden ovenfor skal være:
Associative Array or Index-by Tables
Index-by-tabellen kalles ofte assosiativ matrise. Når det gjelder struktur, er både indeks-etter-tabellen og nestede tabeller like og har abonnement for å få tilgang til elementene.
En assosiativ matrise er representert av et nøkkelverdipar. Hver av de unike tastene brukes til å identifisere verdien i matrisen. Datatypen til nøkkelen kan være en streng eller et helt tall som er definert mens du oppretter den. En nøkkel legges til i indeks-for-tabellen ved å tilordne en verdi for første gang. For å endre den samme oppføringen, må vi bruke samme nøkkel.
Nøkkelen skal være unik, enten som en primærnøkkel i en tabell eller ved å kombinere strenger for å utvikle unik verdi. Denne typen samling har en matrisestørrelse som er dynamisk og har enten sparsomme eller tette egenskaper. En forskjell mellom indeks-etter-tabellen og den nestede tabellen er at førstnevnte ikke kan lagres i kolonnen i databasen, men den nestede tabellen kan lagres.
Assosiative matriser gir enkelt vedlikehold av abonnement og opprettes i en PL / SQL-blokk. Det er som en SQL-tabell der verdier oppnås ved hjelp av primærnøkkelen. Dette brukes vanligvis til midlertidig datalagring og kan brukes i stedet for SQL-tabeller for å unngå nettverkstrafikk og disklagring som kreves av SQL-tabeller.
Ettersom de tilknyttede matriser ikke lagrer vedvarende data, kan de ikke brukes med SQL-setninger som SELECT og INSERT. Imidlertid kan de gjøres uendelige for en økt i databasen ved å erklære datatypen som en pakke og definere dem inne i pakken.
Syntaks for indeks-etter-tabellen:
TYPE type IS TABLE OF element [NOT NULL] INDEX BY [BINARY_INTEGER | PLS_INTEGER | VARCHAR2(size)]; INDEX BY key;
Her, den 'nøkkel' er numerisk. Det kan være enten BINARY_INTEGER eller PLS_INTEGER. Datatypen kan være varchar, varchar2, lang eller streng. Den varchar-baserte nøkkelen bør nevnes med lengde.
'element' er datatypen.
'størrelse' er det maksimale antall elementer. Det er et positivt heltall.
'type' er typespesifikatoren.
Kodeimplementering med indeks-etter-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; /
Resultatet av koden ovenfor skal være:
Varianter i PL / SQL
Varrays lagrer et fast antall elementer og er som et endimensjonalt utvalg. Antall elementer kan imidlertid endres ved kjøretid. Det er et påfølgende sett med elementer av lignende datatyper. Den kan lagres i en databasetabell som kan håndteres ved hjelp av SQL-setninger. Men prosessen er ikke så enkel og fleksibel som i et nestet bord.
Maksimal størrelse på Varray er definert i typedefinisjonen. Den har den ene etter den andre minnearrangementet som begynner med ett abonnement og den laveste plasseringsadressen peker til startelementet og den høyeste plasseringsadressen peker til sluttelementet. Alle elementene i et Varray er identifisert med en indeks.
Denne typen samling har numerisk abonnement og har tette egenskaper. Dermed kan ikke matriseelementene slettes i mellom. Enten skal hele Varray slettes, eller så kan den beskjæres. På grunn av dens tette egenskaper har den mindre fleksibilitet i bruken.
Varray kan opprettes enten innenfor en PL / SQL-blokk eller på skjemanivå. Det behandles som et databaseobjekt som er tilgjengelig i databasen eller i et underprogram. Varray brukes oftere når størrelsen på matrisen er kjent for oss. Det bør initialiseres før du bruker dem, og det kan initialiseres ved hjelp av en konstruktør. Verdien er NULL når deklarert og bør initialiseres før det refereres til elementene.
Syntaks for Varray:
TYPE <> IS VARYING ARRAY (<>) OF <> [NOT NULL];
Her,
'type' er typespesifikatoren.
'element' er datatypen.
'størrelse' er det maksimale antallet elementer i en matrise. Det er et positivt heltall.
Deklarasjon og initialisering av variabler
Etter å ha opprettet et Varray kan vi erklære det på den måten som er beskrevet nedenfor:
Syntaks:
name type_n [:= type_n(...)];
Her,
'Navn' er Varray-navnet.
‘Type_n’ er typen Varray.
‘Type_n (…)’ er konstruktøren av typen Varray. Argumentlistene er nevnt av en kommaavskiller og av typen Varray.
Vi må initialisere en Varray-variabel før vi bruker den, ellers gir den uinitialisert samlingsfeil. Initialiseringen gjøres på den måten som er beskrevet nedenfor.
Syntaks:
name type_n := type_n();
Dette vil initialisere variabelen med null elementer. For å fylle ut elementer i variabelvariablene, syntaksen er:
name type_n := type_n(e1, e2, ...);
Få tilgang til Elements Of Varray
Elementene er tilgjengelige ved prosessen beskrevet nedenfor:
navn (m); hvor m er elementindeksen som starter med 1 og slutter med det maksimale antallet av antall elementer av typen Varray. I tilfelle m er utenfor området 1 og maksimalt antall antall elementer, SUBSCRIPT_BEYOND_COUNT unntak kastes av PL / SQL.
Størrelsen på Varray kan endres ved hjelp av ALTER-setningen.
Kodeimplementering med ALTER.
CREATE Or REPLACE TYPE names AS VARRAY(2) OF VARCHAR(5); /
Resultatet av ovennevnte kode skal være.
hvordan du bruker formørkelse for c
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; /
Resultatet av koden ovenfor skal være:
Forskjeller mellom varianter og nestede tabeller
Forskjellene er som følger:
- Mens vi arbeider med et scenario hvor antall elementer er kjent og de ordnes sekvensielt, brukes ofte Varrays. Et Varray som er lagret i en database opprettholder abonnementene og sekvensen. Det opprettholdes alltid som et enkelt objekt. Mens de nestede tabellene brukes når antallet ikke er begrenset.
- Den nestede tabellen har sparsomme egenskaper som gjør det mulig å fjerne ethvert element fra hvilken som helst posisjon og ikke alltid fra slutten. Rekkefølgen og abonnementet på en nestet tabell opprettholdes ikke når den lagres i databasen. Elementene i Varray opprettholdes alltid i rekkefølge.
Forskjeller mellom assosierende matriser og nestede tabeller
Forskjellene er som følger:
- Nestede tabeller kan lagres i en kolonne i databasen, men assosiative matriser er det ikke. De nestede tabellene opprettholder riktige dataforhold som lagres vedvarende.
- Assosiative matriser er bra for små oppslagstabeller der samlingen kan bygges i minnet hver gang en pakke initialiseres eller en prosedyre kalles. De er et godt valg når størrelsen ikke er kjent på forhånd. Indeksverdiene til en assosiativ matrise er fleksible siden abonnementene til denne matrisen ikke er i rekkefølge eller kan være negative eller en streng i stedet for et tall.
Ofte stilte spørsmål og svar
Q # 1) Hvorfor bruker vi samlinger i PL / SQL?
Svar: Det er tre typer samlinger - nestede tabeller, assosiative matriser og variasjoner. De nestede tabellene kan lagre et tilfeldig antall elementer. Matriser kan lagre et fast antall elementer, og de assosiative gruppene lar oss søke i elementer med tilfeldige tall og strenger.
Q # 2) Hva er den nestede tabellen i PL / SQL?
Svar: Et nestet bord har en dimensjonal natur og størrelsen forblir ikke fast. De er tilgjengelige i SQL- og PL / SQL-blokker. Den kan brukes i poster, objektdefinisjoner og tabeller.
Spørsmål 3) Hva er en massesamling i Oracle PL / SQL?
Svar: En bulkinnsamling er en metode for å hente data når PL / SQL-motoren informerer SQL-motoren om å samle flere rader samtidig og lagre dem i en samling.
Spørsmål nr. 4) Hvorfor er bulkinnsamlingen raskere i Oracle?
Svar: Massesamlingen forbedrer ytelsen ved å redusere samspillet mellom PL / SQL-motoren og databasen.
Q # 5) Hva er Varray i PL / SQL?
Svar: Det er en PL / SQL datastruktur som brukes til å lagre en homogen samling av elementer av samme datatype i en sekvens. Det brukes mest til å ha et bestilt datasett.
Sp # 6) Kan vi slette element fra Varray i Oracle?
Svar: Vi kan ikke endre eller slette elementer i et Varray direkte ved hjelp av SQL-setninger. Vi må velge Varray fra tabellen, endre den i PL / SQL, og deretter endre tabellen og lagre den i en ny Varray.
Q # 7) Hva er forskjellen mellom Nested Table og Varray?
Svar: Forskjellene er listet opp nedenfor:
- Vi tar Varray når antall elementer er kjent fra før. Denne begrensningen er ikke mulig i nestede tabeller.
- I Varray brukes elementene i rekkefølge. Det nestede bordet har både tette og sparsomme egenskaper.
- Elementene bestilles alltid i Varray. Elementene kan være eller ikke være i orden i den nestede tabellen.
Konklusjon
I denne opplæringen har vi diskutert i detalj noen av de grunnleggende konseptene til PL / SQL som er essensielle for å utvikle kunnskap om det.
Vi har dekket følgende emner listet opp nedenfor:
- Grunnleggende forståelse av PL SQL samlinger (metoder og unntak).
- Varianter.
- Nestede bord
- Indeks-etter-tabeller
<< PREV Tutorial | NESTE veiledning >>
Anbefalt lesing
- Array Data Typer - int Array, Double array, Array of Strings Etc.
- Java Array - Hvordan skrive ut elementer av en array i Java?
- PL SQL Tutorial for nybegynnere med eksempler Hva er PL / SQL
- Java Array - Erklære, opprette og initialisere en array i Java
- Java Array Length Tutorial med kodeeksempler
- SQL vs NoSQL Nøyaktige forskjeller og vet når du skal bruke NoSQL og SQL
- Forskjellen mellom SQL Vs MySQL Vs SQL Server (med eksempler)
- JUnit 5 nestet klasse: @ nestet veiledning med eksempler