PL/SQL: Memasukkan Variabel dalam Prosedur

Sebagaimana prosedur dalam bahasa pemrograman lain, kitapun bisa memasukkan variabel ke dalam prosedur. Lihat contoh prosedur PROC_REFRESH_MYTAB yang lalu

create or replace procedure PROC_REFRESH_MYTAB as
V_rcg_min NUMBER;
v_rcg_max number;
V_iterasi NUMBER;
v_date	  DATE;
BEGIN
V_rcg_min := 10;
v_rcg_max := 100;
V_iterasi := V_rcg_min;
V_DATE    := sysdate;
EXECUTE IMMEDIATE 'truncate table MYTAB';
WHILE V_iterasi <= v_rcg_max LOOP
insert into MYTAB values (v_date, V_iterasi);
commit;
v_date   := v_date+1;
V_iterasi:= V_iterasi+1;
END LOOP;
END;
/

Dalam contoh di atas, nilai v_rcg_min dan v_rcg_max dimasukkan dalam hard code. Kalau kita mau mengubah nilai rcg_id minimum dan maksimum, ya mesti mengubah code lagi. Cappe deh … 🙂

Caranya, devinisikan variabel-variabel tersebut di belakang NAMA_PROSEDUR. Nilainya nanti dimasukkan ketika memanggil prosedur. Berikut ini prosedur tersebut:

create or replace procedure PROC_REFRESH_MYTAB2
(V_rcg_min NUMBER, v_rcg_max number) as
V_iterasi NUMBER;
v_date	  DATE;
BEGIN
V_iterasi := V_rcg_min;
V_DATE    := sysdate;
EXECUTE IMMEDIATE 'truncate table MYTAB';
WHILE V_iterasi <= v_rcg_max LOOP
insert into MYTAB values (v_date, V_iterasi);
commit;
v_date   := v_date+1;
V_iterasi:= V_iterasi+1;
END LOOP;
END;
/

Berikut ini cara memanggil prosedur sekaligus memasukkan nilai untuk variabelnya (misalkan v_rcg_min saya beri nilai 20 dan v_rcg_max saya beri nilai 30):

  1. Di SQLPlus
    SQL> exec PROC_REFRESH_MYTAB2 (20,30);
  2. Di block PL/SQL, tulis saja nama prosedur tersebut
    DECLARE
    BEGIN
    PROC_REFRESH_MYTAB2 (20,30);
    END;
    /

Kalau nilai variabel tidak dimasukkan, terlalu banyak, atau terlalu sedikit; maka akan error:
SQL> exec PROC_REFRESH_MYTAB2 (20);
SQL> exec PROC_REFRESH_MYTAB2 (20, 30, 40);
SQL> exec PROC_REFRESH_MYTAB2;

ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'PROC_REFRESH_MYTAB2'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
This entry was posted in SQL and PL/SQL and tagged , , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *