Главная страница

Кириллов В.В., Громов Г.Ю. - Введение в реляционные базы данных. Литература для вузов isbn 9785941577705 в книге рассматриваются основные понятия баз данных и систем управления ими


Скачать 11.62 Mb.
НазваниеЛитература для вузов isbn 9785941577705 в книге рассматриваются основные понятия баз данных и систем управления ими
АнкорКириллов В.В., Громов Г.Ю. - Введение в реляционные базы данных.pdf
Дата16.04.2018
Размер11.62 Mb.
Формат файлаpdf
Имя файлаКириллов В.В., Громов Г.Ю. - Введение в реляционные базы данных.pdf
ТипЛитература
#18127
страница7 из 28
1   2   3   4   5   6   7   8   9   10   ...   28
4.5. Типы данных
SQL
Типы данных позволяют установить основные правила для данных, содер- жащихся в конкретном столбце таблицы, в том числе размер выделяемой для них памяти.
В языке SQL имеется несколько категорий типов данных, основные из кото- рых приведены в табл. 4.7.
Таблица 4.7.
Категории и типы данных
SQL:2003
Категория
Пример
Описание
Символьные
CHAR
,
VARCHAR
Любые комбинации символов из до- пустимого набора. Вариабельные ти- пы позволяют хранить строки пере- менной длины, тогда как остальные —
только строки фиксированной. В ва- риабельных типах данных автомати- чески удаляются замыкающие пробе- лы, а в других типах пробелы остаются
NATIONAL
CHARACTER
Типы данных, связанные с нацио- нальными символами
Двоичные
BLOB
,
CLOB
Двоичные (символьные) большие объекты
Числовые
NUMERIC(p, s)
Числовые значения с регулируемой точностью (
p
) и масштабом (
s
)
Дата/время
DATE
Данные, связанные со временем
Связь с данными
DATALINK
Определяет ссылку на файл или дру- гой внешний источник, не являющийся частью среды
SQL
Интервальные
INTERVAL
Определяет набор временных значе- ний или промежуток времени
XML
XML
Данные формата
XML
СУБД Oracle поддерживает множество типов данных, в том числе и боль- шинство стандартных типов SQL:2003.

Часть
II.
Язык SQL. Извлечение данных
78
4.5.1. Символьные
Символьные данные могут иметь фиксированную и переменную длину
(табл. 4.8). Эти данные обозначаются в SQL с помощью одинарных кавычек, о чем подробно рассказывалось в разд. 4.4.3. Данные с символами в формате
UNICODE (стандарт кодирования символов, позволяющий представить знаки практически всех письменных языков), как правило, содержат большее число байт, чем данные в стандарте ASCII (American Standard Code for Information
Interchange), и это надо учитывать, устанавливая длину (
n
) в байтах.
Таблица 4.8. Символьные данные в
Oracle
Oracle
SQL:2003
Описание
CHAR(n) [BYTE | CHAR]
,
CHARACTER(n) [BYTE | CHAR]
CHARACTER(n)
Хранит символьные данные фиксированной длины до
2000 байт. При указании ат- рибута
BYTE
длина массива измеряется в байтах. При указании атрибута
CHAR
дли- на измеряется в символах
NCHAR(n)
,
NATIONAL CHARACTER(n)
,
NATIONAL CHAR{n}
NATIONAL
CHARACTER
Хранит данные в формате символов
UNICODE дли- ной от 1 до 2000
байт. По умолчанию

1 байт
VARCHAR(n)
,
CHARACTER VARYING(n)
,
CHAR VARYING(n)
CHARACTER
VARYING(n)
Хранит символьные данные размером от 1 до 4000
байт.
Oracle рекомендует исполь- зовать вместо этого типа тип
VARCHAR2
VARCHAR2(n [BYTE | CHAR])
CHARACTER
VARYING(n)
Хранит символьные дан- ные переменной длины до
4000 байт (определяется параметром n
). Атрибут
BYTE
показывает, что раз- мер измеряется в байтах.
Если вы используете ат- рибут
CHAR
,
база
Oracle должна провести внутрен- нее преобразование в оп- ределенное количество байт, которое должно со- ответствовать ограниче
- нию в 4000 байт

Глава 4. Основы SQL
79
Таблица 4.
8
(окончание)
Oracle
SQL:2003
Описание
NVARCHAR2(n)
Отсутствует
Представляет собой реко- мендуемый
Oracle тип для хранения символов
UNICODE переменной длины от 1 до 4000
байт
4.5.2. Двоичные
LOB-типы используются для хранения больших объектов (Large Object).
Двоичные объекты BLOB используются для хранения очень больших объек- тов данных с неопределенным или переменным размером, таких как графика, векторная графика, звуковые файлы, фотографии, видеосегменты и другие виды мультимедийной информации. Символьные объекты CLOB использу- ются для хранения глав книг, больших документов и т. п. В табл. 4.9 приве- дено описание двоичный типов данных.
Таблица 4.9. Двоичные данные в
Oracle
Oracle
SQL:2003
Описание
BLOB
BLOB
Хранит большой двоичный объект (
Binary Large
Object
, BLOB) размером от 8 до 128 терабайт в зависимости от размера блока в базе данных
CLOB
CLOB
Хранит большой символьный объект
(Large Character Object
, CLOB) размером от 8 до 128 терабайт в зависимости от размера блока в базе данных
NCLOB
NCLOB
Представляет собой
CLOB с поддержкой мно- гобайтовых символов (например,
UNICODE) размером от 8 до 128 терабайт в зависимости от размера блока базы данных
В Oracle большие двоичные объекты (BLOB, CLOB и NCLOB) имеют сле- дующие ограничения:

их нельзя выбирать с удаленной машины;

их нельзя сохранять в кластерах;

они не могут быть компонентом предложений
ORDER BY
и
GROUP BY в за- просе;

Часть
II.
Язык SQL. Извлечение данных
80

их нельзя использовать в агрегатных функциях запроса;

на них нельзя ссылаться в запросах при помощи инструкций
DISTINCT
и
UNIQUE
или в соединениях;

они не могут быть частью первичного ключа или ключа индекса;

их нельзя использовать в предложении
UPDATE
ОF
триггера
UPDATE
4.5.3. Числовые
Используются для хранения нулевых, положительных и отрицательных чи- сел с фиксированной и плавающей запятой (точкой). Из всех, перечислен- ных в табл. 4.10, типов на практике можно использовать только один
NUMBER(p, s)
. Остальные типы числовых данных существуют в стандарте и сохранены для поддержания ранее созданных программ.
Таблица 4.10. Числовые данные в
Oracle
Oracle
SQL:2003
Описание
BINARY_FLOAT
FLOAT
Хранит 32
- битное число с пла- вающей точкой
BINARY_DOUBLE
FLOAT
Хранит 64
- битное число с пла- вающей точкой
DECIMAL(p, s)
DECIMAL(p, s)
Синоним типа
NUMBER
, прини- мающий в качестве аргументов точность и масштаб
DOUBLE PRECISION
DOUBLE PRECISION
Хранит значения с плавающей точкой двойной точности. То же, что
FLOAT(126)
FLOAT(n)
FLOAT(n)
Хранит числовые данные с пла- вающей точкой с двоичной точ- ностью до 126
INTEGER(n)
INTEGER
Хранит целые числа со знаком и без знака с точностью до 38.
Тип
INTEGER
считается синони- мом
NUMBER
NUMBER(p, s)
,
NUMERIC(p, s)
NUMERIC(p, s)
Хранит числа с точностью в пределах от 1 до 38 и масшта- бом от –84 до 127

Глава 4. Основы SQL
81
Таблица 4.10 (окончание)
Oracle
SQL:2003
Описание
REAL
REAL
Хранит значения с плавающей точкой с одинарной точностью.
То же, что
FLOAT(63)
SMALLINT
SMALLINT
То же, что
INTEGER
4.5.4. Дата/время
В Oracle тип
DATE
хранит дату и время, т. е. заменяет стандартные типы
DATE
и
TIMESTAMP
, хотя и сохранил форматы стандарта (табл. 4.11). Для получения всех необходимых видов дата/время в Oracle используются функции
TO_CHAR
и (или)
TO_DATE
(см. разд. 4.6) и соответствующий формат даты
(см. разд. 4.5).
Таблица 4.11. Дата/время в
Oracle
Oracle
SQL:2003
Описание
DATE
DATE
Хранит дату и время от 00:00:00 01-01-
4712 до н. э. до 23:59:59 31-12-9999
TIMESTAMP(n){[WITH
TIME ZONE] | [WITH
LOCAL TIME ZONE]}
TIMESTAMP[WITH
TIME ZONE]
Значение полной даты и време- ни, где n

количество цифр для долей секунды в поле секунд
(допустимые значения 0—9, по умолчанию

6).
При указании атрибута
WITH
TIME ZONE
сохраняется пере- данный в качестве параметра часовой пояс (по умолчанию

часовой пояс текущего сеанса) и значение времени выдается с учетом этого часового пояса.
При указании атрибута
WITH
LOCAL TIME ZONE
данные хра- нятся с учетом часового пояса текущего сеанса и возвращают- ся также с учетом часового поя- са текущего сеанса

Часть
II.
Язык SQL. Извлечение данных
82
4.5.5. Связь с данными
Для связи с данными в Oracle используется тип
BFILE

SQL:2003
DATALINK
), который содержит указатель на объект типа
BLOB
,хранимый вне пределов базы данных, но находящийся на локальном сервере и имеющий размер до 4 Гбайт. База данных осуществляет потоковый доступ по чтению (но не по записи) к этому внешнему объекту. Если выудалите строку, содержащую значение типа
BFILE
,будет удален только указатель (исходная структура файлов не затрагивается).
4.5.6. Интервальные
Используются для описания промежутков времени между двумя временными отсчетами, задаваемыми типом "Дата/время" (табл. 4.12).
Таблица 4.12. Интервальные данные в
Oracle
Oracle
SQL:2003
Описание
INTERVAL DAY(n) ТО
SECOND (х)
INTERVAL
Хранит промежуток времени, измеряе- мый в днях, часах, минутах и секундах, n

число цифр в поле "день" (допусти- мые значения 0—9, по умолчанию

2), х

число цифр для долей секунды в поле секунд (допустимые значения 0—
9, по умолчанию

6)
INTERVAL YEAR (n)
ТО MONTH (х)
INTERVAL
Хранит промежуток времени, измеряе- мый в годах и месяцах, где n

число цифр в поле года. Значение n
может быть от 0 до 9, по умолчанию

2
4.5.7. XML
Для хранения в базе Oracle данных формата XML используется
XMLTYPE
(в SQL:2003
XML
). Доступ к данным XML осуществляется с помощью выра- жений XPath, а также нескольких встроенных XPath-функций, функций SQL и пакетов PL/SQL. Тип
XMLTYPE
определяется системой, поэтому его можно применять в качестве аргумента функций, а также типа данных для столбца в таблице или представлении. При использовании этого типа в таблице дан- ные можно сохранить в форме
CLOB
или связанного объекта.

Глава 4. Основы SQL
83
4.5.8. Данные, специфичные для СУБД
Oracle
В Oracle есть специфичные данные, отсутствующие в стандарте SQL:2003, описание которых приведено в табл. 4.13.
Таблица
4.13.
Данные в
Oracle
Oracle
SQL:2003
Описание
ROWID
Нет
Представляет собой уникальный иден- тификатор типа base-
64 для каждой строки таблицы. Часто используется с псевдостолбцом
ROWID
UROWID [(п)]
Нет
Хранит значение типа base-
64, показы- вающее логический адрес строки в таб- лице. По умолчанию размер составляет
4000 байт. При желании можно указать размер в пределах до 4000
байт
4.6. Функции
SQL
Функции могут быть использованы везде, где используются переменные, столбцы или выражения (соответствующего типа). Их обычно подразделяют на числовые, символьные, агрегатные, функции работы с датами (дата и вре- мя) и т. п. (см. табл. 4.14—4.22).
В описаниях функций используются следующие параметры:

char
, char1
, char2
,... — константы в апострофах или выражения типа
CHAR
;

d
, d1
, d2
,... — константы в апострофах или выражения типа
DATE
;

expr
, expr1
, expr2
,... — любые выражения;

fmt
— формат данных;

k
, m
, n
— числовые константы или выражения типа
NUMBER
;

nls
— выражение вида 'NLS_SORT = name'
;

raw
— исходные данные;

rowid
— внутренний уникальный идентификатор строки;

set
, set1
, set2
— наборы символов;

z1
, z2
— часовые пояса (см. табл. 4.16).

Часть
II.
Язык SQL. Извлечение данных
84
4.6.1. Числовые функции
Таблица 4.14.
Числовые функции
Функции
Возвращаемое значение
ABS(n)
Абсолютное значение n
, большее или равное n
ACOS(n)
Арккосинус n
(
n от –1 до 1), результат от 0 до в радианах
ATAN(n)
Арктангенс n
(
n не ограничено), результат от – /2 до
/2
ATAN2(n/m)
Арктангенс n
и m
(
n и m
не ограничены), результат от –
до
CEIL(n)
Наименьшее целое, не меньшее n
COS(n)
Косинус n
, заданного в радианах
COSH(n)
Гиперболический косинус n
в радианах
EXP(n)
Возведение e
(exp) в степень n
(где е
= 2.7182818)
FLOOR(n)
Наибольшее целое, меньшее или равное n
LN(n)
Натуральный логарифм n
, где n
> 0
LOG(m,n)
Основание m
логарифма n
MOD(m,n)
Остаток от деления m
на n
POWER(m,n) m
в степени n
. Если n
не целое, то оно усекается до целого
ROUND(n[,m]) n
, округленное до m
- го десятичного знака; если m
опущено, то оно принимается равным 0. m
может быть отрицательным для округления цифр левее десятичной точки
SIGN(n)
Если n
<
0, то –1; если n
=
0, то 0;
если n
>
0, то 1
SIN(n)
Синус n
, заданного в радианах
SINH(n)
Гиперболический синус n
в радианах
SQRT(n)
Квадратный корень из n
; если n
<
0, то
NULL
TAN(n)
Тангенс n
, заданного в радианах
TANH(n)
Гиперболический тангенс n
в радианах
TRUNC(n[,m]) n
, усеченное до m
десятичных знаков; если m
опущено, то оно принимается равным 0. m
может быть отрицательным для усе- чения (обнуления) цифр слева от десятичной точки

Глава 4. Основы SQL
85
4.6.2. Символьные функции
Таблица 4.15.
Символьные функции
Функции
Возвращаемое значение
ASCII(char)
Код ASCII первого символа символьной переменной char
CHR(n)
Символ, код ASCII которого равен n
CONCAT(char1, char2
Соединяет (конкатенирует) строку char1
со строкой char2
(Эквивалентна выражению: char1
||
char2
)
INITCAP(char)
Символьная переменная с первыми буквами слов, начи- нающихся с заглавной буквы
INSTR(char1, char2[,n[,m]])
Позиция m
- го включения char2
в char1
при начале поиска с позиции n
. Если m
опущено, по умолчанию оно равно 1; аналогично для n
. Позиции даются относительно первого знака char1
, даже если n
> 1
INSTRB(char1, char2[,n[,m]])
Эквивалентна
INSTR
, но n
и результат возвращаются в байтах, а не в позициях символов. Эту функцию полезно использовать при работе с многобайтовыми символьными строками
LENGTH(char)
Длина в знаках символьной переменной char
LENGTHB(char)
Длина в байтах символьной переменной char
LOWER(char) char
, где все буквы преобразованы в строчные (ма
- ленькие)
LPAD(char1,n
[,char2])
Строка char1
, дополненная слева до длины n
последова- тельностью символов из строки char2
с повторением этой последовательности столько раз, сколько необходимо.
Если char2
опущено, то для заполнения используются пробелы
LTRIM(char
[,set])
Удаляет из char начальные знаки до тех пор, пока не поя- вится знак, отсутствующий среди знаков set
. При отсутст- вии set из char удаляются все левые пробелы
NLS_INITCAP(char
[,nls])
Аналог
INITCAP
, но необязательный аргумент nls позво- ляет задать используемый в функции национальный язык
NLS_LOWER(char
[,nls])
Аналог
LOWER
, но необязательный аргумент nls позволяет задать используемый в функции национальный язык

Часть
II.
Язык SQL. Извлечение данных
86
Таблица 4.15 (окончание)
Функции
Возвращаемое значение
NLSSORT(char
[,nls])
Байтовая строка, использованная для сортировки char на базе языка, заданного аргументом nls
. Эту функцию по- лезно применять для сравнения строк в различных языках
NLS_UPPER(char
[,nls])
Аналог
UPPER
, но необязательный аргумент nls позволяет задать используемый в функции национальный язык
REPLACE(char1, char2[,char3])
Строка, полученная из char1
, в которой все вхождения char2
заменены на char3
. Если char3
отсутствует, то все вхождения char2
в char1
удаляются
RPAD(char1,n
[,char2])
Строка char1
, дополненная справа символами char2
, с повторением, если необходимо. Если char2
опущена, то char1
дополняется пробелами
RTRIM(char
[,set])
Удаляет из char конечные знаки до тех пор, пока не поя- вится знак, отсутствующий среди знаков set
. При отсутст- вии set из char удаляются все правые пробелы
SOUNDEX(char)
Фонетическое представление char
(четырехсимвольное представление, показывающее, как звучит начало char
)
SUBSTR(char,m
[,n])
Подстрока, получаемая из char
, начиная с символа m
Если задано n
, то подстрока ограничивается n
символами.
При отрицательном m
символы отсчитываются с конца char
SUBSTRB(char,m
[,n])
Эквивалентно
SUBSTR
, но аргументы m
и n
выражаются не в символах, а в байтах. Эту функцию полезно исполь- зовать при работе с многобайтовыми символьными строками
TRANSLATE(char, set1, set2)
Строка, полученная трансляцией char в наборе set1
в набор set2
TRIM([{{LEADING
| TRAILING
BOTH} char1} char1} FROM] char2)
Если задано
LEADING
, из char2
удаляются начальные char1
. Если задано
TRAILING
, из char2
удаляются конеч- ные char1
. Если задано
BOTH
или ничего, из char2
удаля- ются начальные и конечные char1
. По умолчанию char1

пробел; если определено только char2
, из char2
удаляются начальные и конечные пробелы; если char1
или char2
равно
NULL
, то возвращается
NULL
UPPER(char)
Строка, полученная из char заменой ее строчных букв на заглавные

Глава 4. Основы SQL
87
4.6.3. Даты и время
Таблица 4.16.
Функции работы с датами и временем
Функции
Возвращаемое значение
ADD_MONTHS(d,n)
Дата d
плюс n
месяцев
LAST_DAY(d)
Дата последнего дня месяца, заданного датой d
MONTHS_BETWEEN
(d1,d2)
Количество месяцев между датами d1
и d2
. Eсли d1
> d2
, то результат положителен, иначе отрицателен
NEW_TIME(d,z1,z2)
Преобразует дату и время, заданное d
в часовом поясе z1
, в дату и время в часовом поясе z2
. Символьные значения z1
и z2
выбираются из следующего списка:
AST
,
ADT

Атлантическое стандартное и дневное время;
BST
,
BDT

Берингово стандартное и дневное время;
CST
,
CDT

Центральное стандартное и дневное время;
EST
,
EDT

Восточное стандартное и дневное время;
GMT

Среднее время по Гринвичу;
HST
,
HDT

Аляски
-
Гаваев стандартное и дневное время;
MST
,
MDT

Монтаны стандартное и дневное время;
NST

Нью
-
Фаунленда стандартное время;
PST
,
PDT

Тихоокеанское стандартное и дневное время;
YST
,
YDT

Юкона стандартное и дневное время
NEXT_DAY(d,char)
Дата первого из дней недели, обозначенной char
, кото- рая больше или равна d
ROUND(d[,fmt])
Значение d
, округленное до ближайшего числа в фор- мате, заданном fmt
(например, год или месяц). По умолчанию
DD
SYSDATE
Текущая дата и время
TRUNC(d[,fmt])
Значение d
, усеченное до ближайшего числа в форма- те, заданном fmt
(например, год или месяц). По умол- чанию
DD

Часть
II.
Язык SQL. Извлечение данных
88
Таблица 4.17.
Форматы функций
ROUND
и
TRUNCATE
Используемый формат
Значение
CC | SCC
Дата первого дня века
YYYY | SYYYY | YEAR |
SYEAR | YYY | YY | Y |
IYYY | IY | I
Дата первого дня года (при округлении: до или после 1
июля) (для года по
ISO)
Q
Дата первого дня квартала (при округлении: до или после 16
числа второго месяца квартала)
MONTH | MON | MM | RM
Дата первого дня месяца (при округлении: до или после 16
числа месяца)
WW | IW
(для года по I
SO)
Дата первого дня недели, начинающейся не с воскресения, а с дня недели, определенного по первому дню года
(при округлении: до или после
4 дня недели)
W
Дата первого дня недели, начинающейся не с воскресения, а с дня недели, определенного по первому дню месяца
(при округлении: до или по- сле 4 дня недели)
DDD | DD | J
Номер дня
DAY | DY | D
Дата первого дня недели (воскресенья)
HH | HH12 | HH24
Час
MI
Минута
Таблица 4.18.
Форматы дат и времени
Формат
Описание
SCC или
СС
Век;
'S'

префикс перед датой (до н. э.) с '
-
'
YYYY | SYYYY
Год;
'S'

префикс перед датой (до н. э.) с '
-
'
YYY | YY | Y
Последние 3, 2 или 1 цифра(ы) года
IYYY
4 цифры года в стандарте ISO
IYY | IY | I
Последние 3, 2 или 1 цифра(ы) года в стандарте ISO
Y,YYY
Год с запятой в данной позиции

Глава 4. Основы SQL
89
Таблица 4.18 (окончание)
Формат
Описание
SYEAR | YEAR
Год прописью.
'S'

префикс перед датой (до н. э.) с'
-
'
BC | AD
BC
/
AD

до н
э
. / н
э
B.C. | A.D.
Аналогично
BC
/
AD
Q
Квартал (четверть) года
MM
Номер месяца
RM
Номер месяца римскими цифрами (
I..XII
;
JAN=I
)
MONTH
Имя месяца, дополненное пробелами до девяти сим- волов
MON
Трехбуквенная аббревиатура имени месяца (
JAN
,
FEB
,...)
WW | W
Неделя года (1—52) или месяца (1—
5)
IW
Неделя года в стандарте ISO (1—21 или 1—
53)
DDD DD | D
Номер дня года (1—366), месяца (1—31) или недели
(1

7)
DAY
Наименование дня, дополненное пробелами до 9 символов
DY
Трехбуквенная аббревиатура наименования дня
J
День по Юлианскому календарю; количество дней от
31 декабря 4713
г.
до н. э.
AM | PM
Указатель часового пояса
A.M. | P.M.
Указатель часового пояса с периодами
HH | HH12
Время суток, интервал 1—
12
HH24
Время суток, интервал 0—
23
MI
Минуты (0—
59)
SS | SSSSS
Секунды (0—59) или после полуночи (0—
86399)
-/.,;:
Пунктуация, которая воспроизводится в результате "...текст..."
Строка в кавычках, которая воспроизводится в ре- зультате

Часть
II.
Язык SQL. Извлечение данных
90
4.6.4. Преобразование данных
Таблица 4.19.
Функции преобразования
Функция
Возвращаемое значение
CHARTOROWID(char)
Идентификатор строки (тип данных
ROWID
) из стро- ки char
CONVERT(char,set1
[,set2])
Преобразованное char
(по набору символов set1
).
Необязательный аргумент set2
задает исходный набор символов
HEXTORAW(char)
Строка char
, преобразованная из шестнадцатерич- ного представления в двоичное

удобное для включения в
RAW
- столбец (столбец с исходными данными)
RAWTOHEX(raw)
Строка шестнадцатеричных значений, получаемая из raw
(исходные данные)
ROWIDTOCHAR(rowid)
Символьная строка длиной 18 символов, получен- ная rowid
(идентификатор строки)
TO_CHAR(expr[,fmt
[,nls]]) expr преобразуется из числового значения или да- ты в символьную строку по формату, заданному в fmt
. Необязательный аргумент nls позволяет за- дать используемый в функции национальный язык.
Если fmt опущено, то числовое expr преобразует- ся в строку такой длины, которая вмещает только значащие цифры; дата же преобразуется по фор- мату даты согласно умолчанию:
'DD-MON-YY'
TO_DATE(char[,fmt
[,nls]])
Преобразование даты из символьного вида в зна- чение даты по формату, заданному в fmt
. Необяза- тельный аргумент nls позволяет задать исполь- зуемый в функции национальный язык. Если fmt опущена, char должна иметь формат даты по умолчанию:
'DD-MON-YY'
TO_LOB(long_column)
При выполнении операции
INSERT...SELECT
по- зволяет преобразовать значения из столбца с ти- пом данных
LONG
или
LONG RAW
в столбец с данны- ми типа
CLOB
или
BLOB
TO_MULTI_BYTE(char)
Преобразование char с однобайтовыми символами в многобайтовые символы

