PL/SQL поддерживает оператор SUBTYPE
, который позволяет программисту определять собственные подтипы (иногда называемые абстрактными типами данных). В PL/SQL подтип представляет собой новый тип данных с тем же набором правил, но сокращенным подмножеством значений исходного типа. Подтипы делятся на две категории.
- Подтип с ограничениями. Набор значений подтипа является подмножеством набора значений исходного типа данных. Например, тип
POSITIVE
является подтипомBINARY_ INTEGER
с ограничениями. В пакетеSTANDARD
, где определяются типы данных и функции стандартного языка PL/SQL, подтипPOSITIVE
определяется следующим образом:
SUBTYPE POSITIVE IS BINARY_INTEGER RANGE 1 .. 2147483647;
В переменной, объявленной с типом POSITIVE
, могут храниться только целочисленные значения больше 0.
- Подтип без ограничений. Этот подтип имеет такой же набор значений, что и исходный тип данных. Например, тип
FLOAT
является подтипомNUMBER
без ограничений. Он определен в пакетеSTANDARD
следующим образом:
SUBTYPE FLOAT IS NUMBER;
Подтипы объявляются в разделе объявлений анонимного блока PL/SQL, процедуры, функции или пакета. Ранее уже приводился пример объявления подтипа из пакета STANDARD
. Общий формат объявления подтипа:
SUBTYPE имя_подтипа IS базовый_тип;
Здесь имя_подтипа — имя нового определяемого подтипа, а базовый_тип — имя типа данных, на котором основывается определяемый подтип.
Иначе говоря, подтипы данных без ограничений — это псевдонимы или альтернативные имена исходных типов данных. Несколько примеров:
PACKAGE utility AS SUBTYPE big_string IS VARCHAR2(32767); SUBTYPE big_db_string IS VARCHAR2(4000); END utility;
Имейте в виду, что на переменные, привязанные к подтипу, не распространяется ограничение NOT NULL
, а также игнорируются начальные значения, включенные в исходное объявление переменной или спецификацию столбца.