首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 物件導向技術基礎:物件型別、實例化與資料庫儲存模式

     編輯:Oracle 資料庫相關知識

前言

Oracle 8i 起支援物件導向特性:封裝性 (介面與實作分離)、繼承性 (擴充性)、多型性 (同一操作不同實作)。本文說明 Oracle 物件型別定義、實例化與資料庫儲存兩大模式。

物件型別定義兩階段

1. 物件型別規範

CREATE OR REPLACE TYPE empObj AS OBJECT (
    emp_id     NUMBER(5),
    emp_name   VARCHAR2(20),
    emp_salary NUMBER(4),
    -- 成員函數宣告
    MEMBER FUNCTION addsalary(ext_salary NUMBER) RETURN VARCHAR2
);
/

2. 物件型別主體

CREATE OR REPLACE TYPE BODY empObj AS
    MEMBER FUNCTION addsalary(ext_salary NUMBER) RETURN VARCHAR2 IS
    BEGIN
        emp_salary := emp_salary + ext_salary;
        RETURN TO_CHAR(emp_salary);
    END addsalary;
END;
/

若無成員函數,僅需規範部分。

物件實例化與操作

DECLARE
    v_empObj1 empObj;
BEGIN
    -- 建構函數初始化 (無成員函數時可用)
    v_empObj1 := empObj(10005, 'Jack', 6500);

    -- 存取屬性
    DBMS_OUTPUT.PUT_LINE('ID: ' || v_empObj1.emp_id);

    -- 呼叫方法
    DBMS_OUTPUT.PUT_LINE('New Salary: ' || v_empObj1.addsalary(300));
END;
/

物件在資料庫中的儲存模式

PL/SQL 區塊中宣告的物件為暫時性,超出作用域即釋放。持久化需儲存於資料庫:

模式一:物件欄位

表欄位直接使用物件型別:

CREATE TABLE table1 (
    id  NUMBER(2),
    emp empObj
);

模式二:物件表

每個欄位對應物件屬性,每列即一物件實例:

CREATE TABLE emp_obj_table (
    emp_id     NUMBER(5),
    emp_name   VARCHAR2(20),
    emp_salary NUMBER(4)
);

INSERT INTO emp_obj_table VALUES (empObj(10006, 'Mary', 5000));

注意:物件表儲存忽略成員函數資訊;欄位型態須與物件屬性一一對應。

結語

Oracle 物件導向能力將資料與行為封裝,支援繼承與多型,適合複雜領域建模。理解型別定義兩階段、實例化方式與兩種持久化模式,是運用 OO 特性的關鍵基礎。

  • 首頁
  • 上一頁
  • 1
  • 2
  • 下一頁
  • 尾頁
  • 共2頁
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved