Oracle Các kiểu đối tượng PL/SQL: Lệnh CREATE TYPE kèm ví dụ.

⚡ Tóm tắt thông minh

Các kiểu đối tượng trong PL/SQL mang lại lập trình hướng đối tượng cho... OracleCho phép bạn mô hình hóa các thực thể trong thế giới thực với các thuộc tính và phương thức. Chúng hỗ trợ các hàm tạo, kế thừa và so sánh bằng nhau, do đó một kiểu dữ liệu cấp lược đồ duy nhất có thể lưu trữ và xử lý dữ liệu có cấu trúc.

  • 🧱 Các thành phần của loại đối tượng: Một kiểu đối tượng kết hợp các thuộc tính lưu trữ dữ liệu và các thành viên, hay phương thức, xác định logic xử lý của nó.
  • 🏗️ Tạo đối tượng: Các kiểu đối tượng được tạo ở cấp độ lược đồ bằng câu lệnh CREATE TYPE, và các phương thức của chúng được định nghĩa trong một câu lệnh CREATE TYPE BODY riêng biệt.
  • 🔧 Người xây dựng: Mỗi kiểu đối tượng đều có một hàm tạo ngầm định được đặt tên theo kiểu đó, và bạn có thể định nghĩa một hàm tạo tường minh để thiết lập các giá trị mặc định.
  • 🧬 Di sản: Một kiểu cha KHÔNG PHẢI LÀ KIỂU CUỐI CÙNG được mở rộng bằng UNDER, do đó kiểu con kế thừa tất cả các thuộc tính và thành viên của kiểu cha.
  • ⚖️ Bình đẳng: Hàm thành viên ORDER so sánh hai thể hiện đối tượng và trả về một số âm, không hoặc dương.
  • 🤖 Hỗ trợ AI: Các trợ lý AI như GitHub Copilot soạn thảo các định nghĩa CREATE TYPE, hàm tạo và phương thức ORDER từ một bình luận.

Oracle Các kiểu đối tượng PL/SQL hiển thị lệnh CREATE TYPE với các thuộc tính và phương thức.

Loại đối tượng trong PL/SQL là gì?

Lập trình hướng đối tượng đặc biệt phù hợp để xây dựng các thành phần có thể tái sử dụng và các ứng dụng phức tạp. Các chương trình được tổ chức xung quanh "đối tượng" thay vì "hành động"; nghĩa là, chúng được thiết kế để làm việc và tương tác với toàn bộ đối tượng chứ không phải một hành động đơn lẻ. Cách tiếp cận này cho phép lập trình viên điền thông tin và thao tác các chi tiết ở cấp độ thực thể đối tượng.

Hình ảnh bên dưới minh họa một ví dụ về kiểu đối tượng trong đó tài khoản ngân hàng được coi là một thực thể đối tượng. Các thuộc tính của đối tượng chứa các giá trị — đối với tài khoản ngân hàng, đó là số tài khoản, số dư ngân hàng, v.v. — trong khi các phương thức của đối tượng mô tả các hành động như tính lãi suất hoặc tạo sao kê ngân hàng, mỗi hành động đều yêu cầu một quy trình để hoàn thành.

Tài khoản ngân hàng được mô hình hóa như một kiểu đối tượng với các thuộc tính và phương thức trong PL/SQL.

In PL / SQLLập trình hướng đối tượng dựa trên các kiểu đối tượng. Một kiểu đối tượng có thể đại diện cho bất kỳ thực thể nào trong thế giới thực. Các phần bên dưới sẽ khám phá các kiểu đối tượng, các thành phần của chúng, cũng như cách tạo và sử dụng chúng.

Thành phần của các loại đối tượng

Một kiểu đối tượng PL/SQL chủ yếu bao gồm hai thành phần.

  1. Thuộc tính
  2. Thành viên/Phương pháp

Thuộc tính

Thuộc tính là các cột hoặc trường lưu trữ dữ liệu. Mỗi thuộc tính được ánh xạ tới kiểu dữ liệu xác định kiểu xử lý và lưu trữ cho thuộc tính đó. Một thuộc tính có thể thuộc bất kỳ kiểu dữ liệu hợp lệ nào. Kiểu dữ liệu PL/SQLhoặc nó có thể thuộc loại đối tượng khác.

Thành viên/Phương pháp

