Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УП СУБД Ч.2.doc
Скачиваний:
12
Добавлен:
11.06.2015
Размер:
545.79 Кб
Скачать

Раздел 2. Создание таблиц

2.1. Общие сведения

Для создания таблицы используется команда CREATE TABLE. Эта команда является одной из наиболее сложных по количеству вариантов использования и существующих опций; в данном пособии приводятся наиболее распространенные.

При создании таблицы указывается:

  • имя таблицы и схема, в которой таблица создается (опционально);

  • определения полей таблицы;

  • определения ограничений;

  • дополнительные опции, например, описывающие физическое размещение таблицы, и т.д.

Определение поля таблицы включает:

  • имя поля, которое должно быть уникальным в данной таблице и соответствовать общим правилам (см. Часть 1 Пособия);

  • тип значения поля;

  • значение по умолчанию (опционально);

  • список ограничений, накладываемых на это поле.

2.2. Типы значений

Используемые в системе Oracle типы значений можно разделить на типы собственно этой системы, и типы, используемые для совместимости со стандартами ANSI (American National Standards Institute) языка SQL. Документация по Oracle традиционно рекомендует избегать использования типов ANSI, однако их использование может быть полезным при разработке переносимых на другие системы приложения. Кроме того, ANSI-типы являются более распространенными. Впрочем, эти рекомендации не являются принципиальными, и далее обе категории типов рассматриваются равноправно.

Как уже упоминалось в Части 1 Пособия, все типы можно разделить на числовые, символьные (строковые), типы для представления значений дат и времени, и специальные типы. Ниже в Таблице 1 приведены наиболее распространенные типы с примерами использования этих типов.

Таблица 1. Типы значений Oracle

Численные типы

NUMBER

число в формате целого и вещественного с указанием общей длины значения в количестве значащих символов всего числа и дробной части

NUMBER

NUMBER(10)

NUMBER(10,2)

длина до 22 байт

FLOAT

число в формате вещественного с указанием общей длины значения в количестве значащих символов

FLOAT

FLOAT(10)

длина до 22 байт

BINARY_FLOAT

вещественное число длиной 32 разряда

BINARY_FLOAT

длина 4 байта (5)

BINARY_DOUBLE

вещественное число длиной 64 разряда

BINARY_DOUBLE

длина 8 байт (9)

INTEGER

INT

SMALLINT

ANSY-типы для хранения целочисленных значений (хранятся как значения NUMBER)

длина 22 байта

REAL

DECIMAL

ANSY-типы для хранения вещественных значений (хранятся как значения FLOAT)

Символьные

CHAR

CHARACTER

символьные данные фиксированной длины

CHAR

CHAR(20)

NCHAR

NCHARACTER

символьные данные фиксированной длины с использованием символом национальных алфавитов

VARCHAR2

VARCHAR

символьные данные произвольной длины

NVARCHAR2

символьные данные произвольной длины с использованием символом национальных алфавитов

Типы для представления значений дат и времени

DATE

значение даты

TIMESTAMP

значение даты и времени

Специальные типы

BLOB

бинарные данные очень большого размера

CLOB

NCLOB

текстовые данные очень большого размера

ROWID

представляет адрес записи таблицы

Замечания.

Тип NUMBER(p,s) является основным типом для представления чисел. Необязательные значения p и s означают соответственно количество знаков всего и после десятичной запятой. Например, тип NUMBER(10,3) может использоваться для хранения вещественных чисел с семью знаками перед запятой и тремя после. Для хранения целых чисел можно использовать описание NUMBER(10, 0), в этом случае при присваивании полю вещественного значения дробная часть будет отбрасываться.

Для хранения вещественных чисел можно использовать тип FLOAT(p), который эквивалентен типу NUMBER(p).

Типы INTEGER, INT, SMALLINT, REAL, DECIMAL, используемые для совместимости со стандартами ANSI, представляются типом NUMBER; длина реально хранимого поля может существенно отличаться от ожидаемой. Например, длина поля типа SMALLINT будет иметь не 2 байта, как это бывает в языках программирования типа C/C++ или в системе Microsoft SQLServer, а 22 байта.

Рассмотрим пример создания иллюстративной таблицы, поля которой имеют различные виды численных типов.

CREATE TABLE TypeTest

