PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-有限制的子型別

LuiseDalian發表於2014-03-09

0.1.1 有限制的子型別

有限制的子型別擁有它的基型別的值的子集。

如果基型別允許設定sizeprecisionscalerange,則可以將這些指定給子型別。

SUBTYPE 子型別 IS 基型別

  { precision [, scale ] | RANGE 最小值 .. 最大值 } [ NOT NULL ]

除此之外,允許為子型別設定的唯一的約束就是NOT NULL

注意:唯一可以指定值域的基型別是PLS_INTEGER和它的子型別(預定義的和使用者定義的)

--檢測到超出範圍的值

DECLARE

    SUBTYPE Balance IS NUMBER(8,2);

    checking_account  Balance;

    savings_account   Balance;

 

BEGIN

    checking_account := 2000.00;

    savings_account  := 1000000.00;

END;

受約束的子型別可以被隱式地轉換為它的基型別,但基型別只能當它的值不違背子型別的約束時,才能被隱式地轉換為子型別。

DECLARE

    SUBTYPE Digit        IS PLS_INTEGER RANGE 0..9;

    SUBTYPE Double_digit IS PLS_INTEGER RANGE 10..99;

    SUBTYPE Under_100    IS PLS_INTEGER RANGE 0..99;

 

    d   Digit        :=  4;

    dd  Double_digit := 35;

    u   Under_100;

BEGIN

    u := d;   -- 成功, Under_100的範圍包括Digit

    u := dd;  -- 成功, Under_100的範圍包括Double_digit

    dd := d;  -- 超範圍了

END;

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

相關文章