pl sql collections nested table
Leer de basisprincipes van PL SQL-verzamelingen, verzamelingsmethoden, varray, geneste tabel en associatieve array met behulp van codevoorbeelden:
In de PL / SQL-subprogramma's tutorial van de PL / SQL-reeks hebben we geleerd over procedures en functies, verschillende methoden voor het doorgeven van parameters en hoe u procedures en functies in PL / SQL kunt maken / verwijderen.
In dit artikel bespreken we de PL SQL-verzamelingen en gerelateerde concepten. We zullen ook het concept van Varrays, geneste tabellen en index-by-tabellen uitleggen die beschikbaar zijn in PL / SQL.
Bovendien zullen we enkele van de ingebouwde verzamelingsuitzonderingen en verzamelingsmethoden onderzoeken.
Wat je leert:
- PL SQL-verzamelingen
- Geneste tabellen in PL / SQL
- Associatieve array of index-by-tabellen
- Varrays in PL / SQL
- Gevolgtrekking
PL SQL-verzamelingen
Een verzameling is een groep elementen van homogene gegevenstypen. Het omvat doorgaans arrays, lijsten, sets, enzovoort. Elk van de elementen heeft een bepaald subscript dat zijn positie weergeeft.
PL SQL-verzamelingen zijn van de volgende typen:
- Associatieve Array / Index-by-tabellen
- Geneste tabellen.
- Varrays.
PL SQL-collecties worden over het algemeen gebruikt voor opslag en manipulatie van grote hoeveelheden gegevens, met behulp van het trefwoord BULK COLLECT in Oracle.
Verzamelingsmethoden
Pl / SQL heeft een aantal ingebouwde methoden onder verzameling die hieronder worden vermeld.
Sl. Nee. | Naam | Beschrijvingen |
---|---|---|
7 | volgende (m) | Geeft de index die de mth-index opvolgt. |
1 | tellen | Geeft het aantal elementen in de collectie weer. |
twee | begrenzing | Verifieert de grootte van de collectie. |
3 | bestaat (m) | Geeft true terug als het m -de element aanwezig in de verzameling else false retourneert. |
4 | eerste | Geeft het startindexnummer in de verzameling met een integer-subscript. |
5 | laatste | Geeft het eindindexnummer in de verzameling met een integer-subscript. |
6 | uitbreiden | Voegt een NULL-element toe aan het einde van de verzameling. |
8 | voorafgaand (m) | Geeft de index die voorafgaat aan m index. |
9 | trimmen | Verwijdert een element uit het einde van de verzameling. |
10 | trim (m) | Verwijdert m elementen uit het einde van de verzameling. |
elf | verwijderen | Verwijdert alle elementen uit de verzameling en stelt het aantal in op 0. |
12 | verwijderen (m) | Verwijdert het mth-element uit de verzameling. Als het mth-element NULL is, wordt er geen actie uitgevoerd. |
13 | verwijderen (m, k) | Verwijdert element van positie mth naar kth. |
14 | verlengen (m) | Voegt een m-element toe aan het einde van de verzameling. |
vijftien | verlengen (m, k) | Voegt m kopieën van het kth-element toe aan het einde van de verzameling. |
Uitzonderingen voor verzameling
Enkele van de meest voorkomende uitzonderingen voor het verzamelen zijn als volgt:
- VALUE_ERROR: Deze uitzondering treedt op als een subscript niet kan worden geconverteerd naar het sleuteltype of NULL is. Deze uitzondering treedt normaal gesproken op als een sleutel van het type PLS_INTEGER bereik is en het subscript buiten dit bereik valt.
- GEEN DATA GEVONDEN: Deze uitzondering wordt gegenereerd door PL / SQL als een SELECT-instructie geen rijen ophaalt of als een programma verwijst naar een element dat is verwijderd in een geneste tabel. Deze uitzondering kan ook worden veroorzaakt door een element dat niet is geïnitialiseerd in een index-by-tabel.
- COLLECTION_IS_NULL: Deze uitzondering wordt gegenereerd door PL / SQL als de verzameling standaard NULL is.
- SUBSCRIPT_BEYOND_COUNT: Deze uitzondering wordt gegenereerd wanneer een subscript meer is dan het totale aantal elementen in de verzameling.
- SUBSCRIPT_OUTSIDE_LIMIT: Deze uitzondering wordt gegenereerd wanneer een subscript buiten het drempelbereik valt.
Geneste tabellen in PL / SQL
De geneste tabellen zijn als een databasetabel met één kolom of een 1-dimensionale array waarvan de array-grootte dynamisch is. Het subscript is van numeriek type. We kunnen de geneste tabel in een variabele krijgen door de rijen een subscript te geven dat begint met 1. Deze functie maakt het vergelijkbaar van aard als een array.
Een geneste tabel kan in een kolom van een database worden bewaard. Het kan ook worden gebruikt voor het manipuleren van SQL-bewerkingen door tabellen samen te voegen. Omdat het een soort dynamische array is, kan de bovengrens elke grootte hebben.
Een geneste tabel kan zowel dichte als spaarzame verzamelingskenmerken hebben, wat betekent dat elk element willekeurig kan worden verwijderd (waardoor het spaarzaam wordt) met behulp van de DELETE-procedure. Het verwijderen van gegevens veroorzaakt een discontinuïteit in de index, maar de functie NEXT helpt om naar de volgende abonnementen te herhalen. Omdat de gegevens worden opgeslagen in de vorm van een tabel, kunnen ze worden opgehaald met behulp van SELECT-instructies.
Een geneste tabel kan worden gebouwd op schemaniveau of in PL / SQL-blok. Het is als een databaseobject dat toegankelijk is binnen de database of het subprogramma.
De verschillen tussen matrix en geneste tabel worden hieronder vermeld:
- De grootte van de geneste tabellen kan dynamisch worden vergroot. De bovengrens van een array ligt vast, maar is niet vastgesteld voor geneste tabellen.
- De array heeft opeenvolgende subscripts waardoor deze compact is. Een geneste tabel is echter compact op het moment dat deze wordt gemaakt, maar wordt schaars zodra de elementen tussendoor worden verwijderd.
Syntaxis van de geneste tabel:
Hier, 'type' is de typeaanduiding. 'element' is het gegevenstype.
Code-implementatie met de geneste tabel:
De uitvoer van de bovenstaande code moet zijn:
Associatieve array of index-by-tabellen
De index-by-tabel wordt gewoonlijk de associatieve array genoemd. Qua structuur zijn zowel de index-by-tabel als de geneste tabellen vergelijkbaar en hebben ze een subscript om toegang te krijgen tot de elementen.
Een associatieve array wordt weergegeven door een sleutel / waarde-paar. Elk van de unieke sleutels wordt gebruikt om de waarde in de array te identificeren. Het gegevenstype van de sleutel kan een tekenreeks of een geheel getal zijn dat is gedefinieerd tijdens het maken ervan. Een sleutel wordt aan de index-by-tabel toegevoegd door simpelweg voor de eerste keer een waarde toe te kennen. Om dezelfde invoer te wijzigen, moeten we dezelfde sleutel gebruiken.
De sleutel moet uniek zijn, hetzij als primaire sleutel in een tabel, hetzij door strings te combineren om een unieke waarde te ontwikkelen. Dit type verzameling heeft een matrixgrootte die dynamisch is en ofwel schaarse ofwel compacte kenmerken heeft. Een verschil tussen de index-by-tabel en de geneste tabel is dat de eerste niet kan worden opgeslagen in de kolom van de database, maar de geneste tabel kan worden opgeslagen.
De associatieve arrays zorgen voor eenvoudig onderhoud van subscript en worden gemaakt binnen een PL / SQL-blok. Het is als een SQL-tabel waarin waarden worden verkregen met behulp van de primaire sleutel. Dit wordt over het algemeen gebruikt voor tijdelijke gegevensopslag en kan worden gebruikt in plaats van SQL-tabellen om netwerkverkeer en schijfopslag te vermijden die vereist zijn voor SQL-tabellen.
Omdat de associatieve arrays geen persistente gegevens opslaan, kunnen ze niet worden gebruikt met SQL-instructies zoals SELECT en INSERT. Ze kunnen echter oneindig worden gemaakt voor een sessie van de database door hun gegevenstype als een pakket te declareren en ze in de body van het pakket te definiëren.
Syntaxis van de index-by-tabel:
Hier de 'sleutel' is numeriek. Het kan BINARY_INTEGER of PLS_INTEGER zijn. Het datatype kan varchar, varchar2, long of string zijn. De op varchar gebaseerde sleutel moet worden vermeld met lengte.
'element' is het gegevenstype.
'grootte' is het maximale aantal elementen. Het is een positief geheel getal.
'type' is de typeaanduiding.
Code-implementatie met de index-by-tabel:
De uitvoer van de bovenstaande code moet zijn:
Varrays in PL / SQL
De varrays slaan een vast aantal elementen op en zijn als een eendimensionale array. Het aantal elementen kan echter tijdens runtime worden gewijzigd. Het is een opeenvolgende set elementen van vergelijkbare gegevenstypen. Het kan worden opgeslagen in een databasetabel die kan worden afgehandeld met behulp van SQL-instructies. Maar het proces is niet zo eenvoudig en flexibel als in een geneste tabel.
De maximale grootte van Varray wordt gedefinieerd in de typedefinitie. Het heeft een een na de ander geheugenopstelling beginnend met 1 subscript en het laagste locatieadres wijst naar het startelement en het hoogste locatieadres verwijst naar het eindelement. Alle elementen van een Varray worden aangeduid met een index.
Dit type verzameling heeft een numeriek subscript en heeft compacte kenmerken. De array-elementen kunnen dus tussendoor niet worden verwijderd. Ofwel moet de hele varray worden verwijderd of het uiteinde kan worden bijgesneden. Vanwege zijn dichte eigenschappen heeft het minder gebruiksflexibiliteit.
De varray kan worden gemaakt binnen een PL / SQL-blok of op schemaniveau. Het wordt behandeld als een databaseobject waartoe toegang kan worden verkregen binnen de database of binnen een subprogramma. Varray wordt vaker gebruikt als de grootte van de array bij ons bekend is. Het moet worden geïnitialiseerd voordat u ze gebruikt en het kan worden geïnitialiseerd met behulp van een constructor. Zijn waarde is NULL wanneer hij wordt gedeclareerd en moet worden geïnitialiseerd voordat naar zijn elementen wordt verwezen.
Syntaxis van Varray:
Hier,
'type' is de typeaanduiding.
'element' is het gegevenstype.
'grootte' is het maximale aantal elementen in een array. Het is een positief geheel getal.
Declaratie en initialisatie van variabelen
Nadat we een varray hebben gemaakt, kunnen we deze op de hieronder beschreven manier declareren:
Syntaxis:
Hier,
'naam' is de naam van Varray.
‘Type_n’ is het type Varray.
‘Type_n (…)’ is de constructor van het type Varray. De argumentenlijsten worden vermeld met een komma-scheidingsteken en zijn van het type Varray.
We moeten een Varray-variabele initialiseren voordat we deze gebruiken, anders geeft het een niet-geïnitialiseerde verzamelingsfout. De initialisatie gebeurt op de hieronder beschreven manier.
Syntaxis:
Dit zal de variabele initialiseren met nul elementen. Om elementen in de varray-variabelen te vullen, de syntaxis is:
Toegang tot Elements Of Varray
De elementen zijn toegankelijk via het hieronder beschreven proces:
naam (m); waarbij m de elementindex is die begint met 1 en eindigt met de maximale telling van het aantal elementen van het type Varray. In het geval dat m buiten het bereik van 1 en het maximale aantal elementen valt, SUBSCRIPT_BEYOND_COUNT uitzondering wordt gegenereerd door PL / SQL.
De grootte van Varray kan worden gewijzigd met behulp van de ALTER-instructie.
Code-implementatie met ALTER.
De uitvoer van de bovenstaande code zou moeten zijn.
oracle pl sql interviewvragen voor ervaren
Code-implementatie met Varray:
De uitvoer van de bovenstaande code moet zijn:
Verschillen tussen varrays en geneste tabellen
De verschillen zijn als volgt:
- Terwijl we werken aan een scenario waarin het aantal elementen bekend is en ze opeenvolgend zijn gerangschikt, worden over het algemeen Varrays gebruikt. Een varray die in een database is opgeslagen, behoudt zijn subscripts en volgorde. Het wordt altijd als een enkel object onderhouden. Terwijl de geneste tabellen worden gebruikt wanneer het tellen van het aantal elementen niet beperkt is.
- De geneste tabel heeft schaarse kenmerken waardoor het elk element van elke positie kan verwijderen en niet altijd van het einde. De volgorde en het subscript van een geneste tabel blijven niet behouden wanneer deze in de database wordt opgeslagen. De elementen van Varray worden altijd op volgorde onderhouden.
Verschillen tussen associatieve arrays en geneste tabellen
De verschillen zijn als volgt:
- Geneste tabellen kunnen in een kolom van de database worden opgeslagen, maar associatieve arrays zijn dat niet. De geneste tabellen behouden de juiste gegevensrelaties die permanent worden opgeslagen.
- De associatieve arrays zijn goed voor kleine opzoektabellen waar de verzameling in het geheugen kan worden opgebouwd telkens wanneer een pakket wordt geïnitialiseerd of een procedure wordt aangeroepen. Ze zijn een goede keuze als de maat niet van tevoren bekend is. De indexwaarden van een associatieve array zijn flexibel omdat de subscripts van deze array niet op volgorde staan of negatief kunnen zijn of een string in plaats van een getal.
Veelgestelde vragen en antwoorden
V # 1) Waarom gebruiken we verzamelingen in PL / SQL?
Antwoord: Er zijn drie soorten verzamelingen: geneste tabellen, associatieve arrays en varrays. De geneste tabellen kunnen een willekeurig aantal elementen opslaan. Varrays kunnen een vast aantal elementen opslaan en de associatieve arrays stellen ons in staat om elementen met willekeurige getallen en strings te zoeken.
Vraag 2) Wat is de geneste tabel in PL / SQL?
Antwoord: Een geneste tabel is 1-dimensionaal van aard en de grootte blijft niet vast. Ze zijn toegankelijk in SQL- en PL / SQL-blokken. Het kan worden gebruikt in records, objectdefinities en tabellen.
V # 3) Wat is een bulkverzameling in Oracle PL / SQL?
Antwoord: Een bulkverzameling is een methode om gegevens op te halen wanneer de PL / SQL-engine de SQL-engine informeert om meerdere rijen tegelijk te verzamelen en in een verzameling op te slaan.
V # 4) Waarom is bulkverzameling sneller in Oracle?
Antwoord: De bulkverzameling verbetert de prestaties door de interactie tussen de PL / SQL-engine en de database te verminderen.
V # 5) Wat is Varray in PL / SQL?
Antwoord: Het is een PL / SQL-gegevensstructuur die wordt gebruikt om een homogene verzameling elementen van hetzelfde gegevenstype in een reeks op te slaan. Het wordt meestal gebruikt om een geordende set gegevens op te slaan.
V # 6) Kunnen we een element verwijderen uit Varray in Oracle?
Antwoord: We kunnen elementen in een Varray niet rechtstreeks met behulp van SQL-instructies wijzigen of verwijderen. We moeten de Varray uit de tabel selecteren, deze wijzigen in PL / SQL, en dan de tabel aanpassen en opslaan in een nieuwe Varray.
V # 7) Wat is het verschil tussen de geneste tabel en de varray?
Antwoord: De verschillen staan hieronder vermeld:
- We nemen de Varray als het aantal elementen van tevoren bekend is. Deze beperking is niet mogelijk in geneste tabellen.
- In Varray worden de elementen op volgorde gebruikt. De geneste tabel heeft zowel compacte als schaarse kenmerken.
- De elementen zijn altijd in Varray geordend. De elementen kunnen al dan niet in orde zijn in de geneste tabel.
Gevolgtrekking
In deze tutorial hebben we in detail enkele basisconcepten van PL / SQL besproken die essentieel zijn bij het ontwikkelen van kennis erover.
We hebben de volgende onderwerpen behandeld:
- Basiskennis van PL SQL-verzamelingen (methoden en uitzonderingen).
- Varrays.
- Geneste tabellen
- Index-door tabellen
<< PREV Tutorial VOLGENDE Tutorial >>
Aanbevolen literatuur
- Array-gegevenstypen - int Array, Double array, Array of Strings Etc.
- Java Array - Hoe elementen van een array in Java af te drukken?
- PL SQL-zelfstudie voor beginners met voorbeelden | Wat is PL / SQL
- Java Array - Declareer, creëer en initialiseer een array in Java
- Zelfstudie over Java-array-lengte met codevoorbeelden
- SQL versus NoSQL Exacte verschillen en weet wanneer u NoSQL en SQL moet gebruiken
- Verschil tussen SQL versus MySQL versus SQL Server (met voorbeelden)
- JUnit 5 Geneste klasse: @Nested Tutorial met voorbeelden