EXECUTE IMMEDIATE

Execute immediate merupakan pengganti dari DBMS_SQL, jika kita sebelumnya menggunakan DBMS_SQL cukup merepotkan sekarang anda tidak perlu kawatir lagi. Yang perlu diingat perintah execute immediate tidak otomatis commit untuk perintah-perintah DML, jadi kita harus melakukan commit atau rollback manual. Sql yang dieksekusi tidak perlu diakhiri dengan tanda titik koma (;).

Berikut beberapa contoh penggunaan execute immediate.

Menggunakan perintah DDL

BEGIN
EXECUTE IMMEDIATE 'create table belajar(t1 number(3))';
END;
 
SQL> SELECT * FROM belajar;
 
T1
---

Menggunakan Variable dalam dinamik SQL

Contoh berikut adalah insert data ketable belajar.

DECLARE 
v_t1 NUMBER(3); -- deklarasi variable v_t1
BEGIN
 
v_t1 := 123; -- assignment varibale v_t1 dengna nilai 123
 
EXECUTE IMMEDIATE 'insert into belajar(t1) values (:t1) ' USING v_t1;
COMMIT;
 
SELECT * FROM belajar;
 
END;
 
SQL> SELECT * FROM belajar;
 
T1
----
123

“:t1″ adalah variable yang akan digantikan oleh v_t1, binding yang digunakan adalah “:”

Mengembalikan Nilai

Untuk mendapatkan nilai dari execute immediate kita menggunakan keyword INTO

DECLARE 
v_t1 NUMBER(3); -- deklarasi variable
BEGIN
 
EXECUTE IMMEDIATE 'select t1 + 5 from belajar'  INTO v_t1;
 
 
dbms_output.put_line ('Hasil : '||v_t1);
 
Hasil : 128
 
END;

jika select membutuhkan kondisi, misal dengan tambahan filter t1=x query menjadi execute ‘select t1 + 5 from belajar where t1=:x’ into v_t1 using x ;

Menjalankan Package/Store Procedure / Function

Contoh procedure yang digunakan adalah

DECLARE 
  v_str VARCHAR2(20);
  v_serviceName VARCHAR2(40) : 'MyPackage.printHello';
BEGIN
  v_str := 'Selamat Datang di Nailuvar Education Center';
  EXECUTE IMMEDIATE 'BEGIN '|| v_serviceName || ' (:a,:b); END;' USING IN v_str , OUT v_status;
 
 dbms_output.put_line ('Status = '||v_status);
END;

Menyimpan hasil dalam bentuk Record PL/SQL
contoh ini akan menampilkan data employee pada schema HR, data yang akan ditampilkan adalah employee_id dan nama.

DECLARE 
-- deklarasi type record  dengan nama RData
TYPE RData IS RECORD (
 emp_id NUMBER(9),
 emp_name VARCHAR2(40)
);
 
--deklarasi variable v_data dengan type RData.
 
BEGIN
  EXECUTE IMMEDIATE 'select employee_id,first_name || last_name from employee where employee_id = 1234 ' INTO v_data;
END;

demikian beberapa contoh penggunaan execute immediate yang membuat pemrosesan query dinamis menjadi lebih simple jika dibandingkan menggunakan DBMS_SQL. Yang harus diperhatikan adalah penanganan error, setiap kemungkinan error harus ditangani.

Selamat Mencoba.

No Responses to “EXECUTE IMMEDIATE”

Post a Comment