( p1 NUMBER,

p2 NUMBER(5),

p3 NUMBER(5,3),

p4 NUMBER(5,0),

p5 FLOAT,

p6 FLOAT(5),

p7 INTEGER,

p8 BINARY_FLOAT,

p9 BINARY_DOUBLE );

Ниже представлена структура этой таблицы согласно данным системного каталога, полученные при помощи команды DESCR. Обратите внимание на длины и разрядность полей, а так же тот факт, что тип INTEGER из категории ANSI-типов представляется как тип NUMBER.

Table

Column

Data Type

Length

Precision

Scale

TYPETEST

P1

Number

-

-

-

 

P2

Number

-

5

0

 

P3

Number

-

5

3

 

P4

Number

-

5

0

 

P5

Float

22

126

-

 

P6

Float

22

5

-

 

P7

Number

-

-

0

 

P8

Binary_Float

4

-

-

 

P9

Binary_Double

8

-

-

Добавив следующие две записи в эту таблицу, можно посмотреть на различия представления значений в зависимости от типа и значений разрадности и точности.

INSERT INTO TypeTest

VALUES ( 1, 1, 1, 1, 1, 1, 1, 1, 1)

INSERT INTO TypeTest

VALUES ( 1, 12345.67, 45.67, 12345.67, 12345.67, 12345.67, 12345.67, 12345.67, 12345.67)

SELECT p1 "n", p2 "n(5)", p3 "n(5,3)",

p4 "n(5,0)", p5 "float", p6 "float(5)",

p7 "int", p8 "BINARY_FLOAT"

FROM TypeTest

n

n(5)

n(5,3)

n(5,0)

float

float(5)

int

BINARY_FLOAT

1

1

1

1

1

1

1

1.0E+000

1

12346

45.67

12346

12345.67

12000

12346

1.23456699E+004

Тип CHAR предназначен для хранения последовательности символов, представленных однобайтовыми символами. Количество символов не должно превышать 2000; если количество символов опущено, длина по умолчанию – один символ. Тип NCHAR предназначен для хранения символов, использующих двухбайтовое представление. Длина NCHAR-поля не может превышать 2000 байт, что достаточно для хранения 1000 символов.

Следует иметь в виду, что все значения конкретного поля типа CHAR имеют фиксированную длину, одинаковую для всех строк таблицы вне зависимости от реальной длины хранимых строк. Для хранения строк переменой длины рекомендуется использовать типы VARCHAR2 (VARCHAR) и NVARCHAR2. Значения этих типов действительно представляются в базе данных в виде строк переменной длины. Максимальная длина строк – до 4000 байт.

Определение следующей таблицы иллюстрирует употребление символьных типов; ниже приведены определение таблицы и описание ее структуры, возвращаемое командой DESCR.

CREATE TABLE CharTable

( p1 CHAR,

p2 CHAR (10),

p3 NCHAR,

p4 CHAR(10),

p5 VARCHAR (1000) )

Table

Column

Data Type

Length

Precision

Scale

CHARTABLE

P1

Char

1

-

-

 

P2

Char

10

-

-

 

P3

Nchar

2

-

-

 

P4

Nchar

20

-

-

 

P5

Varchar2

1000

-

-


“Длинные ” типы BLOB (Binary Long Object), CLOB (Character Large Object) и NCLOB используются для хранения в БД данных очень большого объема. Тип BLOB предназначен для хранения двоичной информации (например, растровых изображений), типы CLOB и NCLOB – длинного текста. Значения этих типов нельзя сохранять и извлекать из базы данных напрямую при помощи команд SQL, а так же использовать в выражениях, в частности, в операции сравнении, но можно удалять и проверять при помощи предиката IS NULL.

Наконец, рассмотрим тип ROWID, который предназначен для представления логического адреса записей таблиц. Это поле автоматически создается для каждой таблицы, и ее можно использовать в запросах, например:

SELECT ROWID FROM TypeTest

ROWID

AAAE4vAAEAAAFIUAAA

AAAE4vAAEAAAFIUAAB

Эти значения – адреса строк можно использовать для обращения к строкам, например:

SELECT * FROM TypeTest

WHERE ROWID = 'AAAE4vAAEAAAFIUAAA'

P1

P2

P3

P4

P5

P6

P7

P8

P9

1

1

1

1

1

1

1

1.0E+000

1.0E+000

Впрочем, подобные запросы и в целом использование типа ROWID ограничены в употреблении.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]