鍍金池/ 教程/ 數(shù)據(jù)庫(kù)/ PL/SQL面向?qū)ο?/span>
PL/SQL記錄
PL/SQL基本語(yǔ)法
PL/SQL集合
PL/SQL包
PL/SQL關(guān)系運(yùn)算符
PL/SQL比較運(yùn)算符
PL/SQL條件控制
PL/SQL字符串
PL/SQL算術(shù)運(yùn)算符
PL/SQL變量
PL/SQL IF-THEN-ELSIF語(yǔ)句
PL/SQL函數(shù)
PL/SQL異常
PL/SQL FOR循環(huán)語(yǔ)句
PL/SQL日期及時(shí)間
PL/SQL EXIT語(yǔ)句
PL/SQL DBMS輸出
PL/SQL過(guò)程
PL/SQL CONTINUE語(yǔ)句
PL/SQL數(shù)組
PL/SQL嵌套IF-THEN-ELSE語(yǔ)句
PL/SQL事務(wù)
PL/SQL CASE語(yǔ)句
PL/SQL IF-THEN語(yǔ)句
PL/SQL GOTO語(yǔ)句
PL/SQL運(yùn)算符優(yōu)先級(jí)
PL/SQL觸發(fā)器
PL/SQL運(yùn)算符
PL/SQL教程
PL/SQL WHILE循環(huán)語(yǔ)句
PL/SQL面向?qū)ο?/span>
PL/SQL循環(huán)
PL/SQL邏輯運(yùn)算符
PL/SQL IF-THEN-ELSE語(yǔ)句
PL/SQL數(shù)據(jù)類型
PL/SQL環(huán)境安裝設(shè)置
PL/SQL游標(biāo)
PL/SQL基本循環(huán)語(yǔ)句
PL/SQL搜索CASE語(yǔ)句
PL/SQL常量和文字
PL/SQL嵌套循環(huán)

PL/SQL面向?qū)ο?/h1>

PL/SQL允許定義一個(gè)對(duì)象類型,這有助于在Oracle的數(shù)據(jù)庫(kù)中設(shè)計(jì)的面向?qū)ο蟆?duì)象類型可以包裝復(fù)合類型。使用對(duì)象允許實(shí)現(xiàn)數(shù)據(jù)的具體結(jié)構(gòu)現(xiàn)實(shí)世界中的對(duì)象和方法操作它。對(duì)象有屬性和方法。屬性是一個(gè)對(duì)象的屬性,并用于存儲(chǔ)對(duì)象的狀態(tài);和方法被用于模擬其行為。

使用CREATE[OR REPLACE] TYPE語(yǔ)句中創(chuàng)建的對(duì)象。下面是一個(gè)例子,創(chuàng)建包含一些屬性的簡(jiǎn)單的地址對(duì)象:

CREATE OR REPLACE TYPE address AS OBJECT
(house_no varchar2(10),
 street varchar2(30),
 city varchar2(20),
 state varchar2(10),
 pincode varchar2(10)
);
/

當(dāng)上述代碼在SQL提示符執(zhí)行時(shí),它產(chǎn)生了以下結(jié)果:

Type created.

讓我們來(lái)創(chuàng)建一個(gè)多個(gè)客戶對(duì)象,包裝的屬性和方法,擁有面向?qū)ο蟮母杏X(jué):

CREATE OR REPLACE TYPE customer AS OBJECT
(code number(5),
 name varchar2(30),
 contact_no varchar2(12),
 addr address,
 member procedure display
);
/

當(dāng)上述代碼在SQL提示符執(zhí)行時(shí),它產(chǎn)生了以下結(jié)果:

Type created.

實(shí)例化對(duì)象

定義對(duì)象類型提供了一個(gè)藍(lán)圖對(duì)象。要使用這個(gè)對(duì)象,需要?jiǎng)?chuàng)建這個(gè)對(duì)象的實(shí)例。可以訪問(wèn)屬性,使用實(shí)例名稱和接入操作符,如下對(duì)象的方法(.):

DECLARE
   residence address;
