PL / SQL - Array

Dalam bab ini, kita akan membahas array dalam PL / SQL. Bahasa pemrograman PL / SQL menyediakan struktur data yang disebutVARRAY, yang dapat menyimpan kumpulan elemen berurutan ukuran tetap dari jenis yang sama. Varray digunakan untuk menyimpan kumpulan data yang diurutkan, namun seringkali lebih baik untuk menganggap array sebagai kumpulan variabel dengan tipe yang sama.

Semua varray terdiri dari lokasi memori yang berdekatan. Alamat terendah sesuai dengan elemen pertama dan alamat tertinggi untuk elemen terakhir.

Array adalah bagian dari data tipe koleksi dan itu singkatan dari array ukuran variabel. Kami akan mempelajari jenis koleksi lainnya di bab selanjutnya'PL/SQL Collections'.

Setiap elemen di a varraymemiliki indeks yang terkait dengannya. Ini juga memiliki ukuran maksimum yang dapat diubah secara dinamis.

Membuat Jenis Varray

Jenis varray dibuat dengan CREATE TYPEpernyataan. Anda harus menentukan ukuran maksimum dan jenis elemen yang disimpan di varray.

Sintaks dasar untuk membuat tipe VARRAY di level skema adalah -

CREATE OR REPLACE TYPE varray_type_name IS VARRAY(n) of <element_type>

Dimana,

  • varray_type_name adalah nama atribut yang valid,
  • n adalah jumlah elemen (maksimum) di varray,
  • element_type adalah tipe data dari elemen array.

Ukuran maksimum varray dapat diubah menggunakan ALTER TYPE pernyataan.

Sebagai contoh,

CREATE Or REPLACE TYPE namearray AS VARRAY(3) OF VARCHAR2(10); 
/ 

Type created.

Sintaks dasar untuk membuat tipe VARRAY dalam blok PL / SQL adalah -

TYPE varray_type_name IS VARRAY(n) of <element_type>

Misalnya -

TYPE namearray IS VARRAY(5) OF VARCHAR2(10); 
Type grades IS VARRAY(5) OF INTEGER;

Sekarang mari kita mengerjakan beberapa contoh untuk memahami konsep -

Contoh 1

Program berikut menggambarkan penggunaan 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; 
/

Ketika kode di atas dijalankan pada prompt SQL, itu menghasilkan hasil sebagai berikut -

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 -

  • Dalam lingkungan Oracle, indeks awal untuk varray selalu 1.

  • Anda dapat menginisialisasi elemen varray menggunakan metode konstruktor dari jenis varray, yang memiliki nama yang sama dengan varray tersebut.

  • Varray adalah array satu dimensi.

  • Sebuah varray secara otomatis NULL ketika dideklarasikan dan harus diinisialisasi sebelum elemennya dapat direferensikan.

Contoh 2

Elemen varray juga bisa berupa% ROWTYPE dari tabel database atau% TYPE dari kolom tabel database. Contoh berikut menggambarkan konsep tersebut.

Kami akan menggunakan tabel CUSTOMERS yang disimpan dalam database kami sebagai -

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 | 
+----+----------+-----+-----------+----------+

Contoh berikut memanfaatkan cursor, yang akan Anda pelajari secara rinci di bab terpisah.

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; 
/

Ketika kode di atas dijalankan pada prompt SQL, itu menghasilkan hasil sebagai berikut -

Customer(1): Ramesh  
Customer(2): Khilan  
Customer(3): kaushik     
Customer(4): Chaitali  
Customer(5): Hardik  
Customer(6): Komal  

PL/SQL procedure successfully completed.