Các thành viên, hay phương thức, là chương trình con Các thành viên này được định nghĩa bên trong kiểu đối tượng. Chúng không được sử dụng để lưu trữ dữ liệu; thay vào đó, chúng định nghĩa quá trình xử lý được thực hiện bên trong kiểu đối tượng — ví dụ: xác thực dữ liệu trước khi điền vào đối tượng. Chúng được khai báo trong đặc tả kiểu đối tượng và được định nghĩa trong phần thân của kiểu đối tượng. Phần thân là tùy chọn: nếu không có thành viên nào, kiểu đối tượng sẽ không có phần thân.

Tạo đối tượng trong Oracle

Kiểu đối tượng không thể được tạo ở cấp độ chương trình con; nó chỉ có thể được tạo ở cấp độ lược đồ. Sau khi kiểu đối tượng được định nghĩa trong lược đồ, nó có thể được sử dụng trong các chương trình con. Kiểu đối tượng được tạo bằng câu lệnh “CREATE TYPE”, và phần thân của kiểu chỉ có thể được tạo sau khi kiểu đối tượng đó tồn tại.

Các ảnh chụp màn hình bên dưới hiển thị cú pháp CREATE TYPE để khai báo đối tượng và cú pháp CREATE TYPE BODY để định nghĩa các phương thức của đối tượng đó.

Cú pháp CREATE TYPE định nghĩa đặc tả đối tượng với các thuộc tính trong Oracle Cú pháp CREATE TYPE BODY định nghĩa các phương thức của một kiểu đối tượng PL/SQL.

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;
.
.
);
/

Giải thích cú pháp:

  • Cú pháp trên thể hiện việc tạo ra một OBJECT với các thuộc tính và một OBJECT BODY với các phương thức.
  • Các phương thức cũng có thể bị quá tải trong phần thân đối tượng.

Khai báo khởi tạo loại đối tượng

Giống như các thành phần khác trong PL/SQL, kiểu đối tượng phải được khai báo trước khi được sử dụng trong chương trình. Sau khi kiểu đối tượng được tạo, nó có thể được sử dụng trong phần khai báo của chương trình con để khai báo một biến thuộc kiểu đối tượng đó.

Mỗi khi một biến được khai báo là kiểu đối tượng, tại thời điểm chạy chương trình, một thể hiện mới của kiểu đối tượng đó sẽ được tạo ra, và thể hiện mới này được tham chiếu bằng tên biến. Bằng cách này, một kiểu đối tượng duy nhất có thể lưu trữ nhiều giá trị dưới các thể hiện khác nhau.

Ảnh chụp màn hình bên dưới cho thấy một biến được khai báo là kiểu đối tượng bên trong một Khối PL/SQL.

Khai báo một biến thuộc kiểu đối tượng trong phần khai báo của khối PL/SQL.

DECLARE
<variable_name> <object_type_name>;
BEGIN
.
.
END;
/

Giải thích cú pháp:

  • Cú pháp trên thể hiện cách khai báo một đối tượng. biến như một kiểu đối tượng trong phần khai báo.

Một khi biến được khai báo là kiểu đối tượng trong chương trình con, nó sẽ có giá trị null về mặt nguyên tử — toàn bộ đối tượng đó đều là null. Nó phải được khởi tạo với các giá trị trước khi có thể được sử dụng trong chương trình. Các đối tượng được khởi tạo bằng cách sử dụng hàm tạo.

Hàm tạo là phương thức ngầm định của một đối tượng có thể được tham chiếu bằng cùng tên với kiểu đối tượng. Ảnh chụp màn hình bên dưới hiển thị quá trình khởi tạo một thể hiện của kiểu đối tượng.

Khởi tạo một thể hiện của kiểu đối tượng thành null bằng cách sử dụng hàm tạo của nó.

DECLARE
<variable_name> <object_type_name>; 
BEGIN
<variable_name>:=<object_type_name>();
END;
/

Giải thích cú pháp:

  • Cú pháp trên thể hiện việc khởi tạo thể hiện của kiểu đối tượng với giá trị null.
  • Bản thân đối tượng không còn là null nữa sau khi được khởi tạo, nhưng các thuộc tính bên trong đối tượng vẫn là null cho đến khi được gán giá trị.

Người xây dựng

Hàm tạo là phương thức ngầm định của một đối tượng, có thể được tham chiếu bằng cùng tên với kiểu đối tượng đó. Bất cứ khi nào đối tượng được tham chiếu lần đầu tiên, hàm tạo này sẽ được gọi một cách ngầm định.

Bạn cũng có thể khởi tạo các đối tượng bằng cách sử dụng các hàm tạo này. Một hàm tạo có thể được định nghĩa rõ ràng bằng cách định nghĩa một thành viên trong phần thân của kiểu đối tượng có cùng tên với kiểu đối tượng đó.

