Добавить в избранное   Сделать стартовой   Главная   E-mail   Форум   Мой блог 
   
Cертификации

Errors

ETL

FAQ (по темам)

GIS

Web

wiki

Администрирование

Безопасность

Книги
Oracle, ...

Новости

ОС

Программирование

Проектирование БД

Производительность

Скачать

Советы

Тестирование

Установка

FAQ - по базам данных
FAQ - по базам данных
Установка СУБД
Oracle
Sybase
MySQL
PostgreSQL
MS SQL Server
Interbase, Firebird
Другие DB
Администрирование
Oracle
MySQL
Sybase
PostgreSQL
MS SQL Server
Interbase, Firebird
IBM DB2
Другие DB
Проектирование БД
Статьи
ETL
Теория БД
ErWin
Designer 2000
PowerDesigner
Хранилища данных
CASE средства
OLAP
Бизнес - анализ (BI)
Производительность
Oracle
MSSQL
Interbase, Firebird
IBM DB2
MySQL
PostgreSQL
SYBASE
Безопасность БД
Oracle
MS SQL Server
Инъекция SQL
Программирование
Transact-SQL
PL/SQL
C++
XML
SQL
PostgreSQL
MDX
Java
VBA Excel
Книги по базам
Oracle
Заказ книг
ОС
Установка и настройка
UBUNTU
ОС
Установка и настройка
UBUNTU
FAQ
FAQ - по базам данных
Главная arrow SQL arrow Наиболее интересные новшества в стандарте SQL:2003

Наиболее интересные новшества в стандарте SQL:2003

Печать E-mail
Оглавление
Наиболее интересные новшества в стандарте SQL:2003
Страница 2
Страница 3
Страница 4
Страница 5
 
В конце 2003 г. был принят и опубликован новый вариант международного стандарта SQL:2003 [1]. Многие специалисты считали, что в варианте стандарта, следующем за SQL:1999, будут всего лишь исправлены неточности SQL:1999. Но на самом деле, в SQL:2003 специфицирован ряд новых и важных свойств.

Прежде всего, претерпела некоторые изменения общая организация стандарта. Стандарт SQL:2003 состоит из следующих частей:

  • 9075-1, SQL/Framework;
  • 9075-2, SQL/Foundation;
  • 9075-3, SQL/CLI;
  • 9075-4, SQL/PSM;
  • 9075-9, SQL/MED;
  • 9075-10, SQL/OLB;
  • 9075-11, SQL/Schemata;
  • 9075-13, SQL/JRT;
  • 9075-14, SQL/XML.

Части 1-4 и 9-10 с необходимыми изменениями остались такими же, как и в SQL:1999. Часть 5 (SQL/Bindings) больше не существует; соответствующие спецификации включены в часть 2. Раздел части 2 SQL:1999, посвященный информационной схеме, выделен в отдельную часть 11. Появились две новые части – 13 и 14. Часть 13 полностью называется “SQL Routines and Types Using the Java Programming Language” (“Использование подпрограмм и типов SQL в языке программирования Java”). Появление такой отдельной части стандарта оправдано повышенным вниманием к языку Java со стороны ведущих производителей SQL-ориентированных СУБД. Наконец, последняя часть SQL:2003 посвящена спецификациями языковых средств, позволяющих работать с XML-документами в среде SQL. В этой статье мы ограничимся кратким обсуждением изменений и дополнений, произведенных комитетом по стандартизации SQL в части 2.

Как указывается в [2], наиболее серьезные изменения языка SQL, специфицированные в части 2 стандарта SQL:2003, касаются следующих аспектов:

  • типы данных;

  • подпрограммы, вызываемые из SQL;

  • расширенные возможности оператора CREATE TABLE;

  • новый объект схемы – генератор последовательностей;

  • новые виды столбцов – идентифицирующие столбцы (identity column) и генерируемые столбцы (generated column);

  • новый оператор MERGE;

В следующих разделах статьи1 мы кратко обсудим эти аспекты.

Новые типы данных

В SQL:2003 произошли некоторые изменения в системе типов SQL. Некоторые типы удалены, а другие добавлены. Среди новых типов наиболее важным, с точки зрения автора этой статьи, является конструктор типов мультимножеств; по этой причине его обсуждение выделяется в отдельный подраздел.

Битовые строки, целые числа и XML

В SQL:2003 исключена поддержка типов битовых строк BIT и BIT VARYING. Основанием является то, что эти типы не поддерживаются в существующих SQL-ориентированных СУБД, и компании-производители не собираются внедрять поддержку битовых строк в обозримом будущем. Так что типы битовых строк просуществовали в стандарте SQL очень недолго (они появились только в стандарте SQL:1999).

Введен новый точный числовой целый тип – BIGINT. Тип BIGINT аналогичен ранее существовавшим в SQL целым типам INTEGER и SMALLINT, но обладает большей (точнее, не меньшей) точностью. Хотя стандартом не предписывается конкретная точность типа INTEGER (как и для всех числовых типов, она определяется в реализации), в большинстве реализаций поддерживаются 32-х битовые целые значения этого типа. В этих реализациях обычно поддерживаются и 64-х битовые значения типа BIGINT. Однако стандарт оставляет другим реализациям свободу выбора точности этого нового типа. Для типа BIGINT обеспечивается тот же набор арифметических операций, что и для типов INTEGER и SMALLINT: “+”, “-“, ABS, MOD и т.д.