Глава 4. Основы SQL
91
Таблица 4.19 (окончание)
Функция
Возвращаемое значение
TO_NUMBER(char[,fmt
[,nls]])
Преобразование char в число по формату fmt
Необязательный аргумент nls позволяет задать используемый в функции национальный символ валюты
TO_SINGLE_BYTE(char)
Преобразование char с многобайтовыми символа- ми в однобайтовые
TRANSLATE(char USING
{CHAR_CS|NCHAR_CS})
Преобразует char в набор символов национально- го языка (
NCHAR_CS
) или наоборот (
CHAR_CS
); функ- ция аналогична
CONVERT
и используется с типом данных
NCHAR
и
NVARCHAR2
Таблица 4.20. Числовые форматы
Элемент
Пример
Описание
9 9999
Количество цифр, определяющих ширину вывода
0 0999
Вывод ведущих нулей
$
$9999
Вывод перед значением знака доллара
B
B9999
Вывод пробелов вместо ведущих нулей
FM
FM90.9
Вывод без начальных и конечных пробелов
MI
9999MI
Вывод знака "–" после отрицательных чисел
S
S9999
Вывод "+" для положительных чисел и "–" для отри- цательных
PR
9999PR
Вывод отрицательных чисел в <угловых скобках>
D
99D99
Вывод десятичного разделителя
G
9G999
Вывод разделителя групп (например, триад в де- нежных данных)
C
C999
Вывод символа интернациональной денежной еди- ницы
L
L999
Вывод конкретного денежного символа
,
9,999
Вывод запятой в указанной позиции

Часть
II.
Язык SQL. Извлечение данных
92
Таблица 4.20 (окончание)
Элемент
Пример
Описание
99.99
Вывод точки в указанной позиции
V
999V99
Умножение на 10 в N
- ой степени, где N задается в виде количества девяток после 'V'
EEEE
9&999EEEE
Вывод в экспоненциальной форме
RN rn
RN rn
Возвращает значения прописными или строчными римскими цифрами (преобразуемое значение между 1 и 3999)
4.6.5. Различные функции
для работы с одиночной строкой
Таблица 4.21.
Различные функции
Функция
Возвращаемое значение
BFILENAME
('directory',
'filename')
Возвращает
BFILE
(указатель доступа к файлам
ОС, где хранятся данные типа
LOB)
DUMP(expr[,k[,m[,n]]] )
Строка символов, содержащая код типа данных, длину в байтах и внутреннее представление expr
. Необязательный аргумент k
позволяет за- дать представление возвращаемого значения:
8

восьмеричное, 10

десятичное, 16

шест- надцатеричное, 17

одиночные символы. Не- обязательный аргумент m
задает начальную по- зицию в expr
, а необязательный аргумент n

длину возвращаемого значения, начиная с m
GREATEST(expr1, expr2,...)
Наибольшее значение из перечня. Перед сравне- нием все выражения пpеобpазуются к типу перво- го выражения
LEAST(expr1, expr2,...)
Наименьшее значение из перечня. Перед сравне- нием все выражения преобразуются к типу перво- го выражения
NLS_CHARSET_DECL
_LEN (width,char)
Возвращает ширину (
width
) объявления
NCHAR
столбца с именем (
char
)
NLS_CHARSET_ID (char)
Возвращает идентификатор
NLS
набора симво- лов, соответствующий имени набора (
char
)

Глава 4. Основы SQL
93
Таблица 4.21 (окончание)
Функция
Возвращаемое значение
NLS_CHARSET_NAME (n)
Возвращает имя
NLS
набора символов, соответ- ствующего номеру идентификатора набора (
n
)
NVL(expr1,expr2)
Если expr1
равно
NULL
, возвращает expr2
, иначе возвращает expr1
Expr1
и expr2
могут быть лю- бого типа. Тип возвращаемой величины такой же, как для expr1
NVL2 (expr1, expr2, expr3)
Если expr1
равно
NULL
, возвращает expr3
, иначе возвращает expr2
Expr1
имеет любой тип данных, expr2
и expr3
не могут быть типа
LONG
. Тип возвра- щаемой величины такой же, как для expr2
или expr3
SYS_CONTEXT
('namespace',
'attribute' [,n])
Возвращает значение атрибута, связанного с кон- текстом namespace
. Значение n
позволяет изме- нять заданную по умолчанию максимальную длину возвращаемого значения (256), доводя ее до
4000
SYS_GUID()
Возвращает глобально уникальный идентификатор
UID
Уникальный целочисленный идентификатор те- кущего пользователя
USER
Имя текущего пользователя
USERNV(char)
Информация о среде текущего сеанса. Если char равен:
'ISDBA'

