Kita telah melihat di tutorial sebelumnya cara membuat Variabel Tipe Rekam berbasis Kursor berdasarkan Kursor Sederhana yang mengembalikan satu baris data. Sekarang muncul pertanyaan di sini adalah dapatkah kita menggunakan variabel tipe data rekaman tunggal yang sama dengan kursor yang mengembalikan beberapa baris data? Untuk mengetahui jawabannya, baca bersama &pelajari cara menangani beberapa nilai yang dikembalikan oleh kursor menggunakan variabel tipe data rekaman berbasis kursor tunggal.
Karena kita berurusan dengan catatan Berbasis Kursor, maka sedikit pengetahuan tentang kursor diperlukan. Demi kesederhanaan dan untuk membuat konsep ini mudah dipahami, saya akan menggunakan Simple Explicit-Cursor untuk demonstrasi.
Langkah 1:Deklarasikan Kursor Eksplisit Sederhana
Tipe data record berbasis kursor membutuhkan kursor yang sudah dibuat. Kursor ini akan menjadi basis dasar untuk variabel tipe rekaman kita. Semua field dari variabel tipe record yang dibuat menggunakan kursor ini akan memiliki nama dan tipe data yang sama dengan kolom yang digunakan dalam SELECT-List kursor.
SET SERVEROUTPUT ON; DECLARE CURSOR cur_RebellionRider IS SELECT first_name, salary FROM employees WHERE employee_id > 200;
Berbeda dengan kursor dari tutorial sebelumnya yang mengembalikan satu baris data, kursor ini akan mengembalikan beberapa baris. Semua baris ini akan terdiri dari nama depan dan gaji semua karyawan dengan id karyawan lebih dari 200.
Langkah2:Deklarasikan Variabel Tipe Data Rekaman Berbasis Kursor
Setelah kita membuat kursor, sekarang kita siap untuk mendeklarasikan variabel record kita menggunakan kursor ini.
var_emp cur_RebellionRider%ROWTYPE;
Var_emp adalah variabel tipe record dan karena didasarkan pada kursor cur_RebellionRider maka kita dapat dengan bangga menyebutnya sebagai variabel tipe record Berbasis Kursor. Sekarang kita harus melihat apakah variabel record tunggal ini mampu menampung semua data yang dikembalikan oleh kursor dasar cur_RebellionRider.
Langkah 3:Inisialisasi Variabel Cursor-Record
Seperti yang telah kita bahas dalam tutorial PL/SQL 34 bahwa inisialisasi variabel record adalah proses pemberian beberapa nilai padanya. Dalam kasus Kursor, pernyataan FETCH-INTO melakukan ini. Namun kita harus memastikan bahwa kita telah mengikuti Siklus Hidup Kursor dengan benar.
Jika Anda tidak tahu apa itu Siklus Hidup Kursor dan langkah-langkah yang terlibat dalam membuat Kursor, periksa blog ini di “Pengantar Kursor Basis Data”.
BEGIN OPEN cur_RebellionRider; LOOP FETCH cur_RebellionRider INTO var_emp; EXIT WHEN cur_RebellionRider%NOTFOUND; DBMS_OUTPUT.PUT_LINE (var_emp.first_name||' '||var_emp.salary ); END LOOP;--Simple Loop End CLOSE cur_RebellionRider; END;
Bagian eksekusi blok PL/SQL di atas yang kita buat di sini telah dijelaskan baris demi baris dalam video tutorial di saluran YouTube saya. Periksa itu.
Jadi itu saja. Itu saja yang harus kita lakukan. Sekarang mari gabungkan semua potongan kode yang kita lihat di langkah berbeda di atas menjadi satu blok PL/SQL anonim.
Variabel Tipe Data Record Berbasis Kursor di Database Oracle
SET SERVEROUTPUT ON; DECLARE CURSOR cur_RebellionRider IS SELECT first_name, salary FROM employees WHERE employee_id > 200; var_emp cur_RebellionRider%ROWTYPE; BEGIN OPEN cur_RebellionRider; LOOP FETCH cur_RebellionRider INTO var_emp; EXIT WHEN cur_RebellionRider%NOTFOUND; DBMS_OUTPUT.PUT_LINE (var_emp.first_name||' '||var_emp.salary); END LOOP; CLOSE cur_RebellionRider; END;
Saat Anda mengkompilasi dan menjalankan kode di atas, Anda akan mendapatkan semua data yang pernyataan FETCH-INTO diambil dari kursor cur_RebellionRider dan disimpan ke dalam variabel Record berbasis kursor var_emp. Ini menyiratkan bahwa kita memang dapat menangani beberapa baris data menggunakan satu Catatan Berbasis Kursor.
Dalam tutorial video PL/SQL saya, saya bertanya apakah kami dapat menyederhanakan kode ini atau adakah cara lain untuk melakukan tugas yang sama. Jawabannya adalah ya, ada beberapa cara untuk mencapai hasil yang sama dan salah satunya adalah dengan menggunakan “Cursor For-Loop”. Ini adalah jenis perulangan khusus yang mendeklarasikan variabel record serta Membuka, Mengambil, dan Menutup kursor yang mendasarinya secara implisit di latar belakang untuk Anda. Anda dapat membaca lebih lanjut Kursor For-Loop di sini.
Buku Referensi untuk SQL Expert 1z0-047 Tautan afiliasi
Panduan Ujian Ahli OCA Oracle Database SQL Certified (Ujian 1Z0-047)
Berikut adalah kode yang dilakukan menggunakan Cursor For-Loop yang setara dengan kode di atas. Seperti yang Anda lihat, ini jauh lebih sederhana dengan sedikit Line-of-Codes (LOC).
SET SERVEROUTPUT ON; BEGIN FOR var_emp IN (SELECT first_name, salary FROM employees WHERE employee_id >200) LOOP DBMS_OUTPUT.PUT_LINE(var_emp.first_name||' '||var_emp.salary); END LOOP; END;
Kedua kode akan mengembalikan hasil yang sama karena keduanya melakukan tugas yang sama.
Semoga Anda menikmati tutorial PL/SQL yang mendetail ini. Harap pastikan untuk membagikan ini di sosial Anda dan beri tag saya karena saya memberikan barang dagangan RebellionRider setiap bulan kepada pengguna yang dipilih secara acak. Ikuti juga saya di Media Sosial [Twitter/Facebook/Instagram] saya untuk pembaruan rutin.
Terima kasih &Semoga harimu menyenangkan!