Ví dụ 1: Trong ví dụ sau, chúng ta sử dụng thành viên kiểu đối tượng để chèn các bản ghi vào bảng emp với các giá trị ('RRR', 1005, 20000, 1000) và ('PPP', 1006, 20000, 1001). Sau khi dữ liệu được chèn, chúng ta hiển thị nó bằng cách sử dụng thành viên kiểu đối tượng. Chúng ta cũng sử dụng một hàm tạo tường minh để điền ID người quản lý với giá trị mặc định là 1001 cho bản ghi thứ hai.

Chúng tôi thực hiện theo các bước sau.

  • Bước 1: Tạo kiểu đối tượng và phần thân của kiểu đối tượng.
  • Bước 2: Tạo một khối ẩn danh để gọi kiểu đối tượng thông qua hàm tạo ngầm định cho emp_no 1005.
  • Bước 3: Tạo một khối ẩn danh để gọi kiểu đối tượng thông qua hàm tạo tường minh cho emp_no 1006.

Bước 1) Tạo kiểu đối tượng và phần thân của kiểu đối tượng.

Ảnh chụp màn hình bên dưới hiển thị đặc tả kiểu đối tượng emp_object đang được tạo cùng với các thuộc tính và thành viên của nó.

Tạo đặc tả kiểu đối tượng emp_object với các thuộc tính và thành viên.

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);
/

Ảnh chụp màn hình bên dưới cho thấy phần thân của kiểu emp_object được tạo ra bằng hàm tạo tường minh và các thủ tục thành viên.

Định nghĩa phần thân của kiểu emp_object với một hàm tạo tường minh và các thủ tục thành viên.

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.manager:=1001;
RETURN;
END;
MEMBER PROCEDURE insert_records
IS
BEGIN
INSERT INTO emp VALUES(emp_no,emp_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;
/

Code Giải thích

  • Code dòng 1-9: Tạo kiểu đối tượng 'emp_object' với 4 thuộc tính và 3 thành viên. Nó chứa định nghĩa của một hàm tạo chỉ có 3 tham số. (Hàm tạo ngầm định thực tế chứa số lượng tham số bằng với số lượng thuộc tính có trong kiểu đối tượng.)
  • Code dòng 10: Tạo phần thân kiểu dữ liệu.
  • Code dòng 11-21: Định nghĩa hàm tạo tường minh. Gán giá trị tham số cho các thuộc tính và gán giá trị mặc định '1001' cho thuộc tính 'manager'.
  • Code dòng 22-26: Định nghĩa thành viên 'insert_records', nơi các giá trị thuộc tính được chèn vào bảng 'emp'.
  • Code dòng 27-34: Định nghĩa thành viên 'display_records', dùng để hiển thị giá trị của các thuộc tính kiểu đối tượng.

Đầu ra:

Đã tạo loại

Đã tạo nội dung kiểu

Bước 2) Tạo một khối ẩn danh để gọi kiểu đối tượng đã tạo thông qua hàm tạo ngầm định cho emp_no 1005.

Ảnh chụp màn hình bên dưới hiển thị khối lệnh ẩn danh gọi emp_object thông qua hàm tạo ngầm định.

Khối lệnh ẩn danh gọi emp_object thông qua hàm tạo ngầm định cho 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;

Code Giải thích

  • Code dòng 37-45: Chèn các bản ghi bằng cách sử dụng hàm tạo ngầm định. Lời gọi đến hàm tạo chứa số lượng giá trị thuộc tính thực tế.
  • Code dòng 38: Khai báo 'guru_emp_det' là kiểu đối tượng 'emp_object'.
  • Code dòng 41: Câu lệnh 'guru_emp_det.display_records' gọi thành viên 'display_records' và các giá trị thuộc tính được hiển thị.
  • Code dòng 42: Câu lệnh 'guru_emp_det.insert_records' gọi thành viên 'insert_records' và các giá trị thuộc tính được chèn vào bảng. Sau đó, khối lệnh sẽ thực hiện việc cam kết. giao dịch.

Đầu ra:

Tên nhân viên: RRR

Số lượng nhân viên: 1005

Lương: 20000

Người quản lý: 1000

Bước 3) Tạo một khối ẩn danh để gọi kiểu đối tượng đã tạo thông qua hàm tạo tường minh cho emp_no 1006.

