PL/SQL - Cursor: Panduan Anda ke Manipulasi Data

Halo sana, para ahli basis data masa depan! Hari ini, kita akan memulai perjalanan menarik ke dunia cursor PL/SQL. Jangan khawatir jika Anda baru saja memulai berprogram – saya akan menjadi panduan ramah Anda, dan kita akan meng eksplorasi topik ini secara bertahap. Pada akhir tutorial ini, Anda akan dapat menggunaikan cursor seperti seorang ahli!

PL/SQL - Cursors

Apa Itu Cursor?

Sebelum kita mendalam, mari kita mengerti apa itu cursor. Bayangkan Anda di sebuah buffet (ya, saya membuat Anda hungkul sudah!). Anda memiliki piring (program Anda) dan Anda melihat semua makanan lezat (tabel basis data Anda). Cursor seperti tangan Anda – ia membantu Anda memilih item tertentu dari buffet dan menempatkannya di piring Anda. Dalam istilah basis data, cursor memungkinkan Anda mengambil dan memanipulasi data dari basis data Anda, satu baris pada satu waktu.

Sekarang, mari kita eksplor dua jenis cursor di PL/SQL:

Cursor Implicit

Cursor implisit seperti fungsi otomatis di kamera handphone Anda – mereka bekerja di belakang layar tanpa Anda perlu melakukan banyak hal. Oracle membuat dan mengelola cursor ini bagi Anda saat Anda menjalankan pernyataan SQL.

mari kita lihat contoh:

BEGIN
UPDATE employees SET salary = salary * 1.1 WHERE department_id = 20;

IF SQL%FOUND THEN
DBMS_OUTPUT.PUT_LINE('Employees received a 10% raise!');
ELSE
DBMS_OUTPUT.PUT_LINE('No employees in department 20 found.');
END IF;
END;
/

Dalam kode ini:

  1. Kita mengubah gaji karyawan di departemen 20.
  2. SQL%FOUND adalah atribut cursor implisit yang mengembalikan TRUE jika UPDATE mempengaruhi baris mana pun.
  3. Kita menggunakan ini untuk mencetak pesan yang sesuai.

Atribut cursor implisit lainnya termasuk:

  • SQL%ROWCOUNT: Jumlah baris yang dipengaruhi
  • SQL%ISOPEN: Selalu mengembalikan FALSE untuk cursor implisit
  • SQL%NOTFOUND: Sebaliknya SQL%FOUND

Cursor Eksplicit

Cursor eksplicit seperti mode manual di kamera Anda – Anda memiliki kendali lebih, tapi Anda harus mengelola mereka sendiri. Mereka sempurna saat Anda perlu memproses baris satu per satu atau saat Anda ingin memiliki kendali lebih banyak terhadap proses pengambilan data.

Mari kitauraikan siklus hidup cursor eksplicit:

Mendeklarasikan Cursor

Pertama, kita perlu memberitahu blok PL/SQL kita apa data yang kita inginkan untuk bekerja dengannya. Itu seperti memutuskan apa yang Anda inginkan makan di buffet sebelum Anda mulai mengisi piring Anda.

DECLARE
CURSOR c_emp IS
SELECT employee_id, first_name, last_name
FROM employees
WHERE department_id = 30;

Di sini, kita mendeklarasikan cursor bernama c_emp yang akan mengambil detil karyawan dari departemen 30.

Membuka Cursor

Sekarang kita telah memutuskan apa yang kita inginkan, itu saatnya mendekati buffet (atau dalam kasus kita, basis data).

OPEN c_emp;

Baris ini mengatakan ke Oracle untuk menjalankan pernyataan SELECT dan menyiapkan himpunan hasil.

Mengambil Cursor

Ini adalah saat kita benar-benar mulai memasukkan makanan ke piring kita – atau dalam istilah pemrograman, mengambil data satu per satu.

DECLARE
v_emp_id employees.employee_id%TYPE;
v_first_name employees.first_name%TYPE;
v_last_name employees.last_name%TYPE;
BEGIN
OPEN c_emp;
LOOP
FETCH c_emp INTO v_emp_id, v_first_name, v_last_name;
EXIT WHEN c_emp%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(v_emp_id || ' - ' || v_first_name || ' ' || v_last_name);
END LOOP;
CLOSE c_emp;
END;
/

Dalam contoh ini:

  1. Kita mendeklarasikan variabel untuk menahan data yang diambil.
  2. Kita membuka cursor.
  3. Kita menggunakan LOOP untuk mengambil baris satu per satu.
  4. Kita keluar dari loop saat tidak ada lagi baris (c_emp%NOTFOUND).
  5. Kita mencetak detil setiap karyawan.

Menutup Cursor

Seperti Anda mengembalikan piring Anda setelah selesai makan di buffet, kita perlu menutup cursor saat kita selesai.

CLOSE c_emp;

Ini melepaskan sumber daya yang terkait dengan cursor.

Loop Cursor FOR: Sebuah Jalan Pintas

Sekarang, saya punya sebuah rahasia kecil untuk Anda. Ada cara untuk membuat bekerja dengan cursor menjadi lebih mudah – itu disebut Loop Cursor FOR. Itu seperti memiliki seorang teman yang membantu Anda mengisi piring Anda di buffet!

BEGIN
FOR emp_rec IN (SELECT employee_id, first_name, last_name
FROM employees
WHERE department_id = 30) LOOP
DBMS_OUTPUT.PUT_LINE(emp_rec.employee_id || ' - ' ||
emp_rec.first_name || ' ' ||
emp_rec.last_name);
END LOOP;
END;
/

Loop ini melakukan semua pekerjaan bagi Anda:

  1. Itu mendeklarasikan sebuah variabel catatan (emp_rec) untuk menahan setiap baris.
  2. Itu membuka cursor, mengambil setiap baris, dan menutup cursor secara otomatis.
  3. Anda hanya perlu fokus pada apa yang harus dilakukan dengan setiap baris dalam loop.

Metode Cursor: Alat yang Berguna

Mari kita rangkum metode yang kita bisa gunakan dengan cursor dalam tabel yang rapi:

Metode Deskripsi
DECLARE Menentukan cursor dan pernyataan SELECTnya
OPEN Menjalankan pernyataan SELECT dan menyiapkan himpunan hasil
FETCH Mengambil baris berikutnya dari himpunan hasil
CLOSE Menutup cursor dan melepaskan sumber daya

Ingat, dengan kekuatan yang besar datang tanggung jawab yang besar. Selalu tutup cursor Anda saat Anda selesai menggunakannya untuk melepaskan sumber daya!

Dan begitu juga, teman-teman saya! Anda baru saja mengambil langkah pertama ke dunia cursor PL/SQL. Latih konsep ini, mainkan dengan berbagai skenario, dan segera Anda akan dapat menavigasi basis data Anda dengan kemewahan dan presisi seorang pemrogram berpengalaman.

Ingat, dalam pemrograman, seperti dalam kehidupan, kunci adalah untuk terus belajar dan mencoba. Jadi, pergilah, tulis kode, buat kesalahan, dan terutama, bersenang-senang! Siapa tahu? Aplikasi basis data besar berikutnya mungkin hanya berada di ujung jari Anda. Selamat coding!

Credits: Image by storyset