возвращает 'TRUE'
если вы имеете
ISDBA
- роль;
'LANGUAGE'
— возвращает используемый язык;
'TERMINAL'

возвращается идентификатор терминала пользователя (в терминах операцион- ной системы);
'SESSIONID'

возвращается идентификатор сеанса пользователя;
'ENTRYID'

возвращается доступный иденти- фикатор элемента, за которым идет слежение;
'LANG'

возвращает ISO
- аббревиатуру текуще- го языка;
'INSTANCE'

возвращает номер текущего эк- земпляра (
INSTANCE
);
'CLIENT_INFO'

возвращает до 64
байтов ин- формации сеанса; она может быть сохранена прикладной программой, использующей пакет
DBMS_APPLICATION_INFO
VSIZE(expr)
Число байтов во внутреннем представлении expr

Часть
II.
Язык SQL. Извлечение данных
94
4.6.6. Агрегатные функции
Агрегатные функции возвращают результат обработки группы строк
(табл. 4.22). Они имеют смысл в конструкциях
SELECT
,
ORDER BY
,
HAVING
и в аналитических функциях.
Использование
DISTINCT
позволяет учитывать только различающиеся значе- ния аргумента expr
. При указании
ALL
(или по умолчанию) учитываются все значения expr
. Например,
DISTINCT
при нахождении среднего значения из
1,1,1
и
3
дает результат
2
, тогда как
ALL
при этой же операции дает резуль- тат
1.5
Таблица 4.22.
Агрегатные функции
Функция
Возвращаемое значение
AVG([DISTINCT | ALL] expr)
Среднее значение expr
, с игнорировани- ем пустых (
NULL
) значений
CORR(expr1,expr2)
Возвращает коэффициент корреляции набора пар значений expr1
, expr2
; для его определения используется формула:
COVAR_POP(expr1,expr2)/
(STDDEV_POP(expr1)*
STDDEV_POP(expr2))
COUNT({[DISTINCT | ALL] expr |*})
Количество строк, в которых expr не яв- ляется пустым (
NULL
) значением. Уста- новка
*
позволяет подсчитать все вы- бранные строки, включая строки с
NULL
- значениями
COVAR_POP(expr1, expr2)
Значение
(СУММА(expr1*expr2) -
СУММА(expr2)* СУММА(expr1)/n)/n
, где n

номер пары
(expr1,expr2)
, в кото- рой ни expr1
, ни expr2
не содержат
NULL
COVAR_SAMP(expr1, expr2)
Значение
(СУММА(expr1*expr2) -
СУММА(expr1)*СУММА(expr2)/n)/(n-1)
, где n

номер пары
(expr1,expr2)
, в которой ни expr1
, ни expr2
не содер
- жат
NULL
MAX([DISTINCT | ALL] expr)
Максимальное значение expr
MIN([DISTINCT | ALL] expr)
Минимальное значение expr

Глава 4. Основы SQL
95
Таблица 4.22 (окончание)
Функция
Возвращаемое значение
STDDEV([DISTINCT | ALL] expr)
Среднеквадратичное (стандартное) от- клонение от expr с игнорированием пус- тых (
NULL
) значений
SUM([DISTINCT | ALL] expr)
Сумма значений expr
VARIANCE([DISTINCT |
ALL] expr)
Дисперсия expr
, с игнорированием пус- тых значений
4.6.
7. Функции
CASE, CAST
и
DECODE
Функция
CASE
позволяет использовать выражения
IF-THEN-ELSE
в инструк- циях
SELECT
и
UPDATE
.Эта функция проверяет список условий и возвращает одно из нескольких возможных значений.
Инструкция
CASE
имеет два способа применения: простой и поисковый.
-- Простая операция сравнения
CASE выражение
WHEN искомое_значение THEN результат [...]
[ELSE альтернативный_результат]
END
В простой функции
CASE
входное значение (
выражение
) проверяется на соот- ветствие каждому предложению
WHEN
.Результирующее значение (
результат
) возвращается при первой истинности: выражение = искомое_значение
Если ни одно из условий when не оказывается истинным, то возвращается альтернативный_результат
. Если это альтернативное значение не указано, то возвращается
NULL
Рассмотрим пример преобразования оценок, хранимых в таблице
Ведомости базы данных "UCHEB", в официальные текстовые значения. В примере ис- пользованы синтаксические конструкции, которые подробно рассматривают- ся в главе 5.
SELECT оценка,
CASE оценка
WHEN '5' THEN 'отлично'