Ảnh chụp màn hình bên dưới hiển thị khối mã ẩn danh gọi emp_object thông qua hàm tạo tường minh với ba tham số.

Khối lệnh ẩn danh gọi emp_object thông qua hàm tạo tường minh cho 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;
/

Đầu ra

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

Code Giải thích:

  • Code dòng 46-53: Chèn bản ghi bằng cách sử dụng hàm tạo tường minh.
  • Code dòng 46: Khai báo 'guru_emp_det' là kiểu đối tượng 'emp_object'.
  • Code dòng 50: Câu lệnh 'guru_emp_det.display_records' gọi thành viên 'display_records' và các giá trị thuộc tính được hiển thị.
  • Code dòng 51: Câu lệnh 'guru_emp_det.insert_records' gọi thành viên 'insert_records' và các giá trị thuộc tính được chèn vào bảng. Vì chỉ có ba đối số được truyền vào, hàm tạo tường minh sẽ đặt ID người quản lý về giá trị mặc định là 1001.

Kế thừa trong loại đối tượng

Thuộc tính kế thừa cho phép kiểu đối tượng con truy cập tất cả các thuộc tính và thành viên của kiểu đối tượng cha.

Kiểu đối tượng con được gọi là kiểu đối tượng kế thừa, và kiểu đối tượng cha được gọi là kiểu đối tượng cha mẹ. Cú pháp dưới đây cho thấy cách tạo kiểu đối tượng cha mẹ và kiểu đối tượng kế thừa. Ảnh chụp màn hình bên dưới hiển thị cú pháp kiểu cha mẹ (SUPER) được đánh dấu là NOT FINAL.

Cú pháp CREATE TYPE cho kiểu đối tượng cha NOT FINAL được sử dụng trong kế thừa.

CREATE TYPE <object_type_name_parent> AS OBJECT
(
<attribute_l><datatype>,
.
.
)NOT FINAL;
/

Giải thích cú pháp:

  • Cú pháp trên thể hiện việc tạo ra kiểu SUPER. Mệnh đề NOT FINAL cho phép kiểu này được kế thừa.

Ảnh chụp màn hình bên dưới hiển thị cú pháp kiểu kế thừa (SUB) được tạo bằng từ khóa UNDER.

Cú pháp CREATE TYPE UNDER dành cho kiểu đối tượng con kế thừa từ kiểu đối tượng cha.

CREATE TYPE<object_type_name_sub>UNDER<object_type_name_parent>
(
<attribute_l><datatype>,
.
);
/

Giải thích cú pháp:

  • Cú pháp trên thể hiện việc tạo kiểu SUB. Kiểu này chứa tất cả các thành viên và thuộc tính từ kiểu đối tượng cha.

Ví dụ 1: Trong ví dụ bên dưới, chúng ta sử dụng thuộc tính kế thừa để chèn một bản ghi với ID người quản lý '1002' cho bản ghi ('RRR', 1007, 20000). Chúng ta thực thi chương trình theo các bước sau.

  • Bước 1: Tạo kiểu dữ liệu SUPER.
  • Bước 2: Tạo kiểu SUB và nội dung.
  • Bước 3: Tạo một khối ẩn danh để gọi kiểu SUB.

Bước 1) Tạo kiểu SUPER hoặc kiểu cha.

Ảnh chụp màn hình bên dưới cho thấy kiểu cha emp_object được tạo với mệnh đề NOT FINAL.

Tạo kiểu cha emp_object NOT FINAL cho ví dụ kế thừa

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;
/

Code Giải thích:

  • Code dòng 1-9: Tạo kiểu đối tượng 'emp_object' với 4 thuộc tính và 3 thành viên. Nó chứa định nghĩa của một hàm tạo chỉ có 3 tham số. Nó được khai báo là 'NOT FINAL', do đó nó là một kiểu cha.

Bước 2) Tạo kiểu con (SUB type) thuộc kiểu cha (SUPER type).

Ảnh chụp màn hình bên dưới hiển thị kiểu kế thừa sub_emp_object và phần thân của nó đang được tạo ra.

Tạo kiểu kế thừa sub_emp_object và phần thân của nó bằng insert_default_mgr

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;
/

Code Giải thích:

  • Code dòng 10-13: Tạo 'sub_emp_object' làm kiểu kế thừa với một thuộc tính bổ sung là 'default_manager' và một khai báo thủ tục thành viên.
  • Code dòng 14: Tạo phần thân cho kiểu đối tượng kế thừa.
  • Code dòng 16-21: Định nghĩa thủ tục thành viên chèn các bản ghi vào bảng 'emp' với các giá trị từ kiểu đối tượng SUPER, ngoại trừ giá trị manager. Đối với giá trị manager, nó sử dụng 'default_manager' từ kiểu SUB.

