Выбрать главу

0RA-01873: the le a d in g p re c is io n o f the in t e r v a l i s too sm a ll

(0RA-01873: главная разрядность интервала слишком мала)

Следующий запрос выбирает строки из таблицы coupons, чтобы можно

было видеть форматирование значений столбца duration:

□ SELECT *

FROM coupons;

C0UP0N_ID NAME DURATION

1 $1 o f f Z f i l e s +001-00

168 Глава 5

2 $2 o f f Pop 3 +000-11

3 $3 o f f Modern Science +001-02

4 $2 o f f Tank War +001-03

5 $2 o f f Chemistry +000-05

6 $2 o f f Creative Yell +123-00

Использование типа INTERVAL DAY TO SECOND

Тип INTERVAL DAY TO SECOND используется для хранения интервалов, измеряемых

в днях и секундах. Следующий оператор создает таблицу

promotions, в которой хранится информация о специальных рекламных

предложениях. Таблица предложений имеет столбец duration типа INTER VAL

DAY ТО SECOND, где хранится интервал времени, в течение которого действуют

эти специальные предложения:

□ CREATE TABLE promotions (

promotion_id INTEGER CONSTRAINT promotions_pk PRIMARY KEY,

name VARCHAR2(30) NOT NULL,

duration INTERVAL DAY(3) TO SECOND (4)

);

Указана разрядность 3 для количества дней и разрядность 4 для количества

дробных знаков секунд столбца duration. Это означает, что можно

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

цифр справа от десятичной точки в количестве секунд интервала.

Для представления базе данных литерального значения INTERVAL DAY ТО

SECOND можно использовать следующий упрощенный синтаксис:

□ INTERVAL ' [+ ]| [- ][d ] [ h [ :m [ :s ] ] ] ' [0АТ[(разрядность_дней)]])

[TO HOUR | MINUTE | SEC0ND[( разрядность_секунд)] ]

где

■ + (или -) - необязательный индикатор, указывающий, будет интервал

положительным (принимается по умолчанию) или отрицательным;

■ d - число дней в интервале;

■ h - необязательное количество часов в интервале; если указываются

дни и часы, то нужно включить в литерал фразу ТО HOUR;

■ m - необязательное количество минут в интервале; если указываются

дни и минуты, то нужно включить в свой литерал фразу ТО

MINUTES;

■ s - необязательное количество секунд в интервале; если указываются

дни и секунды, то нужно включить в свой литерал фразу ТО SECOND;

■ разрядность_^дней - необязательная разрядность для дней (значение

по умолчанию 2);

■ разрядность_секунд - необязательная разрядность для дробных долей

секунд (значение по умолчанию равно 6).

В приведенной ниже таблице показано несколько примеров литералов

типа INTERVAL DAY ТО SECOND.

Хранение и обработка дат и времени 169

Литерал

INTERVAL

INTERVAL

INTERVAL

INTERVAL

INTERVAL 1

MINUTE

INTERVAL 1

SECOND

•3’ DAY

’ 2' HOUR

’ 25’ MINUTE

•45' SECOND

3 2:25’ DAY TO

3 2:25 :4 5’ DAY TO

INTERVAL 4 2 3 2:2 5 :4 5 .1 2 ’

DAY(3) TO SEC0ND(2)

INTERVAL

SECOND

INTERVAL

SECOND

‘ 3 2:00 :4 5’ DAY TO

-3 2:25 :4 5’ 'DAY TO

INTERVAL '1234 2:25 :4 5’

DAY(3) TO SECOND

INTERVAL ‘ 123 2:25 :4 5.1 23’

DAY TO SEC0ND(2)

Описание

Интервал продолжительностью 3 дня.

Интервал продолжительностью 2 ч.

Интервал продолжительностью 25 мин.

Интервал продолжительностью 45 сек.

Интервал продолжительностью 3 дня 2 ч

и 25 мин.

Интервал продолжительностью 3 дня 2 ч

25 мин и 45 сек.

Интервал продолжительностью 123 дня

2 ч 25 мин и 45.12 сек; разрядность дней

составляет 3 цифры, а разрядность дробных

долей секунды - 2 цифры.

Интервал продолжительностью 3 дня 2 ч

О мин и 45 сек.

Отрицательный интервал продолжительностью

3 дня 2 ч 25 мин и 45 сек.

Недопустимый интервал, так как число

цифр дней превышает максимальную

разрядность (3).

Недопустимый интервал, поскольку количество

цифр дробной доли секунд превышает

указанную разрядность (3).

Следующий оператор INSERT добавляет строки в таблицу promotions,

причем значения столбца duration устанавливаются на какой-либо из допустимых

интервалов, показанных в предыдущей таблице:

□ INSERT INTO promotions (promotion_id, name, d u ra tio n )

VALUES (1,

INSERT INTO

VALUES (2,

INSERT INTO

VALUES (3,

INSERT INTO

VALUES (4,

INSERT INTO

VALUES (5,

INSERT INTO

VALUES (6,

o f f Z F i l e s ’ , INTERVAL ‘ 3 ’ DAY);

promotions (promotion_id, name, d u ra tio n )

20% o f f Pop 3 ’ , INTERVAL ‘ 2 ’ HOUR);

promotions (promotion_id, name, d u ra tio n )

30% o f f Modern S c ie n c e ’ , INTERVAL ‘ 25’ MINUTE);

promotions (promotion_id, name, d u ra tio n )

20% o f f Tank WAR’ , INTERVAL ‘ 45’ SECOND);

promotions (promotion_id, name, d u ra tio n )

10% o f f C h em istry ’ , INTERVAL ‘ 3 2 :2 5 ’ DAY TO MINUTE);

promotions (promotion_id, name, d u ra tio n )

20% o f f C re a tiv e Y e l l ' ,

INTERVAL ‘ 3 2:25 :4 5’ DAY TO SECOND);

170 Глава 5

INSERT INTO promotions (promotion_id, name, d u ra tio n )

VALUES (7, ‘ 15% o f f My Front L in e ’ ,

INTERVAL ‘ 123 2 :2 5 :4 5 .1 2 ’ DAY(3) TO SEC0ND(2));

Следующий запрос выбирает строки из таблицы promotions, чтобы ознакомить