Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 9 лет назад пользователемТимофей Жемчужников
1 ОРГАНИЗАЦИЯ БАЗ ДАННЫХ И ЗНАНИЙ ТЕМА 5 СТРУКТУРИРОВАННЫЙ ЯЗЫК ЗАПРОСОВ SQL
2 Хранимые процедуры. Практический опыт создания приложений обработки данных показывает, что ряд операций над данными, реализующих общую для всех пользователей логику и не связанных с пользовательским интерфейсом, целесообразно вынести на сервер. Однако, для написания процедур, реализующих эти операции стандартных возможностей SQL не достаточно, поскольку здесь необходимы операторы обработки ветвлений, циклов и т.д. Поставщиками СУБД предлагаются собственные процедурные расширения SQL (PL/SQL компании Oracle и т.д.). Эти расширения содержат логические операторы (IF... THEN... ELSE), операторы перехода по условию (SWITCH... CASE...), операторы циклов (FOR, WHILE, UNTIL) и операторы передачи управления в процедуры (CALL, RETURN).
3 С помощью этих средств создаются функциональные модули, которые хранятся на сервере вместе с базой данных. Обычно такие модули называют хранимые процедуры. Они могут быть вызваны с передачей параметров любым пользователем, имеющим на то соответствующие права. В некоторых системах хранимые процедуры могут быть реализованы и в виде внешних по отношению к СУБД модулей на языках общего назначения, таких как C или Pascal. Пример для СУБД PostgreSQL: CREATE FUNCTION ([,... ]) RETURNS AS [ | ] LANGUAGE 'SQL' | 'C' | 'internal Вызов созданной функции осуществляется из оператора SELECT (также, как вызываются функции агрегирования).
4 Триггеры. Для каждой таблицы может быть назначена хранимая процедура без параметров, которая вызывается при выполнении оператора модификации этой таблицы (INSERT, UPDATE, DELETE) - триггер. Триггеры выполняются автоматически, независимо от того, что именно является причиной модификации данных - действия человека оператора или прикладной программы. Синтаксис оператора создания триггера: CREATE TRIGGER ON FOR { INSERT | UPDATE | DELETE } [, INSERT | UPDATE | DELETE ]... AS Ключевое слово ON задает имя таблицы, для которой определяется триггер. Кючевое слово FOR указывает какая команда (команды) модификации данных активирует триггер. Операторы SQL после ключевого слова AS описывают действия, которые выполняет триггер и условия выполнения этих действий. Здесь может быть перечислено любое число операторов SQL, вызовов хранимых процедур и т.д. Использование триггеров очень удобно для выполнения операций контроля ограничений целостности
5 Мониторы событий. Ряд СУБД допускает создание таких хранимых процедур, которые непрерывно сканируют одну или несколько таблиц на предмет обнаружения тех или иных событий (например, среднее значение какого- либо столбца достигает заданного предела). В случае наступления события может быть инициирован запуск триггера, хранимой процедуры, внешнего модуля и т.п. Пример: Пусть база данных является частью автоматизированной системы управления технологическим процессом. В поле одной из таблиц заносятся показания датчика температуры, установленного на резце токарного станка. Когда это значение превышает заданный предел, запускается внешняя программа, изменяющая параметры работы станка.
6 Использование специализированных библиотек и встраиваемого SQL. Каждая СУБД помимо интерактивной SQL-утилиты обязательно имеет библиотеку доступа и набор драйверов для различных операционных систем. Схема взаимодействия клиентского приложения с сервером базы данных в этом случае выглядит так:
7 Библиотека доступа - это, объектный файл, исходный код которого создан на языке типа C. Библиотека содержит набор функций, позволяющих пользовательскому приложению соединятся с БД, передавать запросы серверу и получать ответные данные. Минимальный набор функций такой библиотеки (имена функций зависят от используемой библиотеки) для работы с базой данных: DB_connect(char *имя_базы_данных, char *имя_пользователя, char *пароль) - устанавливает соединение с БД, возвращает указатель на структуру db, описывающую характеристики этого соединения DB_exec(db, char *запрос) - выполнить запрос к БД, определяемой структурой db. Применяется для любых запросов кроме SELECT. Возвращает код выполнения запроса (0 - удачно, либо код ошибки) DB_select(db, char *запрос) - выполнить запрос на извлечение данных (SELECT). Возвращает структуру result, содержащую результаты выполнения запроса (реляционное отношение). DB_fetch(result) - извлечь следующую запись из структуры result. DB_close(db) - закрыть соединение с БД.
8 Обычно в библиотеке присутствуют также функции, позволяющие определить характеристики структуры result (число, порядок и имена столбцов, число строк, номер текущей строки), передвигаться по этой структуре не только вперед, но и назад (DB_next, DB_prev) и т.д. Библиотечные вызовы преобразуются драйвером базы данных в сетевые вызовы и передаются сетевым программным обеспечением на сервер. На сервере происходит обратный процесс преобразования: сетевые пакеты -> функции библиотеки -> SQL-запросы, запросы обрабатываются, их результаты передаются клиенту. Несмотря на то, что такой способ создания приложений чрезвычайно гибок, позволяет реализовать практически любое приложение, то же время имеет явные недостатки: разработка клиентской программы возможна только для той операционной системы и на том языке программирования, который поддерживается библиотекой необходим драйвер базы данных, который определяет допустимые типы сетевых интерфейсов большой объем кодирования нестандартизированные библиотечные функции. В результате получаем приложение, которое привязано как к сетевой среде, так и к программно-аппаратной платформе и используемой базе данных.
9 Некоторой модификацией данного способа является использование "встроенного" языка SQL. В этом случае в текст программы на языке третьего поколения включаются не вызовы библиотек, а непосредственно предложения SQL, которые предваряются ключевым выражением "EXEC SQL". Перед компиляцией в машинный код такая программа обрабатывается препроцессором, который транслирует смесь операторов "собственного" языка СУБД и операторов SQL в "чистый" исходный код. Затем коды SQL замещаются вызовами соответствующих процедур из библиотек исполняемых модулей, служащих для поддержки конкретного варианта СУБД. Такой подход позволил несколько снизить степень привязанности к СУБД, например, при переключении прикладной программы на работу с другим сервером базы данных достаточно было заново обработать ее исходный текст новым препроцессором и перекомпилировать.
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.