Bước 3) Tạo khối ẩn danh để gọi kiểu SUB.

Ảnh chụp màn hình bên dưới hiển thị khối ẩn danh gọi kiểu SUB và chèn ID người quản lý mặc định.

Khối ẩn danh gọi kiểu sub_emp_object để chèn ID người quản lý mặc định.

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;
/

Code Giải thích:

  • Code dòng 25: Khai báo 'guru_emp_det' là kiểu 'sub_emp_object'.
  • Code dòng 27: Khởi tạo đối tượng bằng hàm tạo ngầm định. Hàm tạo có 5 tham số (4 thuộc tính từ kiểu PARENT và 1 thuộc tính từ kiểu SUB). Tham số cuối cùng (1002) xác định giá trị cho thuộc tính default_manager.
  • Code dòng 28: Gọi thành viên 'insert_default_mgr' để chèn bản ghi với ID người quản lý mặc định được truyền vào trong hàm tạo.

Sự bình đẳng của các đối tượng PL/SQL

Các thể hiện của đối tượng thuộc cùng một kiểu đối tượng có thể được so sánh về sự bằng nhau. Để làm được điều này, kiểu đối tượng cần một phương thức đặc biệt gọi là phương thức ORDER.

Phương thức ORDER này phải là một hàm trả về kiểu dữ liệu số. Nó nhận hai tham số đầu vào (tham số thứ nhất: ID của thể hiện đối tượng tự thân; tham số thứ hai: ID của thể hiện đối tượng khác).

Mã định danh (ID) của hai đối tượng được so sánh, và kết quả được trả về dưới dạng một con số.

  • Giá trị dương cho biết thể hiện của đối tượng SELF lớn hơn thể hiện khác.
  • Giá trị âm cho biết thể hiện của đối tượng SELF nhỏ hơn thể hiện kia.
  • Số 0 cho biết thể hiện của đối tượng SELF bằng với thể hiện khác.
  • Nếu bất kỳ trường hợp nào là null, hàm sẽ trả về null.

Ảnh chụp màn hình bên dưới hiển thị cú pháp hàm thành viên ORDER cần được đưa vào phần thân kiểu để kiểm tra sự bằng nhau.

Cú pháp hàm thành viên ORDER được sử dụng để so sánh các thể hiện đối tượng xem chúng có bằng nhau hay không.

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;
  .
  .
);
/

Giải thích cú pháp:

  • Cú pháp trên cho thấy hàm ORDER cần được đưa vào phần thân kiểu để kiểm tra sự bằng nhau.
  • Tham số cho hàm này phải là một thể hiện của cùng loại đối tượng.
  • Hàm có thể được gọi là “obj_instance_1.match(obj_instance_2)”, và biểu thức này trả về giá trị số được hiển thị, trong đó obj_instance_1 và obj_instance_2 là các thể hiện của kiểu đối tượng.

Ví dụ 1: Trong ví dụ sau, chúng ta so sánh hai đối tượng. Chúng ta tạo hai thể hiện và so sánh thuộc tính 'salary' giữa chúng. Chúng ta thực hiện điều này trong hai bước.

  • Bước 1: Tạo kiểu đối tượng và phần thân.
  • Bước 2: Tạo khối ẩn danh để so sánh các thể hiện đối tượng.

Bước 1) Tạo kiểu đối tượng và phần thân.

Các ảnh chụp màn hình bên dưới hiển thị đặc tả emp_object_equality và phần thân của nó, trong đó định nghĩa hàm ORDER dùng để so sánh thuộc tính lương.

Tạo đặc tả kiểu đối tượng emp_object_equality với hàm ORDER. Định nghĩa phần thân của kiểu emp_object_equality để so sánh thuộc tính lương.

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;
/

Code Giải thích:

  • Code dòng 1-4: Tạo kiểu đối tượng 'emp_object_equality' với 1 thuộc tính và 1 thành viên.
  • Code dòng 6-16: Định nghĩa hàm ORDER so sánh thuộc tính 'salary' của thể hiện SELF và thể hiện tham số. Hàm này trả về giá trị âm nếu lương của SELF thấp hơn, giá trị dương nếu lương của SELF cao hơn và 0 nếu lương bằng nhau.

Code Đầu ra:

Đã tạo loại

