Работа с обзорами (представлениями) в Oracle
По своему назначению и функциональным возможностям обзоры в Oracle аналогичны обзорам в InterBase. Синтаксис обзора имеет следующий вид. create [or replace] [[no] force] view [<schema>.]<view_name> [{(<list_vnames>) | <obj_description>}] as <select_constr> [<with_constr>];
force – формирует обзор даже если таблицы или другие объекты, на которые он ссылается, не существуют или недоступны. По умолчанию принято no force. <schema> - имя схемы. <view_name> - имя обзора. <list_vnames> - список имен выбираемых полей. Если не приведен, то используются имена, перечисленные в операторе select. Список имен должен согласовываться со списком в операторе select. <list_vnames> ::= <vname>[,<list_vnames>] <vname> - имя выбираемого поля. <obj_description> ::= of [<schema>.]<type_name> [with object identifier {default | (<list_attr>)}] <obj_description> - задает тип <type_name> возвращаемого объекта, ранее описанного в схеме <schema>. Описание объектных данных см. в технической документации Oracle. <select_constr> - любой синтаксически корректный оператор выборки select. <with_constr> ::= {read only | check option [constraint <t_constr>]} read only – запрещает внесение изменений с использованием обзора (insert, update, delete). check option [constraint <t_constr>] – разрешает внесение изменений с использованием обзора (insert, update, delete), если это возможно, то есть измененные данные удовлетворяют условиям выборки. Триггеры для обзоров аналогичны триггерам для таблиц за исключением того, что вместо опции after или before используется опция instead of. 7.4. Данные BLOB BLOB представляет собой тип данных с динамически изменяемым размером, для этого типа не указываются ни размеры, ни способ кодирования. BLOB можно использовать для хранения объектов разной природы и назначения, включая: • Растровые изображения. • Векторные рисунки. • Звуки, видео и другую информацию мультимедиа. • Текст и данные, включая документы большого объема. Доступ к данным BLOB осуществляется так же, как к данным, хранимым в других форматах. В то же время, учитывая неопределенный размер данных, процедуры чтения и записи данных BLOB имеют некоторую специфику в различных СУБД. 7.5. Функции пользователя (UDF) Назначение и возможности использования Пользовательские функции (User defined functions – UDF) – это программы на базовом языке для выполнения в приложениях, часто используемых при работе с базой данных задач. UDF помогают обеспечить модульность приложений, выделяя их в отдельные модули многократного использования. Пользовательские функции не являются частью базы. Они помещаются в отдельную библиотеку (DLL), находящуюся на той же машине, что и база данных. Чтобы сделать функции доступными в базе, их надо в ней объявить. После этого обращение к ним осуществляется точно так же, как к стандартным функциям InterBase. Другими словами, вызов этих функций может производиться везде, где синтаксисом SQL предусмотрено использование выражений. Чтобы можно было использовать внешнюю функцию, она должна быть объявлена в базе как внешняя функция, а реализующий ее программный код помещен в библиотеку, указанную в объявлении. Объявление внешней функции Как только UDF была написана и откомпилирована в библиотеку, она должна быть объявлена в базе данных, где предполагается ее использовать. Для этого предусмотрена команда declare external function. Каждая функция в базе данных должна быть объявлена отдельно. Пока точка входа и имя модуля (библиотеки) и путь к нему не изменяется, нет необходимости в переобъявлении функции, даже если сама функция изменяется. declare external function<name> <list_datatype>
<list_datatype> ::= {<datatype> | cstring(<int>)} [,<list_datatype>] Если UDF возвращает значение по ссылке, а для формируемого значения использует динамически запрашиваемую память, то необходимо позаботиться о ее освобождении. Для указания этого используется конструкция free_it. <name> - имя UDF для использования в командах SQL; может отличаться от имени функции (в библиотеке) указанной после ключевого слова entry_point <datatype> - тип данных входного параметра или возвращаемого значения. Все входные параметры передаются UDF по ссылке. Возвращаемое значение может передаваться как по ссылке, так и по значению. Использование элементов массива запрещено returns - определяет возвращаемое функцией значение by value - указывает, что возврат производится по значению. Если конструкция опущена, то возврат производится по ссылке cstring (<int>) - указывает, что UDF возвращает строку, длиной не более указанной и заканчивающуюся ограничителем \0 free_it - освобождает память, занятую возвращаемым значением после выполнения UDF. Следует использовать только, если память в UDF выделялась динамически 'entryname' - заключенное в апострофы имя UDF, как оно записано в библиотеке 'modulename' - спецификация файла, идентифицирующая библиотеку, которая содержит UDF. Текст должен заключаться в апострофах. Библиотека должна постоянно находиться на сервере; путь должен относиться к местоположению библиотеки на сервере. Создание пользовательских функций Механизм User Defined Functions (UDF), позволяет писать пользовательские функции на любом компилирующем инструменте разработки (базовом языке). Такие функции выполняются на сервере, причем в рамках процесса сервера, что повышает скорость их вызова практически до уровня скорости вызова стандартных SQL-функций. UDF могут быть написаны, вообще говоря, на любом языке. Здесь мы рассмотрим подготовку функций на C (C++). Прежде всего, отметим, что все передаваемые в UDF параметры всегда передаются по ссылке, то есть должны быть объявлены в функции как указатели. Возвращаемое значение может передаваться и по ссылке и по значению. Ранние версии InterBase включали только базовый набор функций для использования в SQL-выражениях, что делало разработку таких функций практически обязательной, не случайно в комплект поставки входила небольшая библиотека UDF. В более поздних версиях набор встроенных функций значительно расширен, кроме того появилась возможность писать пользовательские функции средствами языка SQL, позволяя в таких функциях работать с объектами базы данных. Тем не менее, такие функции могут быть весьма полезными в различных приложениях. Рассмотрим процесс создания библиотеки функций пользователя. Детали процесса зависят, вообще говоря, от используемого компилятора. Построим такую библиотеку для Windows в среде C++Builder. Воспользуемся DLL Wizard’ом, необходимым для корректной настройки компоновщика в файле проекта. В других компиляторах проект будет строиться иначе, но сам текст программ будет идентичен. В начале текста подключается заголовочный файл <windows.h>, за которым объявляются наши функции (их объявления можно также поместить в свой заголовочный файл). //---------------------------------------- В объявлении функций стоит обратить внимание на конструкции extern "C" и __declspec(dllexport). Эти конструкции обеспечивают корректность хранения имен и вызова функций из создаваемой DLL. Далее идет текст самих функций. Остановимся на нем несколько подробнее. Первая функция if_i является аналогом условной операции C. Она возвращает второй аргумент, если значение первого положительно, и третий – в противном случае. long __declspec(dllexport) Соответствующее ей объявление внешней функции в базе будет иметь такой вид: declare external function iif double precision, integer, integer Имена функции в базе и в библиотеке могут и не совпадать. Кроме того, нужно помнить, что имена функций в библиотеке зависят от регистра, а в базе – нет. Отметим, что в настоящее время подобная функция введена как iif(<cond>, <res_true>, < res_false >) в состав встроенных функций. Как пример функции, которая может быть полезна в ряде приложений, прежде всего бухгалтерских, можно привести функцию, возвращающую текстовое представление чисел («сумма прописью»). Внешнии функции в oracle Объявления внешней функции в Oracle осуществляется в два этапа. На первом этапе объявляется библиотека, содержащая требуемые функции. На втором объявляются сами внешние функции. Объявление библиотеки имеет следующий вид. create [or replace] library [<schema>.]<ext_lib> is '<file_spec>'; <ext_lib> - задает имя библиотеки <file_spec> - задает путь и имя библиотеки
Объявление внешней функции имеет следующий вид. create [or replace] function [<schema>.]<func_name> [(<list_par>)] return <datatype> as <call_spec>;
<call_spec> ::= [{as | is}] language {c library <ext_lib> | java name '< ext_lib>'; "<efunc_name> - задает имя функции в библиотеке.
Популярное: Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы... Как построить свою речь (словесное оформление):
При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою... Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас... Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (220)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |