Tutorial Jenis Objek Oracle PL / SQL dengan CONTOH

Isi kandungan:

Anonim

Apakah Jenis Objek dalam PL / SQL?

Pengaturcaraan Berorientasikan Objek sangat sesuai untuk membangun komponen yang dapat digunakan semula dan aplikasi yang kompleks. Mereka disusun di sekitar "objek" dan bukannya "tindakan" iaitu program yang dirancang untuk berfungsi dan berinteraksi dengan keseluruhan objek dan bukannya tindakan tunggal. Konsep ini membolehkan pengaturcara mengisi dan memanipulasi perincian pada tahap entiti objek.

Gambar di bawah menggambarkan contoh jenis objek di mana akaun bank dianggap sebagai entiti objek. Atribut objek merangkumi perkara yang menyimpan beberapa nilai atribut, misalnya dalam Akaun Bank; itu adalah nombor Akaun, baki bank, dll. sementara kaedah objek menerangkan perkara-perkara seperti mengira kadar faedah, menghasilkan penyata bank, dan lain-lain yang memerlukan proses tertentu untuk diselesaikan.

Dalam PL / SQL pengaturcaraan berorientasikan objek berdasarkan jenis objek.

Jenis objek boleh mewakili entiti dunia nyata. Kami akan membincangkan lebih banyak jenis objek dalam bab ini.

Dalam tutorial ini - anda akan belajar,

  • Komponen Jenis Objek
  • Buat Objek di Oracle
  • Pengisytiharan Permulaan Jenis Objek
  • Pembina
  • Warisan dalam Jenis Objek
  • Persamaan Objek PL / SQL

Komponen Jenis Objek

Jenis objek PL / SQL mengandungi terutamanya dua komponen.

  1. Atribut
  2. Ahli / Kaedah

Atribut

Atribut adalah lajur atau bidang di mana data disimpan. Setiap atribut akan dipetakan ke jenis data yang menentukan jenis pemprosesan dan penyimpanan untuk atribut tersebut. Atribut boleh terdiri daripada jenis data PL / SQL yang sah, atau jenis objek yang lain.

Ahli / Kaedah

Anggota atau Kaedah adalah subprogram yang ditentukan dalam jenis objek. Mereka tidak digunakan untuk menyimpan data. Mereka digunakan terutamanya untuk menentukan proses di dalam jenis objek. Sebagai contoh mengesahkan data sebelum mengisi jenis objek. Mereka dinyatakan dalam bahagian jenis objek dan didefinisikan di bahagian badan jenis objek dari jenis objek. Bahagian badan dalam jenis objek adalah bahagian pilihan. Sekiranya tidak ada anggota, jenis objek tidak akan mengandungi bahagian badan.

Buat Objek di Oracle

Jenis Objek tidak dapat dibuat pada tingkat subprogram, Mereka hanya dapat dibuat pada tingkat skema. Setelah jenis objek ditentukan dalam skema, maka yang sama dapat digunakan dalam subprogram. Jenis objek boleh dibuat menggunakan 'BUAT JENIS'. Badan jenis boleh dibuat hanya setelah membuat jenis objeknya.

CREATE TYPE AS OBJECT(,… );/CREATE TYPE BODY AS OBJECT(MEMBER[PROCEDURE|FUNCTION]ISBEGINEND;‭… ‬);/

Penjelasan Sintaks:

  • Sintaks di atas menunjukkan penciptaan 'OBJEK' dengan atribut dan 'OBJEK-BADAN' dengan kaedah.
  • Kaedahnya juga boleh berlebihan pada badan objek.

Pengisytiharan Permulaan Jenis Objek

Seperti komponen lain dalam PL / SQL, jenis objek juga perlu dinyatakan sebelum menggunakannya dalam program.

Setelah jenis objek dibuat, ia dapat digunakan di bahagian deklarasi subprogram untuk menyatakan pemboleh ubah jenis objek tersebut.

