Tuesday, December 5, 2017

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 ...).
  •     Deklarasi jangkar   %TYPE.
  •     % ROW  type, dalam hal ini kita memiliki nested record.
  •     SUBTYPE
  •     Jenis koleksi PL / SQL.
  •     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

0 comments:

Post a Comment

Popular Posts