27_SH43-0144-00 (1038594), страница 34
Текст из файла (страница 34)
Для этой функции нет локального выполняемогофайла.Поскольку для такой функции нет локального выполняемого файла, вызов еешаблона может завершиться с ошибкой, даже если эта функция доступна наисточнике данных. Например, рассмотрим такой запрос:SELECT myfunc(C1)FROM nick1WHERE C2 < 'A'Если DB2 и источник данных, содержащий объект nick1, имеют разныепоследовательности слияния, этот запрос вызовет ошибку, поскольку сравнениедолжно выполняться на DB2, а функция - на источнике данных. Еслипоследовательности слияния совпадают, операция сравнения может бытьвыполнена на источнике данных, содержащем базовую функцию myfunc.|||||Функции (или шаблоны функций) должны иметь то же число входныхпараметров, что и функция источника данных. Типы данных входныхпараметров на стороне объединения должны быть совместимы с типами данныхвходных параметров на стороне источника данных.
Эти же требованияприменяются и для возвращаемых значений.144Руководство администратора: РеализацияДля создания шаблона функции используется оператор CREATE FUNCTION сключевым словом AS TEMPLATE. Когда шаблон создан, с помощью оператораCREATE FUNCTION MAPPING для него задается отображение на функциюисточника данных.Например, чтобы создать шаблон функции и отображение функции для функцииMYS1FUNC на сервере S1:CREATE FUNCTION MYFUNC(INT) RETURNS INT AS TEMPLATECREATE FUNCTION MAPPING S1_MYFUNC FOR MYFUNC(INT) SERVER S1 OPTIONS(REMOTE_NAME 'MYS1FUNC')Дополнительную информацию об использовании и создании шаблонов функцийсмотрите в руководстве Application Development Guide.
Подробное описаниесинтаксиса оператора CREATE FUNCTION смотрите в руководстве SQLReference.Создание пользовательского типаПользовательский тип - это именованный тип данных, созданный в базе данныхпользователем. Этот тип может быть пользовательским типом с тем жепредставлением данных, что встроенный тип данных, или структурированнымтипом, содержащим последовательность поименованных атрибутов, каждый изкоторых имеет тип. Структурированный тип может быть подтипом другогоструктурированного типа (называемого надтипом), образуя иерархию типов.Пользовательские типы поддерживают строгую типизацию, то есть, если этотпользовательский тип использует то же представление данных, что и другиетипы, значения этого типа считаются совместимыми только со значениямиэтого же типа или типа в той же иерархии типов.В производной таблице каталога SYSCAT.DATATYPES можно увидетьпользовательские типы, определенные для этой базы данных.
В этойпроизводной таблице каталога можно также увидеть типы данных,определенные менеджером баз данных при создании базы данных. Полныйсписок всех типов данных смотрите в руководстве SQL Reference.Пользовательские типы нельзя использовать как типы аргументов длябольшинства поставляемых с системой (встроенных) функций. Для работы сэтими типами можно создать пользовательские функции.Пользовательский тип можно отбросить, только если:v Он не используется в определении столбца существующей таблицы.v Он не используется в качестве типа существующей типизированной таблицыили типизированной производной таблицы.Глава 3. Создание базы данных145v Он не используется в пользовательской функции, которую нельзя отбросить.Пользовательскую функцию нельзя отбросить, если от нее зависитпроизводная таблица, триггер, проверочное ограничение таблицы или другаяпользовательская функция.При отбрасывании пользовательского типа отбрасываются также все зависящиеот него функции.Создание пользовательского особого типаПользовательский особый тип - это тип данных, созданный на основе одного изсуществующих типов данных (таких как целый, десятичный или символьный).Для создания особого типа используется оператор CREATE DISTINCT TYPE.Следующий оператор SQL создает особый тип t_educ на основе типа smallint:CREATE DISTINCT TYPE T_EDUC AS SMALLINT WITH COMPARISONSЕсли в операторе CREATE DISTINCT TYPE задано условие WITHCOMPARISONS (как в этом примере), экземпляры одного особого типа могутсравниваться друг с другом.
Условие WITH COMPARISONS нельзя задавать,если исходный тип данных - это большой объект, DATALINK, LONG VARCHARили LONG VARGRAPHIC.Экземпляры особых типов нельзя использовать в качестве аргументов функцийили операндов операций, определенных для исходного типа. Аналогично иисходный тип нельзя использовать в аргументах или операндах, для которыхопределено использование особого типа.Создав особый тип, можно использовать его для определения столбцов воператоре CREATE TABLE:CREATE TABLE EMPLOYEE(EMPNOCHAR(6)NOT NULL,FIRSTNME VARCHAR(12) NOT NULL,LASTNAME VARCHAR(15) NOT NULL,WORKDEPT CHAR(3),PHONENOCHAR(4),PHOTOBLOB(10M)NOT NULL,EDLEVELT_EDUC)IN RESOURCEПри создании особого типа также генерируется поддержка преобразованиятипов между особым типом и исходным типом. Поэтому значение типа T_EDUCможно преобразовать в значение типа SMALLINT и наоборот.|||Полную информацию о синтаксисе оператора CREATE DISTINCT TYPEсмотрите в руководстве SQL Reference.
Информацию о создании ииспользовании особых типов смотрите в руководстве Application DevelopmentGuide.146Руководство администратора: РеализацияИспользуя функции преобразований, можно преобразовать пользовательскиетипы в базовые типы данных и базовые типы данных в пользовательские. Длясоздания функции преобразования используется оператор CREATETRANSFORM.Для поддержки преобразований могут также использоваться оператор CREATEMETHOD и расширения оператора CREATE FUNCTION. Подробнуюинформацию об этом смотрите в руководстве SQL Reference.Создание пользовательского структурированного типа|||||||Структурированный тип - это пользовательский тип, содержащий один илинесколько атрибутов, каждый из которых имеет собственные имя и тип данных.Структурированный тип может служить в качестве типа таблицы, каждыйстолбец которой получает свое имя и тип данных от одного из атрибутов этогоструктурированного типа.
Всю необходимую информацию оструктурированных типах можно найти в руководстве Application DevelopmentGuide.Создание отображения типовВ системе объединения отображения типов позволяют отобразить конкретныетипы данных в таблицах и производных таблицах источника данных на особыетипы данных DB2. Отображение типов применяется для одного источникаданных или же для диапазона (тип, версия) источников данных.Для встроенных типов источников данных и встроенных типов DB2 существуютотображения типов по умолчанию.
Новые (созданные вами) отображения типовбудут перечислены в производной таблице SYSCAT.TYPEMAPPINGS.Для создания отображений типов используется оператор CREATE TYPEMAPPING. Чтобы использовать этот оператор, необходимо обладатьполномочиями SYSADM или DBADM для базы данных объединения.Пример оператора, создающего отображение типов:CREATE TYPE MAPPING MY_ORACLE_DEC FROM SYSIBM.DECIMAL(10,2)TO SERVER ORACLE1 TYPE NUMBER([10..38],2)Нельзя создать отображение типов для типов данных большой объект, LONGVARCHAR/VARGRAPHIC, DATALINK, структурированных или особых типов.Дополнительную информацию об использовании и создании отображенийтипов смотрите в руководстве Application Development Guide. Подробноеописание синтаксиса оператора CREATE TYPE MAPPING смотрите вруководстве SQL Reference.Глава 3. Создание базы данных147Создание производной таблицыПроизводные таблицы создаются на основе одной или нескольких базовыхтаблиц, псевдонимов или производных таблиц и могут использоваться дляполучения данных вместо базовых таблиц.
При изменении данных впроизводной таблице изменяются данные в самих базовых таблицах.||Производную таблицу можно создать для ограничения доступа к критическойинформации и разрешения свободного доступа к другим данным.||||||При операциях вставки в производную таблицу, в которых в список выборки(SELECT) для производной таблицы прямо или косвенно входит имя столбцаидентификации базовой таблицы, применяются те же правила, что и дляоператора INSERT, в котором прямо указывается столбец идентификациибазовой таблицы. Дополнительную информацию об операторе INSERTсмотрите в руководстве SQL Reference.||||||||||||||||||||Кроме описанного выше применения производных таблиц, их можно такжеиспользовать, чтобы:v Менять таблицу, не меняя прикладные программы. Для этого на основебазовой таблицы создается производная таблица.
Создание этой новойпроизводной таблицы не влияет на работу прикладных программ,использующих базовую таблицу. Новые прикладные программы могутиспользовать созданную производную таблицу для задач, отличающихся отзадач прикладных программ, использующих базовую таблицу.v Суммировать значения в столбце, выбирать максимальные значения иливычислять средние значения.v Обеспечить доступ к информации в одном или нескольких источникахданных. В операторе CREATE VIEW можно задать псевдонимы и создатьглобальную производную таблицу, которая может объединять информациюиз нескольких источников данных, расположенных в разных системах.Если для создания производной таблицы задаются псевдонимы ииспользуется обычный синтаксис команды CREATE VIEW, будет выданопредупреждение о том, что для доступа к базовым объектам (объектам наисточниках данных) будут использоваться ID аутентификации пользователейэтой производной таблицы, а не ID аутентификации ее создателя.
Чтобы этопредупреждение не выдавалось, используйте ключевое слово FEDERATED.||||Вместо создания производной таблицы можно использовать вложенное илиобщее табличное выражение для уменьшения затрат на поиск в каталоге иулучшения производительности. Дополнительную информацию об общихтабличных выражениях смотрите в руководстве SQL Reference.148Руководство администратора: Реализация|Чтобы создать производную таблицу с помощью Центра управления:1. Раскройте дерево объектов и найдите папку Производные таблицы.2. Щелкните правой кнопкой мыши по папке Производные таблицы и выберите извсплывающего меню пункт Создать.3. Введите необходимую информацию и нажмите кнопку OK.||||Чтобы создать производную таблицу из командной строки, введите команду:||||||||||Например, таблица сотрудников EMPLOYEE может содержать информацию озаработной плате, которая не должна быть общедоступной. Однако номертелефона работника должен быть доступен всем пользователям.