Setiap kali pemboleh ubah dinyatakan dalam subprogram sebagai jenis objek, pada saat run-time, contoh baru dari jenis objek akan dibuat, dan contoh yang baru dibuat ini dapat dirujuk ke nama pemboleh ubah. Dengan cara ini, satu jenis objek dapat menyimpan beberapa nilai dalam keadaan yang berbeza.

DECLARE ;BEGIN… END;/

Penjelasan Sintaks:

  • Sintaks di atas menunjukkan pengisytiharan pemboleh ubah sebagai jenis objek di bahagian deklaratif.

Setelah pemboleh ubah dinyatakan sebagai jenis objek dalam subprogram, ia akan menjadi atom nol iaitu keseluruhan objek itu sendiri nol. Ia perlu diinisialisasi dengan nilai untuk menggunakannya dalam program. Mereka boleh dimulakan dengan menggunakan konstruktor.

Pembina adalah kaedah tersirat dari objek yang boleh disebut dengan nama yang sama dengan jenis objek. Sintaks di bawah menunjukkan inisialisasi jenis objek.

DECLARE ;BEGIN:=();END;/

Penjelasan Sintaks:

  • Sintaks di atas menunjukkan permulaan dari jenis objek dengan nilai nol.
  • Sekarang objek itu sendiri tidak nol seperti yang telah diinisialisasi, tetapi atribut di dalam objek akan menjadi nol kerana kita belum memberikan nilai pada atribut ini.

Pembina

Pembina adalah kaedah tersirat dari objek yang boleh disebut dengan nama yang sama dengan jenis objek. Setiap kali objek tersebut dirujuk untuk pertama kalinya, konstruktor ini akan dipanggil secara tersirat.

Kita juga dapat menginisialisasi objek menggunakan konstruktor ini. Pembina boleh didefinisikan secara eksplisit dengan mendefinisikan anggota dalam badan jenis objek dengan nama yang sama dengan jenis objek.

Contoh 1 : Dalam contoh berikut kita akan menggunakan anggota jenis objek untuk memasukkan catatan ke dalam tabel emp dengan nilai ('RRR', 1005, 20000, 1000) dan ('PPP', 1006, 20000, 1001). Setelah data dimasukkan, kita akan memaparkan yang sama menggunakan anggota jenis objek. Kami juga akan menggunakan konstruktor eksplisit untuk mengisi id pengurus secara lalai dengan nilai 1001 untuk rekod kedua.

Kami akan melaksanakannya dengan langkah-langkah di bawah.

  • Langkah 1:
    • Buat jenis Objek
    • Badan jenis objek
  • Langkah 2: Membuat blok tanpa nama untuk memanggil jenis objek yang dibuat melalui konstruktor tersirat untuk emp_no 1005.
  • Langkah 3: Membuat blok tanpa nama untuk memanggil jenis objek yang dibuat melalui konstruktor eksplisit untuk emp_no 1006.

Langkah 1) Buat jenis objek dan jenis objek

CREATE TYPE emp_object AS OBJECT(emp_no NUMBER,emp_name VARCHAR2(50),salary NUMBER,manager NUMBER,CONSTRUCTOR FUNCTION emp_object(p_emp_no NUMBER, p_emp_name VARCHAR2,p_salary NUMBER) RETURN SELF AS RESULT),MEMBER PROCEDURE insert_records,MEMBER PROCEDURE display_records);/
CREATE OR REPLACE TYPE BODY emp_object ASCONSTRUCTOR FUNCTION emp_object(p_emp_no NUMBER,p_emp_name VARCHAR2,p_salary NUMBER)RETURN SELF AS RESULTISBEGINDbms_output.put_line(’Constructor fired… ');SELF.emp_no:=p_emp_no;|SELF.emp_name:=p_emp_name;SELF.salary:=p_salary;SELF.managerial:=1001;RETURN;END:MEMBER PROCEDURE insert_recordsISBEGININSERT INTO emp VALUES(emp_noemp_name,salary,manager);ENDMEMBER PROCEDURE display_recordsISBEGINDbms_output.put_line('Employee Name:'||emp_name);Dbms_output.put_line('Employee Number:'||emp_no);Dbms_output.put_line('Salary':'||salary);Dbms_output.put_line('Manager:'||manager);END:END:/