Часть
II.
Язык SQL. Извлечение данных
96
WHEN '4' THEN 'хорошо'
WHEN '3' THEN 'удовлетворительно'
WHEN '2' THEN 'неудовлетворительно'
WHEN 'зачет' THEN 'зачет'
WHEN 'незач' THEN 'незачет'
WHEN 'осв' THEN 'освобождение'
WHEN 'неявка' THEN 'неявка'
ELSE 'отсутствие данных'
END официальное_значение, дата, состояние
FROM н_ведомости
WHERE члвк_ид = 116483;
Часть оценок студента с номером 116483 имеет следующий вид:
ОЦЕНКА ОФИЦИАЛЬНОЕ_ЗНАЧЕНИЕ ДАТА СОСТОЯНИЕ
-------- -------------------- ----------- ------------
5 отлично 24.12.1998 актуальна
4 хорошо 29.12.1998 актуальна зачет зачет 05.01.1999 актуальна
3 удовлетворительно 16.06.1999 актуальна
. отсутствие данных 05.01.2001 актуальна неявка неявка 28.12.2001 неактуальна зачет зачет 05.06.2007 актуальна неявка неявка 19.06.2007 актуальна
2 неудовлетворительно 19.06.2007 актуальна
Поисковые выражения
CASE
позволяют проанализировать несколько логиче- ских условий, и как только одно из них оказывается истинным, выражение возвращает соответствующий этому условию результат.
-- Булева поисковая операция
CASE
WHEN логическое_условие THEN результат [...]
[ELSE альтернативный_результат]
END
Структура более сложной логической поисковой операции, аналогична структуре простой операции сравнения за исключением того,
что для каж- дого предложения
WHEN
существует своя логическая операция сравнения
(не обязательно "
=
").

Глава 4. Основы SQL
97
Так, предыдущий пример можно записать и в таком виде:
SELECT оценка,
CASE
WHEN оценка = '5' THEN 'отлично'
WHEN оценка = '4' THEN 'хорошо'
WHEN оценка = '3' THEN 'удовлетворительно'
WHEN оценка = '2' THEN 'неудовлетворительно'
WHEN оценка = 'зачет' THEN 'зачет'
WHEN оценка = 'незач' THEN 'незачет'
WHEN оценка = 'осв' THEN 'освобождение'
WHEN оценка = 'неявка' THEN 'неявка'
ELSE 'отсутствие данных'
END официальное_значение, дата, состояние
FROM н_ведомости
WHERE члвк_ид = 116483:
Приведем более сложный пример с подсчетом количества различных оценок, полученных студентом за время обучения в университете.
SELECT
CASE
WHEN оценка = '5' THEN 'отлично'
WHEN оценка = '4' THEN 'хорошо'
WHEN оценка = '3' THEN 'удовлетворительно'
WHEN оценка = '2' THEN 'неудовлетворительно'
WHEN оценка = 'зачет' THEN 'зачет'
WHEN оценка = 'незач' THEN 'незачет'
WHEN оценка = 'осв' THEN 'освобождение'
WHEN оценка = 'неявка' THEN 'неявка'
ELSE 'отсутствие данных'
END официальное_значение, оценка, COUNT(*) количество
FROM н_ведомости
WHERE члвк_ид = 116483
GROUP BY оценка;
Результат выполнения запроса:
ОФИЦИАЛЬНОЕ_ЗНАЧЕНИЕ ОЦЕНКА КОЛИЧЕСТВО
-------------------- -------- ---------- отсутствие данных . 6

Часть
II.
Язык SQL. Извлечение данных
98
неудовлетворительно 2 4 удовлетворительно 3 66 хорошо 4 26 отлично 5 2 зачет зачет 91 неявка неявка 2
Функция
CAST
неявно преобразует выражение с одним типом данных в дру- гой тип и имеет синтаксис:
CAST (выражение AS тип_данных [(длина)])
Функция
CAST
преобразует любое выражение, например значение в столбце или переменную, в другой, указанный тип данных. Для тех типов, которые поддерживают указание длины (например,
CHAR
или
VARCHAR
), можно указать длину.
Отметим, что некоторые преобразования, например такие, как преобразова- ние значений
DECIMAL
к
INTEGER
, приводят к операциям округления. Кроме того, некоторые преобразования могут завершиться ошибкой, если у нового типа данных не достаточно места для отображения преобразованного значения.
Функция
DECODE
имеет синтаксис
DЕСОDЕ(выражение, искомое_значение1, результат1 [,искомое_значение2, ре- зультат2 [,…]], [, по_умолчанию])
Функция сравнивает выражение с искомым
_
значением1
. Если выражение равно ему, то возвращается результат1
. В противном случае выражение сравнива- ется с искомым_значением2
и т. д. Если совпадение не обнаруживается, функ- ция возвращает значение по_умолчанию или
NULL
, если это значение опущено.
Реализуем с помощью функции
DЕСОDЕ
рассмотренный ранее пример преоб- разования оценок:
SELECT оценка,
(DECODE(оценка,'5','отлично',
'4','хорошо',
'3','удовлетворительно',
'2','неудовлетворительно',
'зачет', 'зачет',
'незач', 'незачет',
'осв', 'освобождение',
'неявка', 'неявка',
'отсутствие данных')) эквивалент, дата, состояние
FROM н_ведомости
WHERE члвк_ид = 116483;

1   2   3   4   5   6   7   8   9   10   ...   28


написать администратору сайта