Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
кожин / Лекции / Лекция 05 create_table.DOC
Скачиваний:
32
Добавлен:
20.03.2016
Размер:
233.47 Кб
Скачать
      1. Преобразование типов данных

Фразы WHERE и выражения (булевские, арифметические или строчные) могут исполь­зовать при сравнении данные различных типов. В этих случаях для выполнения оператора ORACLE обязательно использует преобразование данных. В следующих примерах ORACLE автоматически выполнит необходимые преобразования данных:

SELECTENAMEFROMEMPWHEREENAME= 135

SELECT ENAME FROM EMP WHERE EMPNO = '7936'

SELECT ENAME FROM EMP WHERE HIREDATE = '12-MAR-86'

SELECT ENAME FROM EMP WHERE ROWID = '00002514.0001.0001'

Для выполнения преобразования ORACLE может:

* преобразовать константу в тип данных столбца

* преобразовать значение столбца к типу данных константы

* преобразовать тип данных столбца к типу данных другого столбца.

Для преобразования используются функции TO_NUMBER,TO_DATETO_CHAR.

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

* если применяются функции явного преобразова­ния, SQL - операторы становятся проще для понимания;

* автоматическое преобразование данных может негативно влиять на производительность, особенно если столбец преобразовывается к типу данных константы;

* алгоритмы неявного преобразования могут меняться от версии к версии и от одного продукта ORACLE к другому и, следовательно, поведение явных преобразований более предсказуемо.

      1. Правила сравнения типов данных

Для положительных чисел сравнение обычное. Все отрицательные числа "меньше" положительных. Таким образом: -1 меньше 100, а -100 меньше чем -1.

Более поздняя дата рассматривается "больше", чем более ранняя. Например, '29-MAR-88' "меньше" чем '05-JAN-89', а '1:35pm' больше чем '10:09am'.

Для символьных данных значения сравниваются символ за символом, пока не обнаружится несовпадение. Какая строка имеет больший символ в этой позиции, та и считается "больше". Если две строки одинаковы по всем символам более короткой строки, то более длинная считается больше.

Символы сравниваются в соответствии с "последовательностью слияния" компьютера, на котором работает ORACLE. Один символ больше другого, если он находится после него в последовательности слияния.

ORACLE использует последовательность слияния своего компьютера. Буквы верхнего и нижнего регистров не эквивалентны. В ASCII все буквы нижнего регистра больше всех букв нижнего, для EBCDIC верно обратное.

В ASCII символьные литералы от '0' до '9' сортируются ниже алфавита, для EBCDIC также верно обратное.

      1. Значения Null

Если в определенном столбце строки данные отсутствуют, говорят что его значение null. Столбец с данными любого типа может содержать значение null, если только он специально не описан как NOT NULL в момент создания.

Значение null обладает следующими свойствами:

* присваивается, когда действительное значение неизвестно или бессмысленно;

* не эквивалентно значению нуль;

* будет превращать в null любое выражение. Например NULL множенное на 10 дает NULL.

Для временного преобразования null в действительное значение используется функция NVL. Например NVL(COMM,0) возвращает 0, если значение в столбце COMM – null, и действительное значение, если оно не null.

Большинство групповых функций игнорирует значения null. Например запрос, вычисляющий среднее из пяти значений: 1000, NULL, NULL, NULL, 2000 возвратит 1500, так как (1000+2000)/2 =1500.

Напрямую со значениями null должны работать только операции сравнения (IS NULL или IS NOT NULL). Если со значением null используется любой другой оператор, результат всегда неизвестный. Так как NULL представляет собой отсутствие данных, он не может быть равен или не равен любому другому значению, кроме null.

ORACLE трактует условия, приводящие к неизвестному результату как FALSE. Например, если условие COMM = NULL всегда неизвестно, оператор SELECT с этим условием во фразе WHERE не будет возвращать ни одной строки. Заметьте, что в такой ситуации ORACLE не возвращает сообщение об ошибке.

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

10

10

NULL

NULL

10

10

NULL

NULL

IS NULL

IS NOT NULL

IS NULL

IS NOT NULL =NULL !=NULL =NULL !=NULL

FALSE

TRUE

TRUE

FALSE

неизвестный

неизвестный

неизвестный

неизвестный

Соседние файлы в папке Лекции