pl sql collections nested table
Poznaj podstawy kolekcji PL SQL, metod zbierania danych, zmiennej zmiennej, tabeli zagnieżdżonej i tablicy asocjacyjnej, korzystając z przykładów kodu:
w Podprogramy PL / SQL samouczek Seria PL / SQL , dowiedzieliśmy się o procedurach i funkcjach, różnych metodach przekazywania parametrów oraz o tym, jak tworzyć / usuwać procedury i funkcje w PL / SQL.
W tym artykule omówimy kolekcje PL SQL i powiązane koncepcje. Wyjaśnimy również koncepcję Varrays, tabel zagnieżdżonych i tabel indeksowanych, które są dostępne w PL / SQL.
Poza tym poznamy niektóre z wbudowanych wyjątków kolekcji i metod kolekcji.
Czego się nauczysz:
- Kolekcje PL SQL
- Tabele zagnieżdżone w PL / SQL
- Tablica asocjacyjna lub tabele indeksowane
- Varrayes w PL / SQL
- Wniosek
Kolekcje PL SQL
Kolekcja to grupa elementów o jednorodnych typach danych. Zwykle zawiera tablice, listy, zbiory i tak dalej. Każdy z elementów ma określony indeks, który odzwierciedla jego pozycję.
Kolekcje PL SQL są następujących typów:
- Asocjacyjne tablice / indeksy według tabel
- Tabele zagnieżdżone.
- Varrays.
Zbiory PL SQL są zwykle używane do przechowywania i manipulowania dużymi porcjami danych przy użyciu słowa kluczowego BULK COLLECT w Oracle.
Metody zbierania
Pl / SQL ma kilka wbudowanych metod w kolekcji, które są wymienione poniżej.
Sl. Nie. | Nazwa | Opisy |
---|---|---|
7 | następny (m) | Podaje indeks, który następuje po indeksie mth. |
1 | liczyć | Podaje liczbę elementów obecnych w kolekcji. |
dwa | limit | Weryfikuje rozmiar kolekcji. |
3 | istnieje (m) | Zwraca wartość true, jeśli element mth obecny w kolekcji w przeciwnym razie zwraca wartość false. |
4 | pierwszy | Podaje numer indeksu początkowego w kolekcji z indeksem całkowitym. |
5 | ostatni, ubiegły, zeszły | Podaje numer indeksu końcowego w kolekcji z indeksem całkowitym. |
6 | poszerzać | Dodaje element NULL na końcu kolekcji. |
8 | wcześniej (m) | Podaje indeks poprzedzający indeks m. |
9 | trym | Usuwa element z końca kolekcji. |
10 | wykończenie (m) | Usuwa m elementów z końca kolekcji. |
jedenaście | kasować | Usuwa wszystkie elementy z kolekcji, ustawiając liczbę na 0. |
12 | usuń (m) | Usuwa element mth z kolekcji, jeśli element mth ma wartość NULL, nie jest wykonywana żadna akcja. |
13 | usuń (m, k) | Usuwa element z pozycji m-tej do k-tej. |
14 | przedłużyć (m) | Dodaje element m na końcu kolekcji. |
piętnaście | wydłuż (m, k) | Dodaje m kopii k-tego elementu na koniec kolekcji. |
Wyjątki dotyczące kolekcji
Oto niektóre z typowych wyjątków dotyczących kolekcji:
- VALUE_ERROR: Ten wyjątek jest zgłaszany, jeśli nie można przekonwertować indeksu dolnego na typ klucza lub ma wartość NULL. Ten wyjątek jest zwykle zgłaszany, jeśli klucz ma zakres typu PLS_INTEGER, a indeks dolny znajduje się poza tym zakresem.
- NIE ZNALEZIONO DANYCH: Ten wyjątek jest zgłaszany przez PL / SQL, jeśli instrukcja SELECT nie pobiera żadnych wierszy lub program wskazuje na element, który jest usuwany w zagnieżdżonej tabeli. Ten wyjątek może również zostać zgłoszony przez element, który nie jest zainicjowany w tabeli indeksu.
- COLLECTION_IS_NULL: Ten wyjątek jest generowany przez PL / SQL, jeśli kolekcja ma domyślnie wartość NULL.
- SUBSCRIPT_BEYOND_COUNT: Ten wyjątek jest generowany, gdy indeks dolny jest większy niż całkowita liczba elementów w kolekcji.
- SUBSCRIPT_OUTSIDE_LIMIT: Ten wyjątek jest zgłaszany, gdy indeks dolny przekracza zakres progowy.
Tabele zagnieżdżone w PL / SQL
Zagnieżdżone tabele przypominają pojedynczą kolumnę tabeli bazy danych lub jednowymiarową tablicę, w której rozmiar tablicy jest dynamiczny. Jego indeks dolny jest typu numerycznego. Możemy umieścić zagnieżdżoną tabelę w zmiennej, nadając wierszom indeks zaczynający się od 1. Ta funkcja sprawia, że jest ona podobna do tablicy.
Zagnieżdżona tabela może być przechowywana w kolumnie bazy danych. Może być również używany do manipulowania operacjami SQL poprzez łączenie tabel. Ponieważ jest to tablica dynamiczna, więc górna granica może mieć dowolny rozmiar.
Zagnieżdżona tabela może mieć zarówno gęstą, jak i rzadką charakterystykę zbierania, co oznacza, że każdy element można usunąć losowo (czyniąc go rzadkim) za pomocą procedury DELETE. Usunięcie danych powoduje nieciągłość indeksu, ale funkcja NEXT pomaga w iteracji do następnych indeksów. Ponieważ dane są przechowywane w postaci tabeli, można je pobrać za pomocą instrukcji SELECT.
Zagnieżdżoną tabelę można zbudować na poziomie schematu lub w bloku PL / SQL. Przypomina obiekt bazy danych, który jest dostępny w bazie danych lub podprogramie.
Różnice między tablicą tablicową i zagnieżdżoną są wymienione poniżej:
- Rozmiar tabel zagnieżdżonych można dynamicznie zwiększać. Górna granica tablicy jest stała, ale nie jest ustalona dla tabel zagnieżdżonych.
- Tablica ma kolejne indeksy, co czyni ją gęstą. Jednak zagnieżdżona tabela jest gęsta w momencie tworzenia, ale staje się rzadka po usunięciu elementów pomiędzy nimi.
Składnia tabeli zagnieżdżonej:
TYPE <> IS TABLE OF <> (NOT NULL);
Tutaj, 'rodzaj' jest specyfikatorem typu. 'element' to typ danych.
Implementacja kodu z zagnieżdżoną 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;
Wynik powyższego kodu powinien wyglądać następująco:
Tablica asocjacyjna lub tabele indeksowane
Tabela indeksów jest powszechnie nazywana tablicą asocjacyjną. Pod względem struktury zarówno tabela indeksowana, jak i tabele zagnieżdżone są podobne i mają indeks dolny umożliwiający dostęp do elementów.
Tablica asocjacyjna jest reprezentowana przez parę klucz-wartość. Każdy z unikalnych kluczy służy do identyfikacji wartości w tablicy. Typ danych klucza może być łańcuchem lub liczbą całkowitą zdefiniowaną podczas jego tworzenia. Klucz jest dodawany do tabeli indeksowania przez proste przypisanie wartości po raz pierwszy. Aby zmodyfikować ten sam wpis, musimy użyć tego samego klucza.
Klucz powinien być niepowtarzalny jako klucz podstawowy w tabeli lub łącząc ze sobą ciągi znaków w celu uzyskania unikalnej wartości. Ten typ kolekcji ma rozmiar tablicy, który jest dynamiczny i ma charakterystykę rzadką lub gęstą. Jedną z różnic między tabelą indeksowaną a tabelą zagnieżdżoną jest to, że pierwszej nie można przechowywać w kolumnie bazy danych, ale można przechowywać tabelę zagnieżdżoną.
Tablice asocjacyjne zapewniają łatwą obsługę indeksu dolnego i są tworzone w ramach bloku PL / SQL. Przypomina tabelę SQL, w której wartości uzyskuje się za pomocą klucza podstawowego. Jest to zwykle używane do tymczasowego przechowywania danych i może być używane zamiast tabel SQL w celu uniknięcia ruchu sieciowego i miejsca na dysku wymaganego przez tabele SQL.
Ponieważ tablice asocjacyjne nie przechowują trwałych danych, nie można ich używać z instrukcjami SQL, takimi jak SELECT i INSERT. Można je jednak uczynić niekończącymi się dla sesji bazy danych, deklarując ich typ danych jako pakiet i definiując je w treści pakietu.
Składnia tabeli indeksów:
TYPE type IS TABLE OF element (NOT NULL) INDEX BY (BINARY_INTEGER | PLS_INTEGER | VARCHAR2(size)); INDEX BY key;
Tutaj 'klucz' jest numeryczny. Może to być BINARY_INTEGER lub PLS_INTEGER. Jego typem danych może być varchar, varchar2, long lub string. Klucz oparty na varchar powinien być wymieniony z długością.
'element' to typ danych.
'rozmiar' to maksymalna liczba elementów. Jest to dodatnia liczba całkowita.
'rodzaj' jest specyfikatorem typu.
Implementacja kodu z tabelą indeksów:
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; /
Wynik powyższego kodu powinien wyglądać następująco:
Varrayes w PL / SQL
Varrays przechowuje stałą liczbę elementów i przypomina jednowymiarową tablicę. Jednak liczbę elementów można modyfikować w czasie wykonywania. Jest to kolejny zbiór elementów o podobnych typach danych. Może być przechowywany w tabeli bazy danych, którą można obsługiwać za pomocą instrukcji SQL. Ale proces nie jest tak łatwy i elastyczny, jak w przypadku tabeli zagnieżdżonej.
Maksymalny rozmiar Varray jest zdefiniowany w definicji typu. Ma układ pamięci jeden po drugim zaczynający się od 1 indeksu dolnego, a najniższy adres lokalizacji wskazuje na element początkowy, a najwyższy adres lokalizacji wskazuje na element końcowy. Wszystkie elementy Varray są oznaczone indeksem.
Ten typ zbioru ma numeryczny indeks dolny i ma gęstą charakterystykę. Dlatego elementy tablicy nie mogą zostać usunięte pomiędzy. Należy usunąć cały Varray lub przyciąć jego koniec. Ze względu na swoją gęstą charakterystykę ma mniejszą elastyczność użytkowania.
Varray można utworzyć w bloku PL / SQL lub na poziomie schematu. Jest traktowany jako obiekt bazy danych, do którego można uzyskać dostęp w bazie danych lub w podprogramie. Varray jest używany częściej, gdy znany jest nam rozmiar tablicy. Należy go zainicjalizować przed ich użyciem i można go zainicjować za pomocą konstruktora. Jego wartość to NULL, gdy jest zadeklarowana i powinna zostać zainicjowana przed odwołaniem się do jej elementów.
Składnia Varray:
TYPE <> IS VARYING ARRAY (<>) OF <> (NOT NULL);
Tutaj,
'rodzaj' jest specyfikatorem typu.
'element' to typ danych.
'rozmiar' to maksymalna liczba elementów w tablicy. Jest to dodatnia liczba całkowita.
Deklaracja i inicjalizacja zmiennych Varray
Po stworzeniu Varraya możemy go zadeklarować w sposób opisany poniżej:
Składnia:
name type_n (:= type_n(...));
Tutaj,
'Nazwa' to imię Varray.
„Type_n” jest typem Varray.
„Type_n (…)” jest konstruktorem typu Varray. Listy argumentów są wymienione za pomocą separatora przecinków i typu Varray.
Musimy zainicjować zmienną Varray przed jej użyciem, w przeciwnym razie spowoduje to błąd niezainicjowanej kolekcji. Inicjalizacja odbywa się w sposób opisany poniżej.
Składnia:
name type_n := type_n();
Spowoduje to zainicjowanie zmiennej z zerowymi elementami. Aby wypełnić elementy w zmiennych varray, składnia to:
name type_n := type_n(e1, e2, ...);
Dostęp do elementów Varray
Dostęp do elementów można uzyskać w procesie opisanym poniżej:
nazwisko (m); gdzie m jest indeksem elementu, który zaczyna się od 1 i kończy maksymalną liczbą elementów typu Varray. W przypadku, gdy m jest poza zakresem 1 i maksymalną liczbą elementów, SUBSCRIPT_BEYOND_COUNT wyjątek jest zgłaszany przez PL / SQL.
Rozmiar Varray można zmodyfikować za pomocą instrukcji ALTER.
Implementacja kodu za pomocą ALTER.
CREATE Or REPLACE TYPE names AS VARRAY(2) OF VARCHAR(5); /
Wynik powyższego kodu powinien być.
czym jest testowanie integracji na przykładzie
Implementacja kodu za pomocą 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; /
Wynik powyższego kodu powinien wyglądać następująco:
Różnice między odmianami a tabelami zagnieżdżonymi
Różnice są następujące:
- Podczas gdy pracujemy nad scenariuszem, w którym znana jest liczba elementów i są one ułożone sekwencyjnie, na ogół stosuje się Varraye. Varray, który jest przechowywany w bazie danych, zachowuje swoje indeksy i kolejność. Jest zawsze utrzymywany jako pojedynczy obiekt. Natomiast tabele zagnieżdżone są używane, gdy liczba elementów nie jest ograniczona.
- Zagnieżdżona tabela ma rzadkie cechy, które pozwalają na usunięcie dowolnego elementu z dowolnej pozycji, a nie zawsze od końca. Kolejność i indeks zagnieżdżonej tabeli nie są zachowywane, gdy jest ona przechowywana w bazie danych. Elementy Varray są zawsze utrzymywane w kolejności.
Różnice między tablicami skojarzonymi a tabelami zagnieżdżonymi
Różnice są następujące:
- Tabele zagnieżdżone mogą być przechowywane w kolumnie bazy danych, ale tablice asocjacyjne nie. Zagnieżdżone tabele zachowują prawidłowe relacje danych, które są trwale przechowywane.
- Tablice asocjacyjne są dobre dla małych tabel wyszukiwania, w których kolekcja może być wbudowana w pamięć za każdym razem, gdy pakiet jest inicjowany lub wywoływana jest procedura. Są dobrym wyborem, gdy rozmiar nie jest wcześniej znany. Wartości indeksu tablicy asocjacyjnej są elastyczne, ponieważ indeksy tej tablicy nie są sekwencyjne lub mogą być ujemne lub mogą być łańcuchem zamiast liczby.
Często zadawane pytania i odpowiedzi
Pytanie 1) Dlaczego używamy kolekcji w PL / SQL?
Odpowiedź: Istnieją trzy typy kolekcji - tabele zagnieżdżone, tablice asocjacyjne i zmienne. Zagnieżdżone tabele mogą przechowywać losową liczbę elementów. Varraye mogą przechowywać stałą liczbę elementów, a tablice asocjacyjne pozwalają nam wyszukiwać elementy za pomocą liczb losowych i ciągów.
Pytanie 2) Co to jest tabela zagnieżdżona w PL / SQL?
Odpowiedź: Zagnieżdżona tabela ma charakter 1-wymiarowy i jej rozmiar nie pozostaje stały. Dostęp do nich można uzyskać w blokach SQL i PL / SQL. Może być używany w rekordach, definicjach obiektów i tabelach.
Pytanie 3) Co to jest zbiór zbiorczy w Oracle PL / SQL?
Odpowiedź: Zbieranie zbiorcze to metoda pobierania danych, gdy silnik PL / SQL informuje silnik SQL o konieczności gromadzenia wielu wierszy jednocześnie i przechowywania ich w kolekcji.
P # 4) Dlaczego odbiór zbiorczy jest szybszy w Oracle?
Odpowiedź: Zbiorcze gromadzenie zwiększa wydajność, ograniczając interakcję między silnikiem PL / SQL a bazą danych.
Pytanie 5) Co to jest Varray w PL / SQL?
Odpowiedź: Jest to struktura danych PL / SQL, która służy do przechowywania jednolitego zbioru elementów tego samego typu danych w sekwencji. Służy głównie do przechowywania uporządkowanego zestawu danych.
P # 6) Czy możemy usunąć element z Varray w Oracle?
Odpowiedź: Nie możemy bezpośrednio modyfikować ani usuwać elementów w Varray za pomocą instrukcji SQL. Musimy wybrać Varray z tabeli, zmodyfikować go w PL / SQL, a następnie zmodyfikować tabelę i zapisać w nowej Varray.
P # 7) Jaka jest różnica między tabelą zagnieżdżoną a Varray?
Odpowiedź: Różnice są wymienione poniżej:
- Bierzemy Varray, gdy liczba elementów jest znana wcześniej. To ograniczenie nie jest możliwe w tabelach zagnieżdżonych.
- W Varray elementy są używane w kolejności. Zagnieżdżona tabela ma zarówno gęstą, jak i rzadką charakterystykę.
- Elementy są zawsze zamawiane w Varray. Elementy w zagnieżdżonej tabeli mogą, ale nie muszą, być uporządkowane.
Wniosek
W tym samouczku szczegółowo omówiliśmy niektóre z podstawowych pojęć dotyczących języka PL / SQL, które są niezbędne do rozwijania wiedzy na jego temat.
Omówiliśmy następujące tematy wymienione poniżej:
- Podstawowe rozumienie zbiorów PL SQL (metody i wyjątki).
- Varrays.
- Tabele zagnieżdżone
- Tabele indeksowane
<< PREV Tutorial | NASTĘPNY samouczek >>
rekomendowane lektury
- Typy danych tablic - int Array, Double array, Array of Strings itp.
- Tablica Java - jak wydrukować elementy tablicy w języku Java?
- Samouczek języka PL SQL dla początkujących z przykładami | Co to jest PL / SQL
- Java Array - Deklaruj, twórz i inicjuj tablicę w Javie
- Samouczek dotyczący długości tablicy w języku Java z przykładami kodu
- SQL vs NoSQL Dokładne różnice i wiedzieć, kiedy używać NoSQL i SQL
- Różnica między SQL a MySQL i SQL Server (z przykładami)
- JUnit 5 Zagnieżdżona klasa: @ Zagnieżdżony samouczek z przykładami