BEGIN
   residence := address('103A', 'M.G.Road', 'Jaipur', 'Rajasthan','201301');
   dbms_output.put_line('House No: '|| residence.house_no);
   dbms_output.put_line('Street: '|| residence.street);
   dbms_output.put_line('City: '|| residence.city);
   dbms_output.put_line('State: '|| residence.state);
   dbms_output.put_line('Pincode: '|| residence.pincode);
END;
/

當(dāng)上述代碼在SQL提示符執(zhí)行時(shí),它產(chǎn)生了以下結(jié)果:

House No: 103A
Street: M.G.Road
City: Jaipur
State: Rajasthan
Pincode: 201301

PL/SQL procedure successfully completed.

成員方法

成員方法是用于操縱對(duì)象屬性。提供的成員方法的聲明,同時(shí)聲明的對(duì)象類型。對(duì)象主體限定的代碼成員方法。使用CREATE TYPE BODY語(yǔ)句創(chuàng)建的對(duì)象體。

構(gòu)造函數(shù)返回一個(gè)新的對(duì)象作為其值的功能。每個(gè)對(duì)象都有一個(gè)系統(tǒng)定義的構(gòu)造方法。構(gòu)造方法的名稱是相同的對(duì)象類型。例如:

residence := address('103A', 'M.G.Road', 'Jaipur', 'Rajasthan','201301');

比較方法被用于比較的對(duì)象。有兩種方法來(lái)比較對(duì)象:

  • 映射方法:映射方法它的值取決于屬性的值,以這樣的方式實(shí)現(xiàn)函數(shù)。例如,一個(gè)客戶對(duì)象,如果客戶代碼是相同的兩個(gè)客戶,可以認(rèn)為是相同的一個(gè)。所以這兩個(gè)對(duì)象之間的關(guān)系將取決于代碼的值。

  • 順序方法:順序方法實(shí)現(xiàn)一些內(nèi)部邏輯比較兩個(gè)對(duì)象。例如,對(duì)于矩形(rectangle)對(duì)象,如果其兩側(cè)都大,則表示矩形(rectangle)大于另一個(gè)矩形(rectangle)。

使用映射方法

讓我們?cè)囍チ私馍厦媸褂孟旅娴木匦螌?duì)象的概念:

CREATE OR REPLACE TYPE rectangle AS OBJECT
(length number,
 width number,
 member function enlarge( inc number) return rectangle,
 member procedure display,
 map member function measure return number
);
/

當(dāng)上述代碼在SQL提示符執(zhí)行時(shí),它產(chǎn)生了以下結(jié)果:

Type created.

創(chuàng)建類型體:

CREATE OR REPLACE TYPE BODY rectangle AS
   MEMBER FUNCTION enlarge(inc number) return rectangle IS
   BEGIN
      return rectangle(self.length + inc, self.width + inc);
   END enlarge;

   MEMBER PROCEDURE display IS
   BEGIN
      dbms_output.put_line('Length: '|| length);
      dbms_output.put_line('Width: '|| width);
   END display;

   MAP MEMBER FUNCTION measure return number IS
   BEGIN
      return (sqrt(length*length + width*width));
   END measure;
END;
/

當(dāng)上述代碼在SQL提示符執(zhí)行時(shí),它產(chǎn)生了以下結(jié)果:

Type body created.

現(xiàn)在,使用矩形(rectangle)對(duì)象及其成員函數(shù):

DECLARE
   r1 rectangle;
   r2 rectangle;
   r3 rectangle;
   inc_factor number := 5;
BEGIN
   r1 := rectangle(3, 4);
   r2 := rectangle(5, 7);
   r3 := r1.enlarge(inc_factor);
   r3.display;

   IF (r1 > r2) THEN -- calling measure function
      r1.display;
   ELSE
      r2.display;
   END IF;
END;
/

當(dāng)上述代碼在SQL提示符執(zhí)行時(shí),它產(chǎn)生了以下結(jié)果:

Length: 8
Width: 9
Length: 5
Width: 7

PL/SQL procedure successfully completed.

使用順序的方法

現(xiàn)在,相同的效果可以使用順序方法來(lái)實(shí)現(xiàn)。讓我們用一個(gè)順序方法重新創(chuàng)建矩形(rectangle)對(duì)象:

CREATE 上一篇:PL/SQL IF-THEN-ELSE語(yǔ)句下一篇:PL/SQL CONTINUE語(yǔ)句