Apa itu Record PL / SQL?
Record / Catatan PL / SQL adalah struktur data gabungan yang merupakan kumpulan data terkait yang tersimpan dalam kolom. Setiap field dalam data PL / SQL memiliki nama dan tipe data tersendiri.
Mendeklarasikan Record PL / SQL
PL / SQL menyediakan tiga cara untuk mendeklarasikan record:
table-based record, cursor-based record and programmer-defined records.
Mendeklarasikan Table-based Record
Untuk mendeklarasikan record berbasis tabel kamu bisa menggunakan nama tabel dengan atribut% ROWTYPE. Bidang data PL / SQL memiliki nama dan tipe data yang sama dengan kolom tabel.
Berikut ini menggambarkan deklarasi rekaman berbasis tabel:
DECLARE
table_based_record table_name%ROWTYPE;
Setelah memiliki record berbasis tabel, kamu bisa menggunakannya dengan berbagai cara, misalnya dalam SQL SELECT statement sebagai berikut:
SET SERVEROUTPUT ON SIZE 1000000;
DECLARE
r_emp employees%ROWTYPE;
n_emp_id employees.employee_id%TYPE := 200;
BEGIN
SELECT *
INTO r_emp
FROM employees
WHERE employee_id = n_emp_id;
-- print out the employee's first name
DBMS_OUTPUT.PUT_LINE(r_emp.first_name);
END;
/
Dalam contoh di atas:
- Pertama, kami mendefinisikan sebuah catatan berdasarkan tabel karyawan di database sampel SDM.
- Kedua, kami menggunakan pernyataan SELECT untuk mengambil informasi karyawan dari id karyawan 200 dan mengisi data ke dalam catatan r_emp.
- Ketiga, kami mencetak nama depan karyawan terpilih dari catatan karyawan r_emp.
Mendeklarasikan Programmer-defined Record
Untuk mendeklarasikan record yang ditentukan programmer, pertama kamu harus mendefinisikan tipe record dengan menggunakan pernyataan TYPE dengan field record secara eksplisit. Kemudian, kamu dapat mendeklarasikan rekaman berdasarkan jenis rekaman yang telah kamu tetapkan.
Berikut ini mengilustrasikan sintaks dari definisi yang didefinisikan pemrogram dengan pernyataan TYPE:
TYPE type_name IS RECORD
(field1 data_type1 [NOT NULL] := [DEFAULT VALUE],
field2 data_type2 [NOT NULL] := [DEFAULT VALUE],
...
fieldn data_type3 [NOT NULL] := [DEFAULT VALUE]
);
Jenis data bidang dapat berupa salah satu dari berikut ini:
- Jenis skalar (VARCHAR2, NUMBER ...).
- % ROW type, dalam hal ini kita memiliki nested record.
- Variabel kursor REF CURSOR.
Setelah Anda menentukan jenis rekaman, kamu dapat mendeklarasikan catatan berdasarkan jenis rekaman sebagai berikut:
record_name type_name;
Contoh berikut menunjukkan bagaimana cara mendeklarasikan programmer-defined record:
SET SERVEROUTPUT ON SIZE 1000000;
DECLARE
TYPE t_name IS RECORD(
first_name employees.first_name%TYPE,
last_name employees.last_name%TYPE
);
r_name t_name; -- name record
n_emp_id employees.employee_id%TYPE := 200;
BEGIN
SELECT first_name,
last_name
INTO r_name
FROM employees
WHERE employee_id = n_emp_id;
-- print out the employee's name
DBMS_OUTPUT.PUT_LINE(r_name.first_name || ',' || r_name.last_name );
END;
/
Mendeklarasikan Record berbasis kursor / record based on a cursor
Kamu dapat menentukan catatan berdasarkan kursor. Pertama, kamu harus menentukan kursor. Dan kemudian kamu dapat menggunakan% ROWTYPE dengan variabel kursor untuk menyatakan sebuah catatan. Bidang catatan sesuai dengan kolom dalam pernyataan SELECT kursor.
Berikut ini adalah contoh untuk mendeklarasikan record berdasarkan kursor.
SET SERVEROUTPUT ON SIZE 1000000;
DECLARE
CURSOR cur_emp IS
SELECT *
FROM employees
WHERE employee_id = 200;
emp_rec cur_emp%ROWTYPE;
BEGIN
NULL;
END;
/
Bekerja dengan PL / SQL Record
Setelah memiliki catatan PL / SQL, kamu dapat bekerja dengan catatan secara keseluruhan atau kamu dapat bekerja dengan bidang catatan individual.
Bekerja dengan catatan PL / SQL pada tingkat rekor
Pada tingkat rekor, kamu dapat melakukan hal berikut:
- Anda dapat menetapkan catatan PL / SQL ke catatan PL / SQL lainnya. Sepasang catatan PL / SQL harus memiliki jumlah bidang yang sama dan tipe data dari masing-masing bidang harus dapat dikonversi.
- Anda dapat menetapkan nilai NULL PL / SQL dengan menetapkan catatan yang tidak diinisiasi.
- Sebuah catatan PL / SQL dapat digunakan sebagai argumen parameter dalam suatu fungsi
- Anda bisa mengembalikan catatan PL / SQL dari sebuah fungsi
- Untuk memeriksa apakah catatan NULL, Anda harus memeriksa masing-masing bidang catatan.
- Untuk membandingkan dua catatan, Anda harus membandingkan masing-masing bidang masing-masing catatan.
Berikut adalah contoh bekerja dengan catatan PL / SQL pada tingkat rekor:
SET serveroutput ON SIZE 1000000;
DECLARE
TYPE t_name IS RECORD(
first_name employees.first_name%TYPE,
last_name employees.last_name%TYPE
);
r_name t_name;
r_name2 t_name;
r_name_null t_name;
n_emp_id employees.employee_id%TYPE := 200;
BEGIN
-- assign employee's infomation to record
SELECT first_name,
last_name
INTO r_name
FROM employees
WHERE employee_id = n_emp_id;
-- assign record to another record
r_name2 := r_name;
-- print out the employee's name
DBMS_OUTPUT.PUT_LINE(r_name2.first_name || ',' || r_name2.last_name);
-- assign record to NULL
r_name2 := r_name_null;
-- check NULL for each individual field
IF r_name2.first_name IS NULL AND
r_name2.last_name IS NULL THEN
DBMS_OUTPUT.PUT_LINE('Record r_name2 is NULL');
END IF;
END;
/
Bekerja dengan PL/SQL record at field level
Seperti yang kamu lihat pada contoh di atas, kita dapat merujuk ke bidang catatan dengan menggunakan notasi titik (.) Sebagai berikut:
record_name.field
Jika kamu mengacu pada variabel rekaman dalam paket atau skema yang berbeda, kamu perlu secara eksplisit menentukan informasi tersebut seperti yang ditunjukkan di bawah ini:
[schema_name.] [package_name.] record_name.field
Kamu dapat menggunakan operator penugasan (: =) untuk mengubah nilai bidang catatan yang kamu rujuk.
Untuk catatan bersarang kamu perlu menggunakan notasi titik ekstra (.)
Contoh berikut menunjukkan bagaimana menggunakan data PL / SQL pada field level:
DECLARE
TYPE t_address IS RECORD(
house_number VARCHAR2(6),
street VARCHAR2(50),
phone VARCHAR2(15),
region VARCHAR2(10),
postal_code VARCHAR2(10),
country VARCHAR2(25)
);
TYPE t_contact IS RECORD(
home t_address,
business t_address
);
r_contact t_contact;
BEGIN
r_contact.business.house_number := '500';
r_contact.business.street := 'Oracle Parkway';
r_contact.business.region := 'CA';
r_contact.business.postal_code := '94065';
r_contact.business.country := 'USA';
r_contact.business.phone := '+1.800.223.1711';
END;
Dalam tutorial ini, kamu telah belajar bagaimana menggunakan data PL / SQL untuk memanipulasi data dengan lebih efisien, dan membuat kode kamu lebih bersih dan mudah perawatannya.
Sumber : http://www.plsqltutorial.com