Membuat Tipe Array
TYPE nama_tipe IS
TABLE OF tipe_data
INDEX BY BINARY_INTEGER;
Keterangan :
nama_tipe = nama array yg didefinisikan
tipe_data = berfungsi utk mendeklarasikan tipe dari kumpulan
data yg akan disimpan didalam array
INDEX BY BINARY_INTEGER = berfungsi untuk menunjukkan bahwa
array tsb akan di indeks
Contoh mendeklarasikan type data Array dengan nama Array_coba sebagai kumpulan dari tipe data CHAR :
DECLARE
TYPE Array_coba IS
TABLE OF CHAR(n) -- n : banyaknya karakter
INDEX BY BINARY_INTEGER;
Misalkan kita akan mendaklarasikan variable X yang bertipe Array_coba, sintaknya adalah sebagai berikut :
Declare
X Array_coba;
Mengisi Nilai pada Elemen Array
BEGIN
X(1) := ‘A’;
X(2) := ‘B’;
END;
Contoh 1 a. :
SET SERVEROUTPUT ON
DECLARE
TYPE LARIK IS
TABLE OF NUMBER
INDEX BY BINARY_INTEGER;
A LARIK;
BEGIN
-- Melakukan pengisian terhadap elemen-elemen array
A(1) := 10; A(2) := 20;
A(3) := 30; A(4) := 40;
-- Menampilkan elemen array ke layar
DBMS_OUTPUT.PUT_LINE('Nilai elemen larik ke-1' || '='
||TO_CHAR(A(1)));
DBMS_OUTPUT.PUT_LINE('Nilai elemen larik ke-2' || '='
||TO_CHAR(A(2)));
DBMS_OUTPUT.PUT_LINE('Nilai elemen larik ke-3' || '='
||TO_CHAR(A(3)));
END;
/
Bandingkan dengan contoh 1.b. berikut ini :
SET SERVEROUTPUT ON
DECLARE
TYPE LARIK IS
TABLE OF NUMBER
INDEX BY BINARY_INTEGER;
A LARIK;
I integer;
BEGIN
FOR i IN 1..5 LOOP
A(i):=i*10;
DBMS_OUTPUT.PUT_LINE('Nilai elemen larik ke-'
||i||'='|| TO_CHAR(A(i)));
END LOOP;
END;
/
Perhatikan contoh tsb diatas akan menghasilkan tampilan seperti berikut ini :
Contoh 2.
SET SERVEROUTPUT ON
DECLARE
TYPE SISWA IS
TABLE OF VARCHAR2(20)
INDEX BY BINARY_INTEGER;
NAMA SISWA;
I integer;
BEGIN
NAMA(1):='ANDI';NAMA(2):='BURHAN';NAMA(3):='CANDRA';
NAMA(4):='ERMAN'; NAMA(5):='FARID';NAMA(6):='GUNAWAN';
FOR i IN 1..6 LOOP
DBMS_OUTPUT.PUT_LINE('Nama Siswa ke-
'||i||'='||TO_CHAR(NAMA(i)));
END LOOP;
END;
Contoh 3
Mengurutkan Data pada Elemen Array
Anda diminta utk mengurutkan data-data yg tersusun secara acak pada sebuah array dgn menggunakan blok PL/SQL. Data yg dimaksud adalah :
544, 78, 565, 23, 4
SET SERVEROUTPUT ON
DECLARE
TYPE LARIK IS
TABLE OF NUMBER
INDEX BY BINARY_INTEGER;
X LARIK;
Temp NUMBER;
idx_max NUMBER;
i BINARY_INTEGER;
y BINARY_INTEGER;
BEGIN
X(1) := 544; X(2) := 78;
X(3) := 565; X(4) := 23; X(5) := 4;
DBMS_OUTPUT.PUT_LINE('Sebelum di-urutkan : ');
----------------------------------------------
FOR i IN 1..5 LOOP
DBMS_OUTPUT.PUT_LINE('X('||i||') = '||
TO_CHAR(X(i)));
END LOOP;
----------------------------------------------
y:=5;
WHILE (y>=2) LOOP
idx_max:=1;
i:=2;
WHILE(i<=y) LOOP
IF X(idx_max) < X(i) THEN
idx_max:=i;
END IF;
i:=i+1;
END LOOP;
temp:=x(idx_max);
X(idx_max):=X(y);
X(y):=temp;
y:=y-1;
END LOOP;
---------------------------------------------------------
DBMS_OUTPUT.PUT_LINE(' ');
DBMS_OUTPUT.PUT_LINE('Setelah di-urutkan : ');
FOR i IN 1..5 LOOP
DBMS_OUTPUT.PUT_LINE('X('||i||') = ' || TO_CHAR(X(i)));
END LOOP;
---------------------------------------------------------
END;
/
Sama dengan contoh kasus diatas, tetapi menggunakan metode lain :
SET SERVEROUTPUT ON
DECLARE
TYPE LARIK IS
TABLE OF NUMBER
INDEX BY BINARY_INTEGER;
X LARIK;
TEMP NUMBER;
K BINARY_INTEGER;
I BINARY_INTEGER;
N BINARY_INTEGER;
BEGIN
X(1) := 544; X(2) := 78;
X(3) := 565; X(4) := 23; X(5) := 4;
DBMS_OUTPUT.PUT_LINE('Sebelum di-urutkan : ');
--------------------------------------------------------
FOR I IN 1..5 LOOP
DBMS_OUTPUT.PUT_LINE('X('||I||') = ' || TO_CHAR(X(I)));
END LOOP;
----------------------------------------------------------
--PROSES PENGURUTAN
I:=1;
N:=5;
WHILE (I<=N-1) LOOP
K:=N;
WHILE (K>I) LOOP
IF X(K)<X(K-1) THEN
TEMP:=X(K-1);
X(K-1):=X(K);
X(K):=TEMP;
END IF;
K:=K-1;
END LOOP;
I:=I+1;
END LOOP;
DBMS_OUTPUT.PUT_LINE(' ');
DBMS_OUTPUT.PUT_LINE('Setelah di-urutkan : ');
FOR I IN 1..5 LOOP
DBMS_OUTPUT.PUT_LINE('X('||I||') = ' ||TO_CHAR(X(I)));
END LOOP;
DBMS_OUTPUT.PUT_LINE(' ');
END;
/