Oracle บทช่วยสอนประเภทวัตถุ PL/SQL พร้อมตัวอย่าง
ประเภทวัตถุใน PL/SQL คืออะไร
การเขียนโปรแกรมเชิงวัตถุเหมาะเป็นพิเศษสำหรับการสร้างส่วนประกอบที่นำมาใช้ซ้ำได้และแอปพลิเคชันที่ซับซ้อน โดยจะจัดระบบตาม "วัตถุ" มากกว่า "การกระทำ" กล่าวคือ โปรแกรมได้รับการออกแบบมาให้ทำงานและโต้ตอบกับวัตถุทั้งหมดแทนที่จะดำเนินการเพียงขั้นตอนเดียว แนวคิดนี้ช่วยให้โปรแกรมเมอร์สามารถเพิ่มและจัดการรายละเอียดในระดับเอนทิตีของวัตถุได้
รูปภาพด้านล่างแสดงตัวอย่างของชนิดออบเจ็กต์ซึ่งบัญชีธนาคารถือเป็นเอนทิตีออบเจ็กต์ คุณลักษณะของวัตถุรวมถึงสิ่งที่มีค่าแอตทริบิวต์บางอย่าง เช่น ในบัญชีธนาคาร เป็นหมายเลขบัญชี ยอดคงเหลือในธนาคาร ฯลฯ ในขณะที่วิธีการแบบอ็อบเจ็กต์จะอธิบายสิ่งต่างๆ เช่น การคำนวณอัตราดอกเบี้ย การสร้างใบแจ้งยอดจากธนาคาร ฯลฯ ซึ่งต้องใช้กระบวนการบางอย่างจึงจะเสร็จสมบูรณ์
ในการเขียนโปรแกรมเชิงวัตถุ PL/SQL ขึ้นอยู่กับประเภทของวัตถุ
ประเภทออบเจ็กต์สามารถแสดงถึงเอนทิตีในโลกแห่งความเป็นจริงได้ เราจะพูดถึงประเภทวัตถุเพิ่มเติมในบทนี้
ส่วนประกอบของประเภทวัตถุ
PL / SQL ประเภทวัตถุประกอบด้วยสององค์ประกอบหลัก
- คุณสมบัติ
- สมาชิก/วิธีการ
คุณสมบัติ
คุณลักษณะคือคอลัมน์หรือช่องที่เก็บข้อมูล แต่ละแอตทริบิวต์จะถูกแมปกับประเภทข้อมูลที่กำหนดประเภทการประมวลผลและการจัดเก็บสำหรับแอตทริบิวต์นั้น คุณลักษณะสามารถเป็นค่าใดก็ได้ที่ถูกต้อง ประเภทข้อมูล PL/SQLหรืออาจเป็นวัตถุประเภทอื่นก็ได้
สมาชิก/วิธีการ
Members หรือ Method คือโปรแกรมย่อยที่กำหนดไว้ในประเภทอ็อบเจ็กต์ พวกเขาไม่ได้ใช้เพื่อจัดเก็บข้อมูลใดๆ ส่วนใหญ่จะใช้เพื่อกำหนดกระบวนการภายในประเภทวัตถุ สำหรับตัวอย่างการตรวจสอบข้อมูลก่อนเติมประเภทออบเจ็กต์ มีการประกาศในส่วนประเภทออบเจ็กต์และกำหนดไว้ในส่วนเนื้อหาประเภทออบเจ็กต์ของประเภทออบเจ็กต์ ส่วนเนื้อหาในประเภทวัตถุเป็นส่วนเสริม หากไม่มีสมาชิกอยู่ ประเภทอ็อบเจ็กต์จะไม่มีส่วนของร่างกาย
สร้างวัตถุใน Oracle
ประเภทอ็อบเจ็กต์ไม่สามารถสร้างได้ในระดับโปรแกรมย่อย แต่สามารถสร้างได้ในระดับสคีมาเท่านั้น เมื่อกำหนดประเภทอ็อบเจ็กต์ในสคีมาแล้ว ก็สามารถใช้ประเภทเดียวกันในโปรแกรมย่อยได้ สามารถสร้างประเภทออบเจ็กต์ได้โดยใช้ 'CREATE TYPE' สามารถสร้างเนื้อหาประเภทได้หลังจากสร้างประเภทออบเจ็กต์แล้วเท่านั้น
CREATE TYPE<object_type_name> AS OBJECT ( <attribute_l><datatype>, . . ); / CREATE TYPE BODY<object_type_name> AS OBJECT ( MEMBER[PROCEDURE|FUNCTION]<member_name> IS <declarative section> BEGIN <execution part> END; . . ); /
คำอธิบายไวยากรณ์:
- ไวยากรณ์ข้างต้นแสดงการสร้าง 'OBJECT' ด้วยแอตทริบิวต์และ 'OBJECT-BODY' ด้วยวิธีการ
- วิธีการนี้สามารถโอเวอร์โหลดได้ในตัววัตถุ
การประกาศการเริ่มต้นประเภทวัตถุ
เช่นเดียวกับส่วนประกอบอื่นๆ ใน PL/SQL จำเป็นต้องประกาศประเภทอ็อบเจ็กต์ก่อนที่จะใช้ในโปรแกรม
เมื่อประเภทอ็อบเจ็กต์ถูกสร้างขึ้นแล้ว จะสามารถนำมาใช้ในส่วนการประกาศโปรแกรมย่อยเพื่อประกาศตัวแปรของประเภทอ็อบเจ็กต์นั้น
เมื่อใดก็ตามที่ตัวแปรใดๆ ถูกประกาศในโปรแกรมย่อยเป็นประเภทออบเจ็กต์ ขณะรันไทม์อินสแตนซ์ใหม่ของประเภทออบเจ็กต์จะถูกสร้างขึ้น และอินสแตนซ์ที่สร้างขึ้นใหม่นี้สามารถอ้างอิงถึงชื่อตัวแปรได้ ด้วยวิธีนี้ อ็อบเจ็กต์ประเภทเดียวสามารถเก็บค่าได้หลายค่าภายใต้อินสแตนซ์ที่ต่างกัน
DECLARE <variable_name> <object_type_name>; BEGIN . . END; /
คำอธิบายไวยากรณ์:
- ไวยากรณ์ข้างต้นแสดงการประกาศตัวแปรเป็นประเภทวัตถุในส่วนการประกาศ
เมื่อตัวแปรถูกประกาศเป็นประเภทอ็อบเจ็กต์ในโปรแกรมย่อยแล้ว ตัวแปรนั้นจะกลายเป็นค่าว่างโดยอัตโนมัติ กล่าวคือ อ็อบเจ็กต์ทั้งหมดจะกลายเป็นค่าว่าง ตัวแปรต้องได้รับการเริ่มต้นด้วยค่าต่างๆ จึงจะใช้ค่าเหล่านี้ในโปรแกรมได้ โดยสามารถเริ่มต้นค่าได้โดยใช้ตัวสร้าง
ตัวสร้างเป็นวิธีการโดยนัยของวัตถุที่สามารถอ้างอิงด้วยชื่อเดียวกันกับประเภทวัตถุ ไวยากรณ์ด้านล่างแสดงการเริ่มต้นของประเภทวัตถุ
DECLARE <variable_name> <object_type_name>; BEGIN <variable_name>:=<object_type_name>(); END; /
คำอธิบายไวยากรณ์:
- ไวยากรณ์ข้างต้นแสดงการเริ่มต้นของอินสแตนซ์ประเภทวัตถุที่มีค่าว่าง
- ตอนนี้ออบเจ็กต์เองไม่เป็นโมฆะเนื่องจากได้เริ่มต้นใช้งานแล้ว แต่คุณลักษณะภายในออบเจ็กต์จะเป็นโมฆะเนื่องจากเราไม่ได้กำหนดค่าใด ๆ ให้กับคุณลักษณะเหล่านี้
ตัวสร้าง
ตัวสร้างเป็นวิธีการโดยนัยของวัตถุที่สามารถอ้างอิงด้วยชื่อเดียวกันกับประเภทวัตถุ เมื่อใดก็ตามที่วัตถุถูกอ้างอิงเป็นครั้งแรก Constructor นี้จะถูกเรียกโดยปริยาย
นอกจากนี้เรายังสามารถเริ่มต้นวัตถุโดยใช้ตัวสร้างเหล่านี้ ตัวสร้างสามารถกำหนดได้อย่างชัดเจนโดยการกำหนดสมาชิกในเนื้อหาประเภทวัตถุที่มีชื่อเดียวกันกับประเภทวัตถุ
1 ตัวอย่าง:ในตัวอย่างต่อไปนี้ เราจะใช้เมมเบอร์ประเภทออบเจ็กต์เพื่อแทรกเรกคอร์ดลงในตาราง emp ด้วยค่า ('RRR', 1005, 20000, 1000) และ ('PPP', 1006, 20000, 1001) เมื่อแทรกข้อมูลแล้ว เราจะแสดงข้อมูลเดียวกันโดยใช้เมมเบอร์ประเภทออบเจ็กต์ นอกจากนี้ เรายังจะใช้คอนสตรัคเตอร์ที่ชัดเจนเพื่อเติมค่า 1001 ลงใน ID ผู้จัดการตามค่าเริ่มต้นสำหรับเรกคอร์ดที่สอง
เราจะดำเนินการตามขั้นตอนด้านล่าง
- Step1:
- สร้างประเภทวัตถุ
- เนื้อความประเภทวัตถุ
- ขั้นตอนที่ 2: การสร้างบล็อกที่ไม่ระบุชื่อเพื่อเรียกประเภทวัตถุที่สร้างขึ้นผ่านตัวสร้างโดยนัยสำหรับ emp_no 1005
- ขั้นตอนที่ 3: การสร้างบล็อกที่ไม่ระบุชื่อเพื่อเรียกประเภทวัตถุที่สร้างขึ้นผ่านตัวสร้างที่ชัดเจนสำหรับ emp_no 1006
ขั้นตอน 1) สร้างประเภทวัตถุและเนื้อหาประเภทวัตถุ
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 AS CONSTRUCTOR FUNCTION emp_object(p_emp_no NUMBER,p_emp_name VARCHAR2, p_salary NUMBER) RETURN SELF AS RESULT IS BEGIN Dbms_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_records IS BEGIN INSERT INTO emp VALUES(emp_noemp_name,salary,manager); END MEMBER PROCEDURE display_records IS BEGIN Dbms_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: /
คำอธิบายรหัส
- รหัสบรรทัด 1-9: การสร้างประเภทวัตถุ 'emp_object' ด้วย 4 แอตทริบิวต์และ 3 สมาชิก ประกอบด้วยคำจำกัดความของตัวสร้างที่มีพารามิเตอร์เพียง 3 ตัวเท่านั้น (ตัวสร้างโดยนัยจริงจะมีจำนวนพารามิเตอร์เท่ากับจำนวนคุณลักษณะที่มีอยู่ในประเภทวัตถุ)
- รหัสบรรทัดที่ 10: การสร้างเนื้อหาประเภท
- รหัสบรรทัด 11-21: การกำหนด Constructor ที่ชัดเจน การกำหนดค่าพารามิเตอร์ให้กับแอตทริบิวต์และการกำหนดค่าสำหรับแอตทริบิวต์ 'ผู้จัดการ' ด้วยค่าเริ่มต้น '1001'
- รหัสบรรทัด 22-26: การกำหนดสมาชิก 'insert_records' ซึ่งค่าแอตทริบิวต์จะถูกแทรกลงในตาราง 'emp'
- รหัสบรรทัด 27-34: การกำหนดสมาชิก 'display_records' ซึ่งแสดงค่าของแอตทริบิวต์ประเภทอ็อบเจ็กต์
เอาท์พุต
สร้างประเภทแล้ว
ประเภทเนื้อหาที่สร้างขึ้น
ขั้นตอน 2) การสร้างบล็อกที่ไม่ระบุชื่อเพื่อเรียกประเภทวัตถุที่สร้างขึ้นผ่านตัวสร้างโดยนัยสำหรับ emp_no 1005
DECLARE guru_emp_det emp_object; BEGIN guru_emp_det:=emp_object(1005,’RRR',20000,1000); guru_emp_det.display_records; guru_emp_det.insert_records; COMMIT; END;
คำอธิบายรหัส
- รหัสบรรทัด 37-45: การแทรกบันทึกโดยใช้ตัวสร้างโดยนัย การเรียกตัวสร้างมีจำนวนค่าแอตทริบิวต์ตามจริง
- รหัสบรรทัดที่ 38: ประกาศ guru_emp_det เป็นชนิดอ็อบเจ็กต์ของ 'emp_object'
- รหัสบรรทัดที่ 41:คำสั่ง 'guru_emp_det.display_records' เรียกฟังก์ชันสมาชิก 'diplay_records' และแสดงค่าแอตทริบิวต์
- รหัสบรรทัดที่ 42: คำสั่ง 'guru_emp_det.insert_records' ที่เรียกว่าฟังก์ชันสมาชิก 'insert_records' และค่าแอตทริบิวต์จะถูกแทรกลงในตาราง
เอาท์พุต
ชื่อพนักงาน: RRR
หมายเลขพนักงาน: 1005
เงินเดือน: 20000
ผู้จัดการ : 1000
ขั้นตอน 3) การสร้างบล็อกที่ไม่ระบุชื่อเพื่อเรียกประเภทวัตถุที่สร้างขึ้นผ่านตัวสร้างที่ชัดเจนสำหรับ emp_no 1006
DECLARE guru_emp_det emp_object; BEGIN guru_emp_det:=emp_object(1006,'PPP',20000); guru_emp_det.display_records; guru_emp_det.insert_records; COMMIT; END; /
เอาท์พุต
Employee Name:PPP Employee Number:1006 Salary:20000 Manager:1001
คำอธิบายรหัส:
- รหัสบรรทัด 46-53: การแทรกบันทึกโดยใช้ตัวสร้างที่ชัดเจน
- รหัสบรรทัดที่ 46: ประกาศ guru_emp_det เป็นชนิดอ็อบเจ็กต์ของ 'emp_object'
- รหัสบรรทัดที่ 50:คำสั่ง 'guru_emp_det.display_records' เรียกใช้ฟังก์ชันสมาชิก 'display_records' และแสดงค่าแอตทริบิวต์
- รหัสบรรทัดที่ 51: คำสั่ง 'guru_emp_det.insert_records' ที่เรียกว่าฟังก์ชันสมาชิก 'insert_records' และค่าแอตทริบิวต์จะถูกแทรกลงในตาราง
การสืบทอดในประเภทวัตถุ
คุณสมบัติการสืบทอดช่วยให้ประเภทวัตถุย่อยสามารถเข้าถึงแอตทริบิวต์และสมาชิกของประเภทวัตถุซุปเปอร์หรือประเภทวัตถุแม่ทั้งหมด
ประเภทวัตถุย่อยเรียกว่าประเภทวัตถุที่สืบทอด และประเภทวัตถุซุปเปอร์เรียกว่าประเภทวัตถุหลัก ไวยากรณ์ด้านล่างแสดงวิธีการสร้างพาเรนต์และประเภทอ็อบเจ็กต์ที่สืบทอด
CREATE TYPE <object_type_name_parent> AS OBJECT ( <attribute_l><datatype>, . . )NOT FINAL; /
คำอธิบายไวยากรณ์:
- ไวยากรณ์ข้างต้นแสดงการสร้างประเภท SUPER
CREATE TYPE<object_type_name_sub>UNDER<object_type_name_parent> ( <attribute_l><datatype>, . ); /
คำอธิบายไวยากรณ์:
- ไวยากรณ์ด้านบนแสดงการสร้างประเภท SUB ประกอบด้วยสมาชิกและคุณลักษณะทั้งหมดจากประเภทวัตถุหลัก
ตัวอย่างที่ 1: ในตัวอย่างด้านล่าง เราจะใช้คุณสมบัติการสืบทอดเพื่อแทรกเรกคอร์ดที่มี ID ผู้จัดการเป็น '1002' ให้กับเรกคอร์ดต่อไปนี้ ('RRR', 1007, 20000)
เราจะดำเนินการตามโปรแกรมข้างต้นตามขั้นตอนต่อไปนี้
- ขั้นตอนที่ 1: สร้างประเภท SUPER
- ขั้นตอนที่ 2: สร้างประเภท SUB และเนื้อหา
- ขั้นตอนที่ 3: การสร้างบล็อกที่ไม่ระบุชื่อเพื่อเรียกประเภท SUB
ขั้นตอน 1) สร้างประเภท SUPER หรือประเภทผู้ปกครอง
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; /
คำอธิบายรหัส:
- รหัสบรรทัด 1-9: การสร้างประเภทวัตถุ 'emp_object' ด้วย 4 แอตทริบิวต์และ 3 สมาชิก ประกอบด้วยคำจำกัดความของตัวสร้างที่มีพารามิเตอร์เพียง 3 ตัวเท่านั้น ได้รับการประกาศว่า 'NOT FINAL' ดังนั้นจึงเป็นประเภทหลัก
ขั้นตอน 2) สร้างประเภท SUB ภายใต้ประเภท SUPER
CREATE OR REPLACE TYPE sub_emp_object UNDER emp_object (default_manager NUMBER,MEMBER PROCEDURE insert_default_mgr); / CREATE OR REPLACE TYPE BODY sub_emp_object AS MEMBER PROCEDURE insert_default_mgr IS BEGIN INSERT INTO emp VALUES(emp_no,emp_name:salary,manager): END; END; /
คำอธิบายรหัส:
- รหัสบรรทัด 10-13: การสร้าง sub_emp_object เป็นประเภทที่สืบทอดมาโดยมีแอตทริบิวต์ 'default_manager' เพิ่มเติมหนึ่งรายการและการประกาศขั้นตอนสมาชิก
- รหัสบรรทัดที่ 14: การสร้างเนื้อหาสำหรับประเภทวัตถุที่สืบทอดมา
- รหัสบรรทัดที่ 16-21: การกำหนดขั้นตอนสมาชิกซึ่งจะแทรกบันทึกลงในตาราง “emp” ด้วยค่าจากประเภทออบเจ็กต์ 'SUPER' ยกเว้นค่าผู้จัดการ สำหรับค่าผู้จัดการ จะใช้ 'default_manager' จากประเภท 'SUB'
ขั้นตอน 3) การสร้างบล็อกที่ไม่ระบุชื่อเพื่อเรียกประเภท SUB
DECLARE guru_emp_det sub_emp_object; BEGIN guru_emp_det:= sub_emp_object(1007,'RRR',20000,1000,1002); guru_emp_det.insert_default_mgr; COMMIT; END; /
คำอธิบายรหัส:
- รหัสบรรทัดที่ 25: ประกาศ 'guru_emp_det' เป็นประเภท 'sub_emp_object'
- รหัสบรรทัดที่ 27: การเริ่มต้นวัตถุด้วยตัวสร้างโดยนัย ตัวสร้างมี 5 พารามิเตอร์ (4 คุณลักษณะจากประเภท PARENT และ 2 คุณลักษณะจากประเภท SUB) พารามิเตอร์สุดท้าย (1002) กำหนดค่าสำหรับแอตทริบิวต์ default_manager
- รหัสบรรทัดที่ 28: การเรียกสมาชิก 'insert_default_mgr' เพื่อแทรกบันทึกด้วยรหัสผู้จัดการเริ่มต้นที่ส่งผ่านในตัวสร้าง
ความเท่าเทียมกันของวัตถุ PL/SQL
อินสแตนซ์วัตถุที่เป็นของวัตถุเดียวกันสามารถเปรียบเทียบได้เพื่อความเท่าเทียมกัน สำหรับสิ่งนี้ เราจำเป็นต้องมีวิธีพิเศษในประเภทวัตถุที่เรียกว่าวิธี 'ORDER'
เมธอด 'ORDER' นี้ควรเป็นฟังก์ชันที่ส่งคืนประเภทตัวเลข ใช้พารามิเตอร์สองตัวเป็นอินพุต (พารามิเตอร์แรก: id ของอินสแตนซ์อ็อบเจ็กต์ในตัว พารามิเตอร์ตัวที่สอง: id ของอินสแตนซ์อ็อบเจ็กต์อื่น)
มีการเปรียบเทียบ ID ของอินสแตนซ์ออบเจ็กต์ทั้งสอง และผลลัพธ์จะถูกส่งกลับเป็นตัวเลข
- ค่าบวกแสดงว่าอินสแตนซ์ออบเจ็กต์ SELF มากกว่าอินสแตนซ์อื่น
- ค่าลบแสดงว่าอินสแตนซ์ออบเจ็กต์ SELF น้อยกว่าอินสแตนซ์อื่น
- ศูนย์แสดงว่าอินสแตนซ์ออบเจ็กต์ SELF เท่ากับอินสแตนซ์อื่น
- หากอินสแตนซ์ใดเป็นโมฆะ ฟังก์ชันนี้จะคืนค่าเป็นโมฆะ
CREATE TYPE BODY<object_type_name_ 1>AS OBJECT ( ORDER MEMBER FUNCTION match(<parameter> object_type_name_ 1) RETURN INTEGER IS BEGIN IF <attribute_name>parameter <attribute_name>THEN RETURN -1; --any negative number will do ELSIF id>c.id THEN RETURN 1; —any positive number will do ELSE RETURN 0; END IF; END; . . ); /
คำอธิบายไวยากรณ์:
- ไวยากรณ์ข้างต้นแสดงฟังก์ชัน ORDER ที่ต้องรวมไว้ในเนื้อหาประเภทเพื่อตรวจสอบความเท่าเทียมกัน
- พารามิเตอร์สำหรับฟังก์ชันนี้ควรเป็นอินสแตนซ์ของออบเจ็กต์ประเภทเดียวกัน
- ฟังก์ชันด้านบนสามารถเรียกว่า “obj_instance_1.match(obj_instance_2)” และนิพจน์นี้จะส่งคืนค่าตัวเลขตามที่แสดง โดยที่ obj_instance_1 และ obj_instance_2 เป็นอินสแตนซ์ของ object_type_name
example1:ในตัวอย่างต่อไปนี้ เราจะมาดูวิธีการเปรียบเทียบสองวัตถุ เราจะสร้างอินสแตนซ์สองอินสแตนซ์ และเราจะเปรียบเทียบแอตทริบิวต์ 'salary' ระหว่างทั้งสอง เราจะดำเนินการ int สองขั้นตอน
- ขั้นตอนที่ 1: การสร้างประเภทวัตถุและเนื้อหา
- ขั้นตอนที่ 2: การสร้างบล็อกที่ไม่ระบุชื่อเพื่อโทรเปรียบเทียบอินสแตนซ์ออบเจ็กต์
ขั้นตอน 1) การสร้างประเภทวัตถุและเนื้อหา
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 AS ORDER MEMBER FUNCTION equals(c emp_object_equality)RETURN INTEGER IS BEGIN IF salary<c.salary THEN RETURN -1; ELSIF salary>c.salary THEN RETURN 1; ELSE RETURN 0; END IF: END; END; /
คำอธิบายรหัส:
- รหัสบรรทัด 1-4: การสร้างประเภทออบเจ็กต์ 'emp_object_equality' ที่มี 1 แอตทริบิวต์และ 1 สมาชิก
- รหัสบรรทัด 6-16:การกำหนดฟังก์ชัน ORDER ซึ่งเปรียบเทียบแอตทริบิวต์ 'เงินเดือน' ของอินสแตนซ์ SELF และประเภทอินสแตนซ์พารามิเตอร์ ฟังก์ชันนี้จะคืนค่าเป็นลบหากเงินเดือน SELF น้อยกว่า หรือคืนค่าเป็นบวกหากเงินเดือน SELF มากกว่า และคืนค่าเป็น 0 หากเงินเดือนเท่ากัน
รหัสเอาท์พุท:
สร้างประเภทแล้ว
ขั้นตอน 2) การสร้างบล็อกที่ไม่ระบุชื่อเพื่อเรียกเปรียบเทียบอินสแตนซ์ของวัตถุ
DECLARE l_obj_l emp_object_equality; l_obj_2 emp_object_equality; BEGIN l_obj_l:=emp_object_equality(15000); l_obj_2:=emp_object_equality(17000); IF l_obj_1.equalS(l_obj_2)>0 THEN Dbms_output.put_line(’Salary of first instance is greater’): ELSIF l_obj_l.equalS(l_obj_2)<0 THEN Dbms_output.put_line(’Salary of second instance is greater’); ELSE Dbms_output.put_line(’Salaries are equal’); END IF; END; /
เอาท์พุต
Salary of second instance is greater
คำอธิบายรหัส:
- รหัสบรรทัดที่ 20: ประกาศ l_obj_1 ประเภท emp_object_equality
- รหัสบรรทัดที่ 21: ประกาศ l_obj_2 ประเภท emp_object_equality
- รหัสบรรทัดที่ 23: กำลังเริ่มต้น l_obj_1 ด้วยมูลค่าเงินเดือนเป็น '15000'
- รหัสบรรทัดที่ 24: กำลังเริ่มต้น l_obj_1 ด้วยมูลค่าเงินเดือนเป็น '17000'
- รหัสบรรทัด 25-33: พิมพ์ข้อความตามหมายเลขส่งคืนจากฟังก์ชัน ORDER
สรุป
ในบทนี้ เราได้เห็นประเภทวัตถุและคุณสมบัติของวัตถุแล้ว นอกจากนี้เรายังได้หารือเกี่ยวกับตัวสร้าง สมาชิก คุณลักษณะ การสืบทอด และความเท่าเทียมกันในวัตถุ PL/SQL