Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Metody gromadzenia:PIERWSZE I OSTATNIE funkcje w bazie danych Oracle

Witamy ponownie w serii dotyczącej metod gromadzenia danych w bazie danych Oracle. Jak dotąd w tej serii omówiliśmy Collection Function Count ( ) i Collection Function Exist ( ). Mam nadzieję, że podobało Ci się czytanie. Dzisiaj w tym samouczku dotyczącym PL/SQL nauczymy się metod zbierania danych First ( ) i Last ( ).

Co to są metody zbierania FIRST ( ) i LAST ( )?

Używamy funkcji kolekcji First &Last, aby poznać pierwszą i ostatnią wartość indeksu zdefiniowaną w kolekcji.

Czy możemy używać tych metod gromadzenia przy dowolnym typie gromadzenia?

Tak! Możesz używać obu tych funkcji ze wszystkimi trzema typami kolekcji, którymi są tablica asocjacyjna, tabela zagnieżdżona i VARRAY.

Kiedy metoda zbierania FIRST ( ) i LAST ( ) zwraca null?

Obie funkcje zwracają wartość null po zastosowaniu do pustej kolekcji lub po zastosowaniu do kolekcji inicjującej, która nie zawiera żadnych elementów.

Czy możesz podać specyfikację funkcji dla obu tych funkcji?

Pewnie! Dlaczego nie. Specyfikacja funkcji zbierania FIRST ( ) to:

FUNCTION FIRST RETURN PLS_INTEGER | VARCHAR2

A specyfikacja funkcji kolekcji LAST ( ) to:

FUNCTION LAST RETURN PLS_INTEGER | VARCHAR2

Informacje:
W przypadku tablicy asocjacyjnej indeksowanej ciągami te metody zwracają ciągi; „najniższy” i „najwyższy” określa kolejność zestawu znaków używanego w tej sesji.

Co, jeśli w moim VARRAY jest tylko 1 element?

W takim przypadku funkcja zbierania FIRST ( ) ma zawsze wartość 1, a metoda zbierania LAST ( ) jest zawsze równa LICZBA.

Co się stanie, jeśli zastosuję te funkcje do niezainicjowanej kolekcji?

Poważnie, dlaczego miałbyś to zrobić! W każdym razie, jeśli zastosowałeś funkcję zbierania FIRST &LAST do niezainicjowanej kolekcji, spowoduje to zgłoszenie wyjątku COLLECTION_IS_NULL.

Przykład:jak używać funkcji zbierania PIERWSZY i OSTATNI w przypadku zbierania?

SET SERVEROUTPUT ON;
DECLARE
    TYPE nt_tab IS TABLE OF NUMBER;
    col_var nt_tab := nt_tab(10, 20, 30, 40, 50);
BEGIN
    DBMS_OUTPUT.PUT_LINE ('First Index of the Nested table is ' || col_var.FIRST);
    DBMS_OUTPUT.PUT_LINE ('Last Index of the Nested table is ' || col_var.LAST);
END;
/

W powyższym przykładzie utworzyliśmy zagnieżdżoną tabelę o nazwie NT_TAB i zainicjalizowaliśmy ją za pomocą zmiennej kolekcji col_var. Ta zagnieżdżona tabela ma 5 indeksów, w których zapisaliśmy wartości. Najniższy indeks w tej zagnieżdżonej tabeli to 1, która przechowuje wartość 10, a maksymalny indeks to 5 z wartością 50. Tak więc po wykonaniu wynik z pierwszego DBMS_OUTPUT będzie wynosił 1, a z drugiej instrukcji DBMS_OUTPUT będzie 5.

Śmiało skopiuj kod i sam sprawdź wynik.

Co się stanie, jeśli usuniemy pierwszy element zagnieżdżonej tabeli? Jakie będzie wtedy wyjście funkcji zbierania FIRST?

To bardzo dobre pytanie! Jeśli usuniesz pierwszy element funkcji zbierania, funkcja zbierania PIERWSZY zwróci indeks dolny, który jest większy niż 1 i przechowuje pewne dane. Zobaczmy przykład:

SET SERVEROUTPUT ON;
DECLARE
    TYPE nt_tab IS TABLE OF NUMBER;
    col_var nt_tab := nt_tab(10, 20, 30, 40, 50);
BEGIN
col_var.DELETE(1);
    DBMS_OUTPUT.PUT_LINE ('First Index after DELETE is ' || col_var.FIRST);
END;
/

W powyższym przykładzie usunęliśmy pierwszy element zagnieżdżonej tabeli nt_tab za pomocą metody zbierania DELETE. Po usunięciu pierwszego elementu, który ma 10 w indeksie 1, nowy najniższy indeks dolny ma teraz wartość 2, w której są zapisane pewne dane. Tak więc po wykonaniu wynik będzie wynosił 2.

Co się stanie, jeśli usunę element ze środka kolekcji?

Jeśli usuniesz dane ze środka, funkcja zbierania LAST zwróci wartość większą niż wartość zwrócona przez metodę LICZBA.

Czy możemy zobaczyć dane przechowywane w indeksach kolekcji przy użyciu metod zbierania FIRST i LAST?

Kiedy wyjaśniałem tę samą koncepcję w klasie, uczennica podniosła rękę i zapytała mnie.

Proszę pana, jak dotąd widzimy, że te funkcje zwracają numer indeksu kolekcji. Co jeśli chcemy zobaczyć dane przechowywane w tych indeksach. Czy istnieje sposób, aby zobaczyć dane przechowywane w indeksie za pomocą tych metod zbierania PIERWSZY I OSTATNI?

Odpowiedź na to pytanie brzmi:tak! Oczywiście . Wraz z numerem indeksu dolnego możesz użyć tych funkcji, aby zobaczyć dane przechowywane w najniższym i najwyższym indeksie kolekcji.

Na przykład

SET SERVEROUTPUT ON;
DECLARE
    TYPE nt_tab IS TABLE OF NUMBER;
    col_var nt_tab := nt_tab(10, 20, 30, 40, 50);
BEGIN
    -- This output statement will return 10 which is the value stored at the first index
    DBMS_OUTPUT.PUT_LINE ('Value stored at First Index is ' || col_var(col_var.FIRST));
    -- This output statement will return 50 which is the value stored at the last index
    DBMS_OUTPUT.PUT_LINE ('Value stored at First Index is ' || col_var(col_var.LAST));
END;
/

Aby zobaczyć dane przechowywane w pierwszym i ostatnim indeksie, wystarczy umieścić wywołania tych funkcji w nawiasach zmiennej kolekcji, którą jest col_var tak jak w powyższym przykładzie.

Teraz pytanie brzmi a co jeśli przytniemy kolekcję? Jakie będzie zatem wyjście funkcji kolekcji LAST? Śmiało i sprawdź samouczek wideo gdzie wyjaśniłem, jaki będzie wynik metody zbierania LAST po przycięciu kolekcji za pomocą przykładu.

To wszystko o tych metodach zbierania. Mam nadzieję, że ten blog okazał się przydatny. Dzięki i życzę miłego dnia!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Numer zwrotu z wyciągu Oracle Select po dacie parsowania

  2. Jaki jest minimalny zasięg klienta wymagany do połączenia C# z bazą danych Oracle?

  3. Oracle sql:klauzula porządku według i odrębna

  4. Zarządzanie obsługą błędów podczas uruchamiania sqlplus ze skryptów powłoki

  5. Generuj dane testowe za pomocą programisty Oracle PL/SQL