При помощи типов этого семейства хранятся целые и действительные значения. Существуют три базовых типа: NUMBER, PLS INTEGER и BINARY_INTEGER. В переменных, имеющих тип NUMBER, можно сохранять как целые, так и действительные величины, а в переменных
типа и - только целые числа.
типа и - только целые числа.
NUMBER С помощью данного типа можно хранить числа, как целые, так и с плавающей точкой. Он абсолютно аналогичен типу NUMBER, применяемому в базах данных. Синтаксис объявления числа:
NUMBER (Р,$);
где Р- точность (precision), a 5— масштаб (scale). Точность — это количество цифр в значении, а масштаб — количество цифр справа от десятичной точки. Использование как точности, так и масштаба необязательно, однако при указании масштаба необходимо указывать и точность. Различные комбинации точности и масштаба продемонстрированы в таблице 3.2.
Таблица 3.2. Значения точности и масштаба

Максимальная точность — 38 цифр, а масштаб может иметь значение в диапазоне от -84 до 127.
Подтип (subtype) — это альтернативное имя для некоторого типа. С его помощью можно ограничить множество значений, допустимых для переменных данного подтипа (см. ниже). Типу NUMBER эквивалентен целый ряд подтипов, которые, в сущности, являются тем же самым, что и NUMBER, так как ни один из них не ограничен. Альтернативные имена можно использовать для повышения удобочитаемости программ либо для обеспечения совместимости с типами данных, применяемыми в других базах данных. Типу NUMBER эквивалентны:
- DEC
DECIMAL
DOUBLE PRECISION
FLOAT
• REAL
Среди типов, которые могут содержать числа с плавающей запятой, DEC, DECIMAL и NUMERIC имеют максимальную точность 38 десятичных знаков. DOUBLE PRECISION и FLOAT имеют точность 126 двоичных знаков, что приблизительно соответствует 38 десятичным цифрам. REAL имеет точность 63 двоичных знака, что приблизительно дает 18 десятичных знаков.
В дополнение к приведенным выше подтипам без ограничений, подтипы INTEGER, INT и SMALINT могут хранить целые числа с максимальной точностью 38 десятичных знаков.
BINARYINTEGER Данные, имеющие тип NUMBER, хранятся в десятичном формате, который специально создан для точного и эффективного хранения информации. Вследствие этого арифметические операции нельзя выполнять непосредственно над значениями типа NUMBER. Чтобы числовые величины могли быть обработаны, значения типа NUMBER
должны быть преобразованы в двоичный тип. Если имеется арифметическое выражение, в котором используются значения типа NUMBER, то в
PL/SQL это преобразование, а также (при необходимости) преобразование результата обратно к типу NUMBER выполняются автоматически.
Если же значение не будет храниться в базе данных, а будет применяться лишь в вычислениях, можно воспользоваться типом данных BINARYJNTEGER. Этот тип служит для хранения знаковых целых значений, которые могут лежать в диапазоне от -2 147 483 647 до +2 147 483 647. Данные хранятся в двоичном дополнительном формате, а это означает, что для их использования в вычислениях не требуется выполнять преобразование. Тип BINARYJNTEGER обычно имеют счетчики циклов.
Как и для NUMBER, для типа BINARYJNTEGER определен ряд подтипов. Однако в отличие от NUMBER подтипы BINARYJNTEGER ограничены, т.е. с их помощью можно хранить значения из ограниченного диапазона. Подтипы BINARYJNTEGER приведены в таблице 3.3.
Таблица 3.3. BINARYJNTEGER
Подтип
|
Ограничение
|
NATURAL
|
0...2 147483 647
|
NATURALN
|
0...2 147 483 647 NOT NULL
|
POSITIVE
|
1...2 147483 647
|
POSITIVEN
|
1...2 147 473 647 NOT NULL
|
SIGNTYPE
|
-1,0, 1
|
PLS_INTEGER Тип PLSJNTEGER имеет тот же диапазон значений, что и BINARYJNTEGER -.от-2 147 483 647 до +2 147 483 647, и реализован также при помощи собственного двоичного дополнительного формата. Однако, если при выполнении некоторой операции переполняется значение типа PLSJNTEGER, возникает ошибка. В случае же переполнения значения, имеющего тип BINARY_INTEGER результат может быть присвоен переменной типа NUMBER (который имеет больший диапазон) без всякой ошибки. Различие между этими двумя форматами иллюстрируется следующим сеансом SQL*Plus (см. ниже раздел "Выражения и операторы"):

| < Предыдущая | Следующая > |
|---|


