pl sql collections nested table
Apreneu els conceptes bàsics de PL SQL Collections, Methods Collection, Varray, Nested table i Associative Array amb l'ajuda d'exemples de codi:
A la Subprogrames PL / SQL tutorial del Sèrie PL / SQL , vam aprendre sobre procediments i funcions, diferents mètodes de transferència de paràmetres i com crear / eliminar procediments i funcions a PL / SQL.
En aquest article, analitzarem les col·leccions PL SQL i conceptes relacionats. També explicarem el concepte de Varrays, taules imbricades i taules indexades per disponibles a PL / SQL.
A més, explorarem algunes de les excepcions i mètodes de col·lecció incorporats.
Què aprendreu:
- PL SQL Collections
- Taules imbricades a PL / SQL
- Taules de matrius o índex associatius
- Varrays a PL / SQL
- Conclusió
PL SQL Collections
Una col·lecció és un grup d'elements de tipus de dades homogenis. Generalment comprèn matrius, llistes, conjunts, etc. Cadascun dels elements té un subíndex particular que reflecteix la seva posició.
Les col·leccions PL SQL són dels tipus següents:
- Taules Associatives Array / Index-per
- Taules imbricades.
- Varrays.
Les col·leccions PL SQL s’utilitzen generalment per emmagatzemar i manipular grans trossos de dades, mitjançant la paraula clau BULK COLLECT a Oracle.
Mètodes de recollida
Pl / SQL té alguns mètodes integrats a la col·lecció que s’enumeren a continuació.
Sl. No. | Nom | Descripcions |
---|---|---|
7 | següent (m) | Proporciona l'índex que triomfa a l'índex mth. |
1 | comptar | Dóna el nombre d'elements presents a la col·lecció. |
2 | límit | Verifica la mida de la col·lecció. |
3 | existeix (m) | Retorna cert si l'element mth present a la col·lecció else torna fals. |
4 | primer | Dóna el número d'índex d'inici a la col·lecció amb un índex enter. |
5 | últim | Ofereix un número d'índex final a la col·lecció amb un índex enter. |
6 | estendre | Afegeix un element NULL al final de la col·lecció. |
8 | anterior (m) | Ofereix l’índex que precedeix l’índex m. |
9 | retallar | Suprimeix un element del final de la col·lecció. |
10 | retallar (m) | Suprimeix m elements del final de la col·lecció. |
11 | esborrar | Suprimeix tots els elements de la col·lecció, establint el recompte a 0. |
12 | esborrar (m) | Suprimeix l'element mth de la col·lecció, si l'element mth és NULL, no es realitza cap acció. |
13 | esborrar (m, k) | Elimina l'element de la posició mth a kth. |
14 | estendre (m) | Afegeix un element m al final de la col·lecció. |
15 | estendre (m, k) | Afegeix m còpies de l'element kth al final de la col·lecció. |
Excepcions de col·lecció
Algunes de les excepcions habituals de col·lecció són les següents:
- VALUE_ERROR: Aquesta excepció es produeix si un subíndex no es pot convertir al tipus de clau o és NUL. Aquesta excepció normalment es planteja si una clau és del tipus PLS_INTEGER i el subíndex resideix més enllà d’aquest interval.
- NO S'HAN TROBAT DADES: Aquesta excepció la genera PL / SQL si una sentència SELECT no obté cap fila o un programa apunta a un element que se suprimeix en una taula imbricada. Aquesta excepció també es pot plantejar mitjançant un element que no s'inicialitza en una taula índex per.
- COLLECTION_IS_NULL: PL / SQL genera aquesta excepció si la col·lecció és NULA per defecte.
- SUBSCRIPT_BEYOND_COUNT: Aquesta excepció es produeix quan un subíndex supera el recompte total del nombre d'elements de la col·lecció.
- SUBSCRIPT_OUTSIDE_LIMIT: Aquesta excepció es produeix quan un subíndex està més enllà de l'interval de llindar.
Taules imbricades a PL / SQL
Les taules imbricades són com una taula de base de dades de columna única o una matriu unidimensional on la mida de la matriu és dinàmica. El seu subíndex és de tipus numèric. Podem obtenir la taula imbricada en una variable donant a les files un subíndex que comença per 1. Aquesta característica la fa similar per naturalesa com una matriu.
Es pot mantenir una taula imbricada en una columna d'una base de dades. També es pot utilitzar per manipular operacions SQL unint taules. Com que és com una matriu dinàmica, el límit superior pot ser de qualsevol mida.
Una taula imbricada pot tenir característiques de col·lecció denses i escasses, cosa que significa que qualsevol element es pot esborrar aleatòriament (fent-lo escàs) amb l'ajut del procediment DELETE. La supressió de dades provoca una discontinuïtat a l'índex, però la funció NEXT ajuda a iterar als subíndexs següents. Atès que les dades s’emmagatzemen en forma de taula, es poden recuperar amb l’ajut d’instruccions SELECT.
Es pot construir una taula imbricada a nivell d'esquema o al bloc PL / SQL. És com un objecte de base de dades accessible a la base de dades o al subprograma.
A continuació es mostren les diferències entre la taula Array i la Nested:
- La mida de les taules imbricades es pot augmentar dinàmicament. El límit superior d'una matriu està fixat, però no es fixa per a les taules imbricades.
- La matriu té subíndexs consecutius, cosa que la fa densa. Tanmateix, una taula imbricada és densa en el moment de la creació, però es fa escassa un cop esborrats els elements.
Sintaxi de la taula imbricada:
TYPE <> IS TABLE OF <> (NOT NULL);
Aquí, 'Tipus' és l’especificador de tipus. 'Element' és el tipus de dades.
Implementació de codi amb la taula imbricada:
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;
La sortida del codi anterior hauria de ser:
Taules de matrius o índex associatius
La taula índex per s'anomena comunament matriu associativa. En termes d’estructura, tant la taula índex per taules com les taules imbricades són similars i tenen subíndex per accedir als elements.
Una matriu associativa es representa mitjançant un parell clau-valor. Cadascuna de les claus úniques s'utilitza per identificar el valor de la matriu. El tipus de dades de la clau pot ser una cadena o un enter definit durant la seva creació. S’afegeix una clau a la taula índex simplement assignant un valor per primera vegada. Per modificar la mateixa entrada, hem d’utilitzar la mateixa clau.
La clau ha de ser única, ja sigui com a clau primària en una taula o combinant cadenes per desenvolupar un valor únic. Aquest tipus de col·lecció té una mida de matriu que és dinàmica i té característiques escasses o denses. Una diferència entre la taula índex per taula i la taula imbricada és que la primera no es pot emmagatzemar a la columna de la base de dades, però es pot emmagatzemar la taula imbricada.
Les matrius associatives proporcionen un fàcil manteniment del subíndex i es creen dins d’un bloc PL / SQL. És com una taula SQL on s’obtenen valors amb l’ajut de la clau principal. Normalment s’utilitza per emmagatzemar dades temporals i es pot utilitzar en lloc de taules SQL per evitar el trànsit de xarxa i l’emmagatzematge en disc que requereixen les taules SQL.
Com que les matrius associatives no emmagatzemen dades persistents, no es poden utilitzar amb sentències SQL com SELECT i INSERT. Tot i això, es poden fer inacabables per a una sessió de la base de dades declarant el seu tipus de dades com a paquet i definint-los dins del cos del paquet.
Sintaxi de la taula índex per:
TYPE type IS TABLE OF element (NOT NULL) INDEX BY (BINARY_INTEGER | PLS_INTEGER | VARCHAR2(size)); INDEX BY key;
Aquí, el 'Clau' és numèric. Pot ser BINARY_INTEGER o PLS_INTEGER. El seu tipus de dades pot ser varchar, varchar2, long o string. La clau basada en varchar s'ha d'esmentar amb la longitud.
'Element' és el tipus de dades.
'Mida' és el nombre màxim d'elements. És un nombre enter positiu.
'Tipus' és l’especificador de tipus.
Implementació de codi amb la taula índex per:
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; /
La sortida del codi anterior hauria de ser:
Varrays a PL / SQL
Els Varrays emmagatzemen un nombre fix d’elements i són com una matriu unidimensional. No obstant això, el nombre d'elements es pot modificar en temps d'execució. És un conjunt consecutiu d'elements de tipus de dades similars. Es pot emmagatzemar en una taula de bases de dades que es pot gestionar amb l'ajut de sentències SQL. Però el procés no és tan fàcil i flexible com en una taula imbricada.
La mida màxima de Varray es defineix a la seva definició de tipus. Té una disposició de memòria una rere l’altra que comença amb 1 subíndex i l’adreça de ubicació més baixa apunta a l’element inicial i l’adreça de ubicació més alta apunta a l’element final. Tots els elements d’un Varray s’identifiquen amb un índex.
Aquest tipus de col·lecció té subíndex numèric i presenta característiques denses. Per tant, no es poden suprimir els elements de la matriu. O bé s'ha de suprimir tot el Varray o es pot retallar el seu final. A causa de les seves denses característiques, té menys flexibilitat d’ús.
El Varray es pot crear dins d'un bloc PL / SQL o bé a nivell d'esquema. Es tracta com un objecte de base de dades al qual es pot accedir dins de la base de dades o dins d’un subprograma. Varray s'utilitza amb més freqüència quan la mida de la matriu és coneguda per nosaltres. S’ha d’inicialitzar abans d’utilitzar-los i es pot inicialitzar amb l’ajut d’un constructor. El seu valor és NULL quan es declara i s’hauria d’inicialitzar abans de fer referència als seus elements.
Sintaxi de Varray:
TYPE <> IS VARYING ARRAY (<>) OF <> (NOT NULL);
Aquí,
'Tipus' és l’especificador de tipus.
'Element' és el tipus de dades.
'Mida' és el nombre màxim d'elements d'una matriu. És un nombre enter positiu.
Declaració i inicialització de les variables de Varray
Després de crear un Varray, el podem declarar de la manera que es descriu a continuació:
Sintaxi:
name type_n (:= type_n(...));
Aquí,
'nom' és el nom de Varray.
'Tipus_n' és el tipus de Varray.
'Tipus_n (...)' és el constructor del tipus Varray. Les llistes d'arguments són esmentades per un separador de comes i de tipus Varray.
Hem d'inicialitzar una variable Varray abans d'utilitzar-la, ja que dóna un error de col·lecció no inicialitzat. La inicialització es fa de la manera que es descriu a continuació.
Sintaxi:
name type_n := type_n();
Això inicialitzarà la variable amb zero elements. Per tal d'emplenar elements a les variables varray, la sintaxi és:
name type_n := type_n(e1, e2, ...);
Accés a Elements Of Varray
Es pot accedir als elements mitjançant el procés que es descriu a continuació:
nom (m); on m és l’índex d’elements que comença per 1 i finalitza amb el recompte màxim del nombre d’elements del tipus Varray. En el cas que m superi l'interval d'1 i el recompte màxim del nombre d'elements, SUBSCRIPT_BEYOND_COUNT PL / SQL genera una excepció.
La mida de Varray es pot modificar amb l'ajut de la sentència ALTER.
Implementació de codi amb ALTER.
CREATE Or REPLACE TYPE names AS VARRAY(2) OF VARCHAR(5); /
La sortida del codi anterior hauria de ser.
què és un fitxer .swf?
Implementació de codi amb 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; /
La sortida del codi anterior hauria de ser:
Diferències entre matrius i taules imbricades
Les diferències són les següents:
- Mentre treballem en un escenari en què es coneix el nombre d’elements i s’ordenen seqüencialment, s’utilitzen generalment Varrays. Un Varray que s’emmagatzema en una base de dades manté els seus subíndexs i seqüència. Sempre es manté com un sol objecte. Mentre que, les taules imbricades s'utilitzen quan el recompte del nombre d'elements no està restringit.
- La taula nidificada té característiques escasses que li permeten eliminar qualsevol element de qualsevol posició i no sempre des del final. L'ordre i el subíndex d'una taula imbricada no es mantenen quan s'emmagatzema a la base de dades. Els elements de Varray sempre es mantenen en seqüència.
Diferències entre matrius associatius i taules imbricades
Les diferències són les següents:
- Les taules imbricades es poden emmagatzemar en una columna de la base de dades, però no hi ha matrius associatives. Les taules imbricades mantenen relacions de dades adequades que s’emmagatzemen de forma persistent.
- Les matrius associatives són bones per a petites taules de cerca on la col·lecció es pot crear a la memòria cada vegada que s’inicialitza un paquet o es crida a un procediment. Són una bona opció quan no es coneix la mida prèviament. Els valors d'índex d'una matriu associativa són flexibles ja que els subíndexs d'aquesta matriu no estan en seqüència o poden ser negatius o una cadena en lloc d'un nombre.
Preguntes i respostes freqüents
P # 1) Per què fem servir col·leccions a PL / SQL?
Resposta: Hi ha tres tipus de col·leccions: taules imbricades, matrius associatives i Varrays. Les taules imbricades poden emmagatzemar un nombre aleatori d'elements. Els varrays poden emmagatzemar un nombre fix d’elements i les matrius associatives ens permeten cercar elements amb nombres aleatoris i cadenes.
Q # 2) Quina és la taula imbricada a PL / SQL?
Resposta: Una taula imbricada té una dimensió 1 i la seva mida no es manté fixa. Es pot accedir als blocs SQL i PL / SQL. Es pot utilitzar en registres, definicions d'objectes i taules.
P # 3) Què és una col·lecció massiva a Oracle PL / SQL?
Resposta: Una col·lecció massiva és un mètode per obtenir dades quan el motor PL / SQL informa al motor SQL que acumula diverses files alhora i les emmagatzema en una col·lecció.
Q # 4) Per què la recollida massiva és més ràpida a Oracle?
Resposta: La recopilació massiva millora el rendiment reduint la interacció entre el motor PL / SQL i la base de dades.
Q # 5) Què és Varray a PL / SQL?
Resposta: És una estructura de dades PL / SQL que s’utilitza per emmagatzemar una col·lecció homogènia d’elements del mateix tipus de dades en una seqüència. S'utilitza principalment per contenir un conjunt ordenat de dades.
Q # 6) Podem eliminar un element de Varray a Oracle?
Resposta: No podem modificar ni suprimir elements d’un Varray amb l’ajut d’instruccions SQL directament. Hem de seleccionar el Varray de la taula, modificar-lo a PL / SQL i, a continuació, modificar-lo i emmagatzemar-lo en un Varray nou.
Q # 7) Quina diferència hi ha entre la taula nidificada i Varray?
Resposta: Les diferències s’enumeren a continuació:
- Prenem el Varray quan es coneix el nombre d’elements d’abans. Aquesta restricció no és possible a les taules imbricades.
- A Varray, els elements s’utilitzen en seqüència. La taula nidificada té característiques denses i escasses.
- Els elements sempre s’ordenen a Varray. Els elements poden estar o no en ordre a la taula imbricada.
Conclusió
En aquest tutorial, hem analitzat amb detall alguns dels conceptes bàsics de PL / SQL que són essencials per desenvolupar el coneixement sobre aquest tema.
A continuació, hem tractat els temes següents:
- Comprensió bàsica de les col·leccions PL SQL (mètodes i excepcions).
- Varrays.
- Taules imbricades
- Taules indexades per
<< PREV Tutorial | NEXT Tutorial >>
Lectura recomanada
- Tipus de dades de matriu: matriu int, matriu doble, matriu de cadenes, etc.
- Java Array - Com imprimir elements d'un array a Java?
- Tutorial PL SQL per a principiants amb exemples | Què és PL / SQL
- Matriu Java: declarar, crear i inicialitzar una matriu a Java
- Tutorial de longitud de matriu de Java amb exemples de codi
- SQL vs NoSQL Diferències exactes i saber quan s'ha d'utilitzar NoSQL i SQL
- Diferència entre SQL vs MySQL vs SQL Server (amb exemples)
- JUnit 5 Classe imbricada: @ Tutorial imbricat amb exemples