Penjelasan Kod

  • Baris kod 1-9 : Membuat objek objek 'emp_object' dengan 4 atribut dan 3 anggota. Ia mengandungi definisi pembina dengan hanya 3 parameter. (Pembina tersirat sebenarnya akan mengandungi bilangan parameter yang sama dengan bilangan atribut yang terdapat pada jenis objek)
  • Baris kod 10 : Membuat badan jenis.
  • Garis kod 11-21 : Mendefinisikan konstruktor eksplisit. Menetapkan nilai parameter ke atribut dan menetapkan nilai untuk atribut 'manager' dengan nilai lalai '1001'.
  • Baris kod 22-26 : Mendefinisikan 'insert_records' anggota di mana nilai atribut dimasukkan ke dalam jadual 'emp'.
  • Garis kod 27-34 : Mendefinisikan 'display_records' anggota di mana menampilkan nilai-nilai atribut jenis objek.

Pengeluaran

Jenis dibuat

Jenis badan dibuat

Langkah 2) Membuat blok tanpa nama untuk memanggil jenis objek yang dibuat melalui konstruktor tersirat untuk emp_no 1005

DECLAREguru_emp_det emp_object;BEGINguru_emp_det:=emp_object(1005,’RRR',20000,1000);guru_emp_det.display_records;guru_emp_det.insert_records;COMMIT;END;

Penjelasan Kod

  • Garis kod 37-45 : Memasukkan rekod menggunakan konstruktor tersirat. Panggilan ke konstruktor mengandungi bilangan nilai atribut yang sebenarnya.
  • Baris kod 38 : Menyatakan guru_emp_det sebagai jenis objek 'emp_object'.
  • Baris kod 41 : Pernyataan 'guru_emp_det.display_records' yang disebut fungsi anggota 'diplay_records' dan nilai atribut dipaparkan
  • Baris kod 42 : Pernyataan 'guru_emp_det.insert_records' disebut fungsi anggota 'insert_records' dan nilai atribut dimasukkan ke dalam jadual.

Pengeluaran

Nama Pekerja: RRR

Nombor Pekerja: 1005

Gaji: 20000

Pengurus: 1000

Langkah 3) Membuat blok tanpa nama untuk memanggil jenis objek yang dibuat melalui konstruktor eksplisit untuk emp_no 1006

DECLAREguru_emp_det emp_object;BEGINguru_emp_det:=emp_object(1006,'PPP',20000);guru_emp_det.display_records;guru_emp_det.insert_records;COMMIT;END;/

Pengeluaran

Employee Name:PPPEmployee Number:1006Salary:20000Manager:1001

Penjelasan Kod:

  • Garis kod 46-53 : Memasukkan rekod menggunakan konstruktor eksplisit.
  • Baris kod 46 : Menyatakan guru_emp_det sebagai objek objek 'emp_object'.
  • Baris kod 50 : Pernyataan 'guru_emp_det.display_records' yang disebut fungsi anggota 'display_records' dan nilai atribut dipaparkan
  • Baris kod 51 : Pernyataan 'guru_emp_det.insert_records' disebut fungsi anggota 'insert_records' dan nilai atribut dimasukkan ke dalam jadual.

Warisan dalam Jenis Objek

Properti warisan membolehkan jenis sub-objek mengakses semua atribut dan anggota jenis objek super atau jenis objek induk.

Jenis sub-objek disebut jenis objek yang diwarisi, dan jenis objek super disebut jenis objek induk. Sintaks di bawah menunjukkan cara membuat jenis objek induk dan warisan.

CREATE TYPE  AS OBJECT(,… )NOT FINAL;/

Penjelasan Sintaks:

  • Sintaks di atas menunjukkan penciptaan jenis SUPER.
CREATE TYPEUNDER(,.);/

Penjelasan Sintaks:

  • Sintaks di atas menunjukkan penciptaan jenis SUB. Ia mengandungi semua anggota dan atribut dari jenis objek induk.

