oracle物件導向技術中的map和order方法有何不同?

germany006發表於2013-03-06
MAP方法,在網上查了些資料,大概的知道它的用法,但是order怎麼用? 我覺得這裡肯定說的不會是order by  因為這兩個東西完全不是同一型別的東西!

order真的存在這個東西嗎?我是新手,求教求教!

下面是轉載MAP方法的資料:
轉載地址:


MAP方法

MAP
方法用於將物件例項對映為標量數值(NUMBERDATE,VARCHAR2);對於相同物件型別不同物件例項來說,因為他們的資料型別是複合資料型別,所以物件例項之間不能直接進行比較。為了排序多個物件例項的資料,可以在建立物件型別時定義MAP方法。

*
注意:
一個物件型別最多隻能定義一個MAP方法,並且MAP方法和ORDER方法不能同時使用。

1
建立物件型別規範和物件型別體test_map_method_obtype

/**

建立物件型別規範和物件型別體test_map_method_obtype

MAP方法主要用於獲取僱員的年齡

**/

--建立物件型別規範test_map_method_obtype

CREATE OR REPLACE TYPE test_map_method_obtype AS OBJECT(

  name      VARCHAR2(30),

  gender    VARCHAR2(2),

  birthdate DATE,

  MAP MEMBERFUNCTION get_age_fnc RETURN NUMBER 

);

/

--建立物件型別體test_map_method_obtype

CREATE OR REPLACE TYPE BODY test_map_method_obtype AS

  MAP MEMBERFUNCTION get_age_fnc RETURN NUMBER IS

  BEGIN

    RETURN TRUNC((SYSDATE-birthdate)/365);

  END get_age_fnc;

END;

/

2建立物件表test_map_method並追加資料

/**

基於物件型別test_map_method_obtype

建立物件表test_map_method併為其插入資料

**/

--建立物件表test_map_method

DROP TABLE test_map_method PURGE;

CREATE TABLE test_map_method(

  empno NUMBER(2) ,

  employee test_map_method_obtype NOT NULL,

  job VARCHAR2(20) NOT NULL,

  sal NUMBER(7,2)

);

--向物件表test_map_method插入資料

INSERT INTO test_map_method

VALUES(10,test_map_method_obtype('張三', '', 

TO_DATE('1990-02-10', 'yyyy-mm-dd')),'CLERK',2000);

 

INSERT INTO test_map_method

VALUES(20,test_map_method_obtype('李四', '', 

TO_DATE('1989-08-01', 'yyyy-mm-dd')),'SALESMAN',3000);

 

INSERT INTO test_map_method

VALUES(30,test_map_method_obtype('王麗', '', 

TO_DATE('1988-06-09', 'yyyy-mm-dd')),'MANAGER',6000);

COMMIT;


3
呼叫MAP方法進行僱員年齡的比較

DECLARE

  --定義巢狀表test_tbtype

  TYPE test_tbtype IS TABLE OF test_map_method_obtype;

  --宣告巢狀表型別變數t_person

  t_person test_tbtype;

BEGIN

  --批處理資料,將物件表中的物件列employee

  --的資料儲存在巢狀表t_person

  SELECT employee 

  BULK COLLECT INTO t_person 

  FROM test_map_method;

 

  --比較年齡大小

  IF t_person(1).get_age_fnc() >t_person(2).get_age_fnc() THEN

    DBMS_OUTPUT.put_line(t_person(1).name||''||t_person(2).name||'');

  ELSE

    DBMS_OUTPUT.put_line(t_person(1).name||''||t_person(2).name||'');

  END IF;

    

END;

/

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28371090/viewspace-755380/,如需轉載,請註明出處,否則將追究法律責任。

相關文章