數據子類型

數據子類型(Data subtype )是指在某系統或軟體的已有數據類型下,為了進一步區分數據類型而對已有數據類型進行劃分後的數據類型。

數據子類型和父類型是對應存在的,父類型是指被劃分的原有實體,一個父類型若存在一個子類型,必然會有另一個子類型也存在。

基本介紹

  • 中文名:數據子類型
  • 外文名:Data subtype 
  • 涉及學科:計算機等
  • 套用:VBScript等
  • 對立:父類型
  • 目的:為了進一步區分數據
VBScript,ORACLE subtype 子類型,定義子類型,使用子類型,Ada子類型,創建數據類型和子類型,創建新的數據類型,派生類型,創建子類型,

VBScript

VBScript只有一種數據類型 —— Variant,它是根據上下文來判斷是數字還是字元串。因為Variant是VBScript中唯一的數據類型,所以它也是VBScript中所有函式的返回值的數據類型。為了進一步區分數據類型,它包含如下數據子類型:
子類型
描述
Empty
未初始化的Variant。對於數值變數,值為0;對於字元串變數,值為零長度字元串 ("")。
Null
不包含任何有效數據的Variant
Boolean
包含True或False。
Byte
包含0到255之間的整數。
Integer
包含-32,768到32,767之間的整數。
Currency
-922,337,203,685,477.5808到922,337,203,685,477.5807。
Long
包含-2,147,483,648到2,147,483,647之間的整數。
Single
包含單精度浮點數,負數範圍從-3.402823E38到-1.401298E-45,正數範圍從1.401298E-45到3.402823E38。
Double
包含雙精度浮點數,負數範圍從-1.79769313486232E308到-4.94065645841247E-324,正數範圍從4.94065645841247E-324到1.79769313486232E308。
Date (Time)
包含表示日期的數字,日期範圍從公元100年1月1日到公元9999年12月31日。
String
包含變長字元串,最大長度可為20億個字元。
Object
包含對象。
Error
包含錯誤號。
VBScript在定義時只有一種變數類型,在實際使用中需要使用類型轉換函式來將變數轉換成相應的變數類型。
Cbool
變數轉換成布爾值
Cbyte
變數轉換為0到255之間的整數
Ccur、Cdbl、Csng
變數轉換為浮點數值,前者精確到小數點後四位,後兩者要更加精確,範圍大的多
Cdate
變數轉換為日期值
Cint、Clng
變數轉換為整數,後者的範圍比前者要大的多
Cstr
變數轉換為字元串

ORACLE subtype 子類型

定義子類型

我們可以在任何PL/SQL塊、子程式或包中定義自己的子類型,語法如下:
SUBTYPE subtype_name IS base_type[(constraint)] [NOT NULL ];
subtype_name就是聲明的子類型的名稱,base_type可以是任何標量類型或用戶定義類型,約束只是用於限定基類型的精度和數值範圍,或是最大長度。下面舉幾個例子:
DECLARE
SUBTYPE birthdate IS DATE NOT NULL ; -- based on DATE type
SUBTYPE counter IS NATURAL ; -- based on NATURAL subtype
TYPE namelist IS TABLE OF VARCHAR2 (10);
SUBTYPE dutyroster IS namelist; -- based on TABLE type
TYPE timerec IS RECORD (
minutes INTEGER ,
hours INTEGER
);
SUBTYPE finishtime IS timerec; -- based on RECORD type
SUBTYPE id_num IS emp.empno%TYPE ; -- based on column type
我們可以使用%TYPE或%ROWTYPE來指定基類型。當%TYPE提供資料庫欄位中的數據類型時,子類型繼承欄位的大小約束(如果有的話)。但是,子類型並不能繼承其他約束,如NOT NULL。

使用子類型

一旦我們定義了子類型,我們就可以聲明該類型的變數、常量等。下例中,我們聲明了Counter類型變數,子類型的名稱代表了變數的使用目的:
DECLARE
SUBTYPE counter IS NATURAL ;
ROWS counter;

下面的例子演示了如何約束用戶自定義子類型:
SUBTYPE accumulator IS NUMBER ;
total accumulator(7, 2);
子類型還可以檢查數值是否越界來提高可靠性。下例中我們把子類型Numeral的範圍限制在-9到9之間。如果程式把這個範圍之外的數值賦給Numeral類型變數,那么PL/SQL就會拋出一個異常
DECLARE
SUBTYPE numeral IS NUMBER (1, 0);
x_axis numeral; -- magnitude range is -9 .. 9
y_axis numeral;
BEGIN
x_axis := 10; -- raises VALUE_ERROR
...
END ;

Ada子類型

創建數據類型和子類型

(Creating Types and Subtypes)
使用變數時,除了以某標識符作為變數的名稱外,還要指定該變數的數據類型。一個數據類型定義了變數可接受的值以及所能執行的操作。比如說,一個數據類型為 Age 的變數 Bill,Age 的取值範圍為 1..100,並只有 + – 這兩種操作,在這裡,對象(object)為名為 Bill 的變數,它的取值在 1..100 之間(包括 1,100),值的變化只能通過+ -這些基本運算符(primitive operation)來實現,而無法通過* /等其它運算符。Ada 中的數據類型,包括預定義類型,都是按照一定的格式在程式包中創建的。下面就介紹創建數據類型的一些基本內容,更多相關內容會在以後見到。

創建新的數據類型

創建一個新類型,需要使用保留字type,is,range。格式如下:
type type_name is range range_specifcation;
type_name 為新類型的名稱,是一個合法標識符;range_specifcation 表示該類型的取值範圍,表示方式為 First .. Last,如 1..100 , -9 ..10 。
例如創建上面提及的一個新類型 Age :
type Age is range 1 .. 100;
這樣就有了一個數據類型 Age, 取值範圍 1 .. 100。
有一點要注意:range_specfication 中 First 要大於 Last。 如 type months is range12 .. 0, 實際上 months 是一個空集(null),而不是所期望的 0..12。
不同數據類型之間是不能進行混合運算的,即使取值範圍和運算符一樣。

派生類型

大家可能會發現,如果像上面一樣創建一個截然不同的新類型,還需要定義它的運算符,使用很不方便。因此,往往是派生現有的類型,其格式為:
type type_name is new old_type {range range_specification};
type_name 為新類型的名稱,是一個合法標識符;range range_specification 表示該類型的取值範圍,是可選的,沒有的話表示新類型 type_name 的取值範圍和 old_type 一樣。

創建子類型

創建新類型和派生類型的麻煩從上文就可以感受的到,特別是在科學計算這些有很多種小類型的軟體當中,上述兩種方法實在過於繁雜。這時子類型(subtype)就相當有用,子類型的定義格式為:
subtype type_name is old_type {range range_specification};
type_name 為新類型的名稱,是一個合法標識符;rangerange_specification 表示該類型的取值範圍,是可選的,沒有的話表示新類型 type_name 的取值範圍和 old_type 一樣。
子類型不僅繼承母類型的屬性,而且和母類型、其它同母類型的子類型可混合使用。
在前面的例子中的,我們都提到了取值範圍,這也是Ada 的一項―特色‖:Ada 不同於 C 和 Pascal— 賦給一個變數超過其取值範圍的值或進行不合法運算,會輸出錯誤的值而不報錯,與此相反,Ada 程式在編譯時會提示錯誤,或在運行 Ada 程式時產生Constraint_Error異常,異常和 C 中的信號Signal差不多。

相關詞條

熱門詞條

聯絡我們