Contoh1: Dalam contoh di bawah ini, kita akan menggunakan harta warisan untuk memasukkan rekod dengan id pengurus sebagai '1002' untuk rekod berikut ('RRR', 1007, 20000).

Kami akan melaksanakan program di atas dengan langkah-langkah berikut

  • Langkah 1: Buat jenis SUPER.
  • Langkah 2: Buat jenis dan badan SUB.
  • Langkah 3: Membuat blok tanpa nama untuk memanggil jenis SUB.

Langkah 1) Buat jenis SUPER atau jenis Ibu Bapa.

CREATE TYPE emp_object AS OBJECT(emp_no NUMBER,emp_name VARCHAR2(50),salary NUMBER,manager NUMBER,CONSTRUCTOR FUNCTION emp_object(p_emp_no NUMBER,p_emp_name VARCHAR2(50),p_salary NUMBER)RETURN SELF AS RESULT),MEMBER PROCEDURE insert_records,MEMBER PROCEDURE display_records)NOT FINAL;/

Penjelasan Kod:

  • Baris kod 1-9 : Membuat objek objek 'emp_object' dengan 4 atribut dan 3 anggota. Ia mengandungi definisi pembina dengan hanya 3 parameter. Ia telah dinyatakan sebagai 'TIDAK AKHIR' jadi ini adalah jenis ibu bapa.

Langkah 2) Buat jenis SUB di bawah jenis SUPER.

CREATE OR REPLACE TYPE sub_emp_objectUNDER emp_object(default_manager NUMBER,MEMBER PROCEDURE insert_default_mgr);/CREATE OR REPLACE TYPE BODY sub_emp_objectASMEMBER PROCEDURE insert_default_mgrISBEGININSERT INTO empVALUES(emp_no,emp_name:salary,manager):END;END;/

Penjelasan Kod:

  • Baris kod 10-13 : Membuat sub_emp_object sebagai jenis yang diwarisi dengan tambahan satu atribut 'default_manager' dan pengisytiharan prosedur anggota.
  • Garis kod 14 : Membuat badan untuk jenis objek yang diwarisi.
  • Baris kod 1 6 -21 : Mendefinisikan prosedur anggota yang memasukkan catatan ke dalam jadual "emp" dengan nilai dari jenis objek 'SUPER', kecuali untuk nilai pengurus. Untuk nilai pengurus, ia menggunakan 'default_manager' dari jenis 'SUB'.

Langkah 3) Membuat blok tanpa nama untuk memanggil jenis SUB

DECLAREguru_emp_det sub_emp_object;BEGINguru_emp_det:= sub_emp_object(1007,'RRR',20000,1000,1002);guru_emp_det.insert_default_mgr;COMMIT;END;/

Penjelasan Kod:

  • Baris kod 25 : Menyatakan 'guru_emp_det' sebagai jenis 'sub_emp_object'.
  • Garis kod 27 : Memulakan objek dengan konstruktor tersirat. Pembina mempunyai 5 parameter (4 atribut dari jenis PARENT dan 2 atribut dari jenis SUB). Parameter terakhir (1002) menentukan nilai untuk atribut default_manager
  • Baris kod 28 : Memanggil anggota 'insert_default_mgr' untuk memasukkan rekod dengan id pengurus lalai yang disalurkan dalam konstruktor.

Persamaan Objek PL / SQL

Contoh objek yang tergolong dalam objek yang sama dapat dibandingkan untuk kesamaan. Untuk ini, kita perlu mempunyai kaedah khas dalam jenis objek yang disebut kaedah 'ORDER'.

Kaedah 'ORDER' ini mestilah fungsi yang mengembalikan jenis angka. Dibutuhkan dua parameter sebagai input, (parameter pertama: id instance objek diri, parameter kedua: id instance objek lain).