В части 14 стандарта SQL:2003 специфицируется специальный “тип XML” (XML type), значениями которого, по существу, являются XML-документы. Для этого типа определяется ряд операций, обеспечивающих доступ к элементам значения типа XML, преобразования этих значений и т.д. Заметим, что тип XML вообще не упоминается в базовой второй части стандарта. Да и часть 14 пока не производит впечатление зрелого набора спецификаций.

Конструктор типов мультимножества

В стандарте SQL:1999 допускалась возможность использования только одного вида коллекций – динамических массивов с элементами любого допустимого в SQL типа, кроме типа массива. Тип массива образовывался с помощью конструктора типов массивов ARRAY.

Стандарт SQL:2003 расширяет возможности использования коллекций в двух важных направлениях. Во-первых, вводится новый конструктор типов мультимножеств MULTISET. Во-вторых, типом элементов любого типа коллекций теперь может быть любой допустимый в SQL тип данных, кроме самого конструируемого типа коллекции. Оба эти расширения качественно влияют на возможную природу организации SQL-ориентированных баз данных и на способы работы с этими базами данных. Мы остановимся на этом несколько более подробно в конце данного подраздела после обсуждения конкретных свойств типов мультимножеств.

При определении местоположения (например, столбца таблицы) типа мультимножеств используется конструкция dt MULTISET, где dt задает тип данных элементов конструируемого типа мультимножеств. Значениями типа мультимножеств являются мультимножества, т.е. неупорядоченные коллекции элементов одного и того же типа, среди которых допускаются дубликаты. Например, значениями типа INTEGER MULTISET являются мультимножества, элементами которых являются целые числа. Примером такого значения может быть мультимножество {12, 34, 12, 45, -64}.

В отличие от массива, мультимножество является неограниченной коллекцией; при конструировании типа мультимножеств не указывается предельная кардинальность значений этого типа. Однако это не означает, что возможность вставки элементов в мультимножество действительно не ограничена; стандарт всего лишь не требует наличия границы. Ситуация аналогична той, которая возникает при работе с таблицами, для которых в SQL не объявляется максимально допустимое число строк.2

Значения-мультимножества создаются путем использования специальной конструкции SQL:2003, называемой конструктором значений-мультимножеств (multiset value constructor). Эта конструкция определяется следующими синтаксическими правилами:

multiset_value_constructor ::=
multiset_value_constructor_by_enumeration>
| multiset_value_constructor_by_query>
| table_value_constructor_by_query

multiset_value_constructor_by_enumeration ::=
MULTISET left_bracket value_expression_commalist right_bracket

multiset_value_constructor_by_query ::=
MULTISET ( query_expression)

table_value_constructor_by_query ::=
TABLE ( query_expression> )

Например, следующие выражения являются допустимыми значениями-мультимножествами: MULTISET [14, 16, 17] или MULTISET (SELECT DEPT_NO FROM EMP). Второй случай демонстрирует возможность преобразования таблицы в мультимножество3. Допускается и использование значения-мультимножества в качестве ссылки на таблицу в разделе FROM запроса. Для этого к значению-мультимножеству применяется операция UNNEST. Вот простой пример допустимого запроса:

SELECT T.A, T.A + 2 AS PLUS_TWO

FROM UNNEST(MULITISET [14,16,17]) AS T(A)

В результате выполнения запроса будет получена таблица

A

PLUS_TWO

14

16

16

18

17

19

Для типов мультимножеств поддерживаются операции для преобразования типа значения-мультимножества к типу массивов или другому типу мультимножеств с совместимым типом элементов (операция CAST), для удаления дубликатов из мультимножества (функция SET), для определения числа элементов в заданном мультимножестве (функция CARDINALITY), для выборки элемента мультимножества, содержащего в точности один элемент (функция ELEMENT). Кроме того, для мультимножеств обеспечиваются операции объединения (MULTISET UNION), пересечения (MULTISET INTERSECT) и определения разности (MULTISET EXCEPT). Каждая из операций может выполняться в режиме с сохранением дубликатов (режим ALL) или с устранением дубликатов (режим DISTINCT).

Наконец, введены три новые агрегатные функции. Агрегатная функция COLLECT создает мультимножество из значений аргумента в каждой строке группы строк. Функция FUSION производит объединение значений-мультимножеств из всех строк группы строк. Функция INTERSECT производит пересечение значений-мультимножеств из всех строк группы строк. Покажем на простом примере, как работают эти агрегатные функции. Пусть имеется таблица PROGRAMMERS следующего вида:

PROGRAMMER

FAVOURITE_LANGUAGES

‘Smith’

MULTISET [‘Java’, ‘Pascal’, ‘Perl’]

‘Brown’

MULTISET [‘Python’, ‘C++’, ‘Java’]

‘Scott’

MULTISET [‘Python’, ‘Java’]



 
 
« Пред.   След. »
Взаимосвязанные статьи
     

Последние добавленные статьи
Поиск
Ссылки
Главная
Скачать
Курсы
Роль АБД (SYSDBA)
Карта сайта
Автостекла
Контакты
Войти на сайт
Популярные статьи
Online - тесты
1Z0-042
Rambler's Top100 МЕТА - Украина. Рейтинг сайтов хостинг от freehost.com.ua

Все права защищены.SYSDBA 2010 | Если у Вас есть хороший материал пришлите его нам.