Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Tipe Data Rekaman Berbasis Kursor Dengan Kursor Mengembalikan Beberapa Nilai Dalam Database Oracle

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!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cek Tanggal Valid di Oracle

  2. Cara Memisahkan string yang dipisahkan koma di Oracle

  3. Mematikan dan Memulai Instans Oracle

  4. Bagaimana cara mengkonfigurasi Ruby on Rails dengan Oracle?

  5. Fungsi NUMTOYMINTERVAL() di Oracle