Senin, 16 April 2012

ARRAY Dalam PL/SQL Oracle

Array adalah tipe data bentukan yang dapat menyimpan sekumpulan nilai dari tipe data yang sama dan dikemas dalam bentuk larik.  Nilai dari elemen-elemen array dapat diakses melalui indeksnya.  

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

Tidak ada komentar:

Posting Komentar