понедельник, 4 апреля 2011 г.

Операции с типами даты-времени и интервальными

Итак, наконец-то решил опубликовать статью о языке PL/SQL. Не всегда у меня получается публиковать регулярно подобные статьи – надо будет хотя бы один раз в неделю это делать, чтобы быстрее разделаться с этими типами данных. Как вы догадались – сегодня опять будет статья о этих типах данных. Маленькая зато статейка, про операции с типами дата-время и интервальными типами. А также – будут рассмотрены вопросы усечения точности.

Сейчас допишу статью – и пойду смотреть мультики (что-то за прошлую неделю просмотрел довольно много фильмов и мультов). Сегодня решил посмотреть мультфильм рио, думаю – всем он уже знаком по рекламе. Если вдруг нет – то обязательно зайдите на сайт, там можно подробную информацию про него найти. Кстати, на сайте можно найти ссылку на скачивание этого мультика.

Арифметические операции со значениями даты-времени и интервальными значениям:

Проще всего описать арифметические операции с интервальными значениями и даты-времени проиллюстрирует таблица ниже:

Тип1
Операция
Тип2
Результат
Дата-Время
+
Интервал
Дата-Время
Дата-Время
-
Интервал
Дата-Время
Интервал
+
Дата-Время
Дата-Время
Дата-Время
+
Дата-Время
Интервал
Интервал
+
Интервал
Интервал
Интервал
-
Интервал
Интервал
Интервал
*
Число
Интервал
Число
*
Число
Интервал
Интервал
/
Число
Интервал

В принципе, я пока эту таблицу не проверял, так что – сами экспериментируйте с языком, смотрите, что у вас получится.

Предотвращение проблемы усечения с помощью подтипов даты-времени:

Точность по умолчанию для некоторых типов даты-времени меньше максимально возможной точности. Например, точность по умолчанию для значений DAY TO SECOND равны DAY(2) TO SECOND(6), в то время как максимальные значения точности равны DAY(9) TO SECOND(9). Поэтому при присваивании значений переменных этих типов или передаче значений параметров в подпрограммы их значения могут быть усечены, чтобы избежать этой проблемы, можно объявить параметры и переменные подпрограммы с помощью приведенных ниже подтипов, использующих максимальное значение для точности:
  • TIMESTAMP_ UNCONSTRAINED
  • TIMESTAMP_TZ_ UNCONSTRAINED
  • TIMESTAMP_LTZ_ UNCONSTRAINED
  • YMINTERVAL_ UNCONSTRAINED
  • DSINTERVAL_ UNCONSTRAINED
Вот так надо решать возникающие проблемы. Кстати, если например мне нужна будет карта Турции – то я зайду на этот ресурс и посмотрю карту, со всем необходимым усердием. А если мне понадобиться уйти от проблем с усечением даты-времени в языке PL/SQL – воспользуюсь подтипов TIMESTAMP_TZ_UNCONSTRAINED.

В ближайшее время я планирую опубликовать еще пару статей о типах данных – и, наконец-то, перейду к описанию управляющих конструкций (циклы, ветвления и тд). Быстрее бы уже, а то надоели типы. В общем – до встречи, сегодня публиковать уже ничего не буду.

Комментариев нет:

Отправить комментарий