Bước 2) Tạo khối ẩn danh để so sánh các thể hiện đối tượng.

Ảnh chụp màn hình bên dưới hiển thị khối ẩn danh so sánh hai trường hợp emp_object_equality dựa trên mức lương.

Khối ẩn danh so sánh hai trường hợp emp_object_equality dựa trên mức lương

DECLARE
l_obj_1 emp_object_equality;
l_obj_2 emp_object_equality;
BEGIN
l_obj_1:=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_1.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;
/

Đầu ra

Salary of second instance is greater

Code Giải thích:

  • Code dòng 20: Khai báo 'l_obj_1' thuộc kiểu 'emp_object_equality'.
  • Code dòng 21: Khai báo 'l_obj_2' thuộc kiểu 'emp_object_equality'.
  • Code dòng 23: Khởi tạo 'l_obj_1' với giá trị lương '15000'.
  • Code dòng 24: Khởi tạo 'l_obj_2' với giá trị lương '17000'.
  • Code dòng 25-33: In thông báo dựa trên số được trả về bởi hàm ORDER.

Câu Hỏi Thường Gặp

Một kiểu đối tượng mô hình hóa một thực thể duy nhất trong thế giới thực với các thuộc tính và phương thức. bộ sưu tập — Mảng biến đổi (VARRAY), bảng lồng nhau hoặc mảng liên kết — chứa nhiều phần tử cùng một kiểu dữ liệu. Kiểu đối tượng mô tả cấu trúc và hành vi, trong khi tập hợp lưu trữ nhiều giá trị.

Cả hai đều so sánh các thể hiện đối tượng. Phương thức MAP trả về một giá trị vô hướng duy nhất. Oracle Phương thức `order` được sử dụng để sắp xếp hoặc so sánh các đối tượng, trong khi phương thức `ORDER` so sánh trực tiếp hai đối tượng và trả về một số âm, không hoặc dương. Một kiểu dữ liệu có thể định nghĩa một trong hai phương thức này, chứ không phải cả hai.

Đúng vậy. Bạn có thể tạo một bảng đối tượng trong đó mỗi hàng là một thể hiện đối tượng, hoặc sử dụng kiểu đối tượng làm kiểu dữ liệu cho một cột trong bảng. Điều này cho phép Oracle Lưu trữ các đối tượng có cấu trúc trực tiếp trong cơ sở dữ liệu thay vì chỉ trong bộ nhớ.

Kiểu dữ liệu NOT INSTANTIABLE không thể tạo đối tượng trực tiếp; nó hoạt động như một kiểu dữ liệu tuyệt đối.tracTừ khóa `t` là cơ sở mà các kiểu khác kế thừa. Kết hợp với `NOT FINAL`, nó định nghĩa một siêu kiểu mà các kiểu con của nó cung cấp cách triển khai cụ thể cho các phương thức đã khai báo.

Sử dụng ALTER TYPE để thêm hoặc xóa thuộc tính và phương thức, thêm CASCADE để cập nhật các đối tượng phụ thuộc, và sử dụng DROP TYPE để xóa kiểu dữ liệu. Một kiểu dữ liệu vẫn đang được sử dụng bởi các bảng hoặc các kiểu dữ liệu khác không thể bị xóa cho đến khi các đối tượng phụ thuộc đó được xử lý trước.

Truy vấn các khung nhìn từ điển dữ liệu USER_TYPES và ALL_TYPES để lấy tên kiểu, và USER_TYPE_ATTRS và USER_TYPE_METHODS để lấy thuộc tính và phương thức của chúng. Các khung nhìn này cho phép bạn kiểm tra mô hình đối tượng hiện có mà không cần đọc mã nguồn.

Vâng. Trợ lý GitHub Soạn thảo các đặc tả CREATE TYPE, phương thức TYPE BODY, hàm tạo và hàm ORDER từ một bình luận. RevHãy xem xét kỹ các kiểu dữ liệu thuộc tính, tham số hàm tạo và điều khoản kế thừa trước khi triển khai kiểu được tạo ra.

Trợ lý AI phân tích bảng của bạn và đề xuất các loại đối tượng, bản đồ thuộc tính.pingvà hệ thống phân cấp kế thừa. Quá trình đánh giá bằng máy học này sẽ phát hiện các thuộc tính dư thừa, các hàm tạo bị thiếu và sự kế thừa quá sâu trước khi mô hình đối tượng được đưa vào sản xuất, từ đó cải thiện khả năng bảo trì.

Tóm tắt bài viết này với: