Posts tagged execute immediate
EXECUTE IMMEDIATE
0Execute 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.