PL / SQL - tablice
W tym rozdziale omówimy tablice w PL / SQL. Język programowania PL / SQL zapewnia strukturę danych zwanąVARRAY, który może przechowywać sekwencyjną kolekcję elementów tego samego typu o stałym rozmiarze. Zmienna służy do przechowywania uporządkowanego zbioru danych, jednak często lepiej jest myśleć o tablicy jako o zbiorze zmiennych tego samego typu.
Wszystkie odmiany składają się z ciągłych miejsc pamięci. Najniższy adres odpowiada pierwszemu elementowi, a najwyższy adres ostatniemu elementowi.
Tablica jest częścią danych typu kolekcji i oznacza tablice o zmiennej wielkości. W następnym rozdziale przeanalizujemy inne typy kolekcji'PL/SQL Collections'.
Każdy element w varrayma przypisany indeks. Ma również maksymalny rozmiar, który można dynamicznie zmieniać.
Tworzenie typu Varray
Typ varray jest tworzony za pomocą CREATE TYPEkomunikat. Musisz określić maksymalny rozmiar i typ elementów przechowywanych w varray.
Podstawowa składnia tworzenia typu VARRAY na poziomie schematu to -
CREATE OR REPLACE TYPE varray_type_name IS VARRAY(n) of <element_type>
Gdzie,
- varray_type_name to poprawna nazwa atrybutu,
- n to liczba elementów (maksymalna) w varray,
- typ_elementu to typ danych elementów tablicy.
Maksymalny rozmiar varray można zmienić za pomocą ALTER TYPE komunikat.
Na przykład,
CREATE Or REPLACE TYPE namearray AS VARRAY(3) OF VARCHAR2(10);
/
Type created.
Podstawowa składnia tworzenia typu VARRAY w bloku PL / SQL to -
TYPE varray_type_name IS VARRAY(n) of <element_type>
Na przykład -
TYPE namearray IS VARRAY(5) OF VARCHAR2(10);
Type grades IS VARRAY(5) OF INTEGER;
Przeanalizujmy teraz kilka przykładów, aby zrozumieć koncepcję -
Przykład 1
Poniższy program ilustruje użycie varrays -
DECLARE
type namesarray IS VARRAY(5) OF VARCHAR2(10);
type grades IS VARRAY(5) OF INTEGER;
names namesarray;
marks grades;
total integer;
BEGIN
names := namesarray('Kavita', 'Pritam', 'Ayan', 'Rishav', 'Aziz');
marks:= grades(98, 97, 78, 87, 92);
total := names.count;
dbms_output.put_line('Total '|| total || ' Students');
FOR i in 1 .. total LOOP
dbms_output.put_line('Student: ' || names(i) || '
Marks: ' || marks(i));
END LOOP;
END;
/
Gdy powyższy kod jest wykonywany w wierszu polecenia SQL, daje następujący wynik -
Total 5 Students
Student: Kavita Marks: 98
Student: Pritam Marks: 97
Student: Ayan Marks: 78
Student: Rishav Marks: 87
Student: Aziz Marks: 92
PL/SQL procedure successfully completed.
Please note -
W środowisku Oracle indeks początkowy dla varray wynosi zawsze 1.
Elementy varray można zainicjować przy użyciu metody konstruktora typu varray, który ma taką samą nazwę jak varray.
Warray to jednowymiarowe tablice.
Zmienna jest automatycznie NULL, gdy jest zadeklarowana i musi zostać zainicjowana, zanim będzie można odwołać się do jej elementów.
Przykład 2
Elementy varray mogą być również% ROWTYPE dowolnej tabeli bazy danych lub% TYPE dowolnego pola tabeli bazy danych. Poniższy przykład ilustruje tę koncepcję.
Będziemy używać tabeli CUSTOMERS przechowywanej w naszej bazie danych jako -
Select * from customers;
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
+----+----------+-----+-----------+----------+
Poniższy przykład wykorzystuje cursor, które szczegółowo omówisz w osobnym rozdziale.
DECLARE
CURSOR c_customers is
SELECT name FROM customers;
type c_list is varray (6) of customers.name%type;
name_list c_list := c_list();
counter integer :=0;
BEGIN
FOR n IN c_customers LOOP
counter := counter + 1;
name_list.extend;
name_list(counter) := n.name;
dbms_output.put_line('Customer('||counter ||'):'||name_list(counter));
END LOOP;
END;
/
Gdy powyższy kod jest wykonywany w wierszu polecenia SQL, daje następujący wynik -
Customer(1): Ramesh
Customer(2): Khilan
Customer(3): kaushik
Customer(4): Chaitali
Customer(5): Hardik
Customer(6): Komal
PL/SQL procedure successfully completed.