2009-11-04 147 views

回答

7

除前面的答案外,宣言範圍也有很大差異。

當你聲明在PL/SQL,這樣的類型在你的榜樣記錄類型,它是從PL/SQL只可用。如果它在本地聲明爲一個過程或函數,那麼它只能在該子程序中使用;如果它是在包體中聲明的,則只能在該包中使用;如果它是在包頭中聲明的,則它可以被任何執行訪問包的PL/SQL代碼使用。決不能把它在SQL語句中引用,甚至嵌在PL/SQL代碼的。

當創建一個對象類型,或其它模式級類型定義如嵌套的表格,它既是SQL和PL/SQL內可用。有關CREATE TYPE語句和對象類型的各種用途,以進一步文檔參考文檔

SQL> CREATE OR REPLACE TYPE "TYPE_NAME1" AS OBJECT 
    2 (
    3  temp_trans_id   number(10), 
    4  trans_id    number(10), 
    5  resion_id    number(10) 
    6 ) 
    7/

Type created. 

SQL> create table type_name1_tab of type_name1; 

Table created. 

SQL> desc type_name1_tab 
Name          Null? Type 
----------------------------------------- -------- ---------------------------- 
TEMP_TRANS_ID          NUMBER(10) 
TRANS_ID           NUMBER(10) 
RESION_ID           NUMBER(10) 

See here:作爲一個非常簡單的例子,你可以在對象定義基礎表定義。

3

記錄類型是可以像記錄一樣使用的類型。它有一組鍵入的字段,但就是這樣。 對象類型是相當不同的。它也有一組字段,但它也可以包含可執行的方法,這些方法將在對象實例的上下文中執行(是的,你也可以有靜態方法)。它類似於Java中的對象。 一些(當然不是全部)從其他面向對象的系統我見過的差異:

  • 沒有接口
  • 沒有私有方法

在你的榜樣,TYPE_NAME1new_type_name看起來很相似因爲對於對象類型(TYPE_NAME1),您沒有利用特定於對象類型的任何東西。 有關更多信息,請參閱the Oracle page on Object Types

相關問題