Id dari dua objek objek dibandingkan, dan hasilnya dikembalikan dalam angka.

  • Nilai positif menunjukkan bahawa objek objek SELF lebih besar daripada contoh lain.
  • Nilai negatif menunjukkan bahawa instance objek SELF lebih rendah daripada instance lain.
  • Nol menunjukkan bahawa objek objek SELF sama dengan contoh lain.
  • Sekiranya mana-mana kejadian itu nol, fungsi ini akan kembali menjadi nol.
CREATE TYPE BODYAS OBJECT(ORDER MEMBER FUNCTION match(
 object_type_name_ 1)RETURN INTEGER IS BEGINIF parameter THENRETURN -1; --any negative number will doELSIF id>c.id THENRETURN 1; -any positive number will doELSERETURN 0;END IF;END;… );/

Penjelasan Sintaks:

  • Sintaks di atas menunjukkan fungsi PESANAN yang perlu dimasukkan dalam badan jenis untuk pemeriksaan kesetaraan.
  • Parameter untuk fungsi ini harus merupakan contoh dari jenis objek yang sama.
  • Fungsi di atas boleh disebut sebagai "obj_instance_1.match (obj_instance_2)" dan ungkapan ini akan mengembalikan nilai berangka seperti yang ditunjukkan, di mana obj_instance_1 dan obj_instance_2 adalah contoh dari objek_type_name.

Contoh1 : Dalam contoh berikut kita akan melihat bagaimana membandingkan dua objek. Kami akan membuat dua contoh dan kami akan membandingkan 'gaji' atribut di antara mereka. Kami akan melakukan dua langkah.

  • Langkah 1: Membuat jenis objek dan badan.
  • Langkah 2: Membuat blok tanpa nama untuk memanggil membandingkan contoh objek.

Langkah 1) Membuat jenis objek dan badan.

CREATE TYPE emp_object_equality AS OBJECT(salary NUMBER,ORDER MEMBER FUNCTION equals(c emp_object_equality)RETURN INTEGER);/
CREATE TYPE BODY emp_object_equality ASORDER MEMBER FUNCTION equals(c emp_object_equality)RETURN INTEGERISBEGIN‭ ‬IF salaryc.salaryTHEN RETURN 1;ELSERETURN 0;END IF:‭ ‬END;END;/

Penjelasan Kod:

  • Baris kod 1-4: Membuat jenis objek 'emp_object_equality' dengan 1 atribut dan 1 anggota.
  • Baris kod 6-16 : Mendefinisikan fungsi ORDER yang membandingkan atribut 'gaji' dari contoh SELF dan jenis contoh parameter. Ia kembali negatif jika gaji SELF lebih rendah atau positif jika gaji SELF lebih besar dan 0 jika gaji sama.

Keluaran Kod:

Jenis dibuat

Langkah 2) Membuat blok tanpa nama untuk memanggil membandingkan contoh objek.

DECLAREl_obj_l emp_object_equality;l_obj_2 emp_object_equality;BEGINl_obj_l:=emp_object_equality(15000);l_obj_2:=emp_object_equality(17000);IF l_obj_1.equalS(l_obj_2)>0THENDbms_output.put_line(’Salary of first instance is greater’):ELSIF l_obj_l.equalS(l_obj_2)<0THENDbms_output.put_line(’Salary of second instance is greater’);ELSEDbms_output.put_line(’Salaries are equal’);END IF;END;/

Pengeluaran

Salary of second instance is greater

Penjelasan Kod:

  • Baris kod 20 : Menyatakan l_obj_1 jenis emp_object_equality.
  • Baris kod 21 : Menyatakan l_obj_2 jenis emp_object_equality.
  • Baris kod 23 : Memulakan l_obj_1 dengan nilai gaji sebagai '15000'
  • Baris kod 24 : Memulakan l_obj_1 dengan nilai gaji sebagai '17000'
  • Baris kod 25-33 : Cetak mesej berdasarkan nombor pengembalian dari fungsi PESANAN.

Ringkasan

Dalam bab ini, kita telah melihat jenis objek dan sifatnya. Kami juga telah membincangkan mengenai Pembina, Anggota, Atribut, Warisan dan Persamaan dalam objek PL / SQL.