Работа с программными объектами в SQL Central
В п.п. 6.1 - 6.6 были рассмотрены основные принципы разработки программных объектов SYBASE SQL Anywhere с использованием утилиты ISQL. Теперь рассмотрим какой дополнительный сервис по разработке программных объектов предлагается пользователям в утилите SQL Central.
6.7.1. Формирование заготовок текстов процедур и функций
Как и в ISQL в утилите, в SQL Central содержательная часть каждого программного объекта формируется при помощи текстового редактора. Однако при этом утилита SQL Central предоставляет возможность использования заготовок текстов для новых программных объектов и удобный сервис по редактированию имеющихся программных объектов. Для хранимых процедур и функций такие заготовки предлагаются шаблонами Add Procedure(Template), Add Function(Template) и мастером Add Procedure/Function(Wizard). Все они являются элементами папки Procedures & Functions (рис. 77).
Рис.77. Содержимое папки Procedures & Functions
Как видно на рис. 77, в папке Procedures & Functions представлены вышеуказанные шаблоны и мастер вместе со всеми процедурами и функциями, использовавшимися в этой главе. Эти программные объекты были разработаны при написании текущей главы. На этом же рисунке отображено контекстное меню процедур, появляющееся в результате щелчка правой кнопкой мыши по пиктограмме любой процедуры или функции (это меню будет обсуждаться ниже). Двойной щелчок по такой пиктограмме левой кнопки мыши приводит к вызову текстового редактора утилиты с загруженным текстом выбранной процедуры в его окне.
В результате щелчка мыши по пиктограмме шаблона Add Procedure(Template) производится вызов текстового редактора. При этом окно текстового редактора содержит заготовку оператора CREATE PROCEDURE (рис. 78).
Рис.78. Окно текстового редактора утилиты SQL Central с заготовкой оператора CREATE PROCEDURE
В случае использования шаблона Add Function(Template) в текстовом редакторе автоматически формируется аналогичная заготовка для оператора CREATE FUNCTION.
Мастер Add Procedure/Function(Wizard) предлагает пользователю выполнить ряд шагов и создает более полную заготовку процедуры или функции. Рассмотрим эти шаги на примере. Для этого проанализируем как использовался мастер Add Procedure/Function(Wizard) при создании процедуры Get_list_absent, рассмотренной в .
Шаг 1. Начальная стадия создания хранимой процедуры/функции (рис. 79).
Рис.79. Создание новой хранимой процедуры или функции
Пояснение. Добро пожаловать в Мастер создания Процедур и Функций. Этот Мастер поможет вам в создании хранимой процедуры или функции. Процедуры и Функции представляют собой совокупности SQL-операторов и управляющих операторов, которые в дальнейшем транслируются для повышения эффективности функционирования.
Вопрос. Вы хотите создать хранимую процедуру или функцию?
Ниже приводится переключатель. Установка его в одно из двух положений позволяет ответить на поставленный вопрос.
После установки переключателя необходимо "нажать" на кнопку Далее для выполнения следующего шага.
В нашем случае для создания процедуры было выбрано положение Stored Procedure (no return value).
Шаг 2. Определение названия процедуры и ее владельца (рис. 80).
Рис.80. Определение названия процедуры и ее владельца
Вопрос 1. Как будет называться новая процедура?
Находящееся ниже поле предназначено для имени создаваемой процедуры. Введем в это поле строку Get_list_absent.
Вопрос 2. Кто из пользователей будет владельцем процедуры?
В приводимом поле отображается имя владельца новой процедуры. По умолчанию это пользователь создающий ее.
Пользователи, обладающие правами администратора базы данных, имеют возможность назначить владельцем процедуры любого пользователя. Для этого они могут воспользоваться кнопкой Change.
Ответив на оба вопроса, при помощи кнопки Далее осуществляется переход к очередному шагу.
В нашем случае в качестве владельца был определен пользователь Stepanov.
Шаг 3. Выбор диалекта языка SQL для создаваемой процедуры (рис. 81).
Рис.81. Выбор диалекта языка SQL для создаваемой процедуры
Вопрос 1. Какой из диалектов языка SQL будет использоваться для создания новой процедуры?
Для ответа на этот вопрос пользователю предлагается установить переключатель в одно из положений Transact_SQL (compatible with Sybase SQL Server) или Watcom-SQL (SQL Anywhere native dialect).
В п.1 говорилось, что SYBASE SQL Anywhere максимально, насколько это возможно для СУБД такого класса, совместима с SYBASE SQL Server. Одной из сторон такой совместимости является поддержка в SYBASE SQL Anywhere такого диалекта языка SQL как Transact-SQL. Этот диалект используется в SYBASE SQL Server и может применяться в SYBASE SQL Anywhere наряду с собственным диалектом языка SQL - Watcom-SQL. Эти диалекты во многом совместимы, что схематично на рис. 82.
Рис.82. Совместимость Watcom-SQL и Transact-SQL
Вопрос 2. Вы можете возвращать в качестве результата более чем одну запись, используя результирующее множество. Вы хотите использовать такое множество?
Флажок Include result set () позволяет ответить на этот вопрос.
Выбрав диалекта языка SQL и установив признак необходимости использования результирующего множества, можно приступать к следующему шагу
При создании процедуры Get_list_absent был выбран Watcom-SQL. В создаваемой процедуре результирующее множество необходимо. По этой причине был установлен флажок Include result set.
Шаг 4. Включение оператора SELECT, формирующего результирующее множество в текст создаваемой процедуры (рис. 83).
Рис.83. Включение оператора SELECT, формирующего результирующее множество в текст создаваемой процедуры
Пояснение. Если вам известен оператор SELECT, который в дальнейшем будет использоваться в процедуре для формирования результирующего множества, то вы можете ввести его текст здесь. В результате этого мастер автоматически сгенерирует текст описания результирующего множества (фраза RESULT). Если вы этого не знаете, то можете просто нажать на кнопку Далее и определить результирующее множество вручную в текстовом редакторе.
Для ввода текста оператора SELECT ниже приводится поле окна. Для перехода к завершающему шагу следует "нажать" на кнопку Далее.
На рис. 83 в этом окне представлен такой оператор, примененный в процедуре Get_list_absent.
Шаг 5. Подтверждение готовности к созданию новой процедуры (рис. 84).
Рис.84. Подтверждение готовности к созданию новой процедуры
Пояснение 1. Вы можете включить комментарий для новой процедуры.
Ниже располагается поле для ввода комментария для создаваемой процедуры.
Пояснение 2. Мастер сгенерирует заготовку для следующей процедуры:
Название: | Get_list_absent |
Владелец | Stepanov |
Диалект SQL: | Watcom-SQL |
Использование результирующего множества: | Да |
После "нажатия" на эту кнопку мастер сформирует заготовку процедуры и отобразит ее в окне текстового редактора утилиты.
При создании процедуры Get_list_absent была получена заготовка, представленная на рис. 85.
Рис.85. Заготовка процедуры Get_list_absent
Процедура Get_list_absent состоит всего из одного оператора SELECT, определенного при выполнении шага 4. По этой причине в данном случае фактически была получена почти готовая процедура. В нее следует добавить описание входного параметра Par_N_reader и дополнить комментариями (). В общем случае, процедура, как правило, содержит несколько SQL-операторов. В связи с этим для формирования окончательного текста процедуры может потребоваться значительная доработка.
В случае использования мастера Add Procedure/Function(Wizard) для разработки функции, он формирует заготовку примерно такого же уровня как для процедуры.
6.7.2. Формирование заготовок текстов триггеров
Утилита SQL Central предоставляет сервис по формированию заготовок не только для процедур и функций, но и для триггеров. Для формирования заготовок триггеров используется мастер Add Trigger, являющийся элементом папки Triggers (рис. 86).
Рис.86. Содержимое папки Triggers
Как видно на рис. 86 в папке Triggers содержатся еще все имеющиеся для текущей таблицы триггеры (в данном случае для таблицы Books). Здесь же отображено контекстное меню триггеров, появляющееся в результате щелчка правой кнопкой мыши по пиктограмме любого триггера (это меню будет обсуждаться ниже). Двойной щелчок по такой пиктограмме левой кнопки мыши приводит к вызову текстового редактора утилиты с загруженным текстом выбранного триггера в его окне.
Рассмотрим как использовался мастер Add Trigger для формирования заготовки триггера Add_copies (). Мастер предлагает Add Trigger выполнить ряд шагов, которые представлены ниже.
Шаг 1. Начальная стадия создания триггера (рис. 87).
Рис.87. Создание нового триггера
Пояснение. Добро пожаловать в Мастер создания Триггеров. Этот Мастер позволит вам разработать триггер для текущей таблицы.
В SQL Anywhere пользовательские триггеры используются для реализации сложный форм ссылочной целостности.
Вопрос. Как будет называться новый триггер?
В имеющемся ниже поле окна необходимо ввести название триггера и затем при помощи кнопки Далее перейти к выполнению следующего шага.
В нашем случае было указано название Add_copies.
Шаг 2. Определение событий, на которые должен реагировать триггер (рис. 88).
Рис.88. Определение событий, на которые должен реагировать триггер
Вопрос. Какое из событий должно вызвать активизацию триггера?
Для ответа на этот вопрос мастер предлагает установить флажки соответствующие событиям, на возникновение которых может реагировать триггер. При использовании события UPDATE OF мастер предоставляет возможность указать модификация каких полей вызовет активизацию триггера. Выбор одного или нескольких событий и использование кнопки Далее является условием продолжения дальнейшего использования мастера.
При создании триггера Add_copies было определено, что причиной его активизации должно быть добавление новых записей в таблицу (событие INSERT).
Шаг 3. Выбор уровня триггера (рис. 89).
Рис.89. Выбор уровня триггера
Пояснение. Строчный триггер (триггер уровня Row-level trigger) может быть определен для выполнения до или после добавления, модификации или удаления каждой записи. Операторный триггер (триггер уровня Statement-level trigger) выполняется после завершения всего оператора.
Вопрос. Триггер какого уровня вы хотите создать?
Расположенный ниже переключать позволяет сделать требуемый выбор и затем приступить к следующему шагу.
Триггер Add_copies был определен как строчный триггер.
Шаг 4. Определение времени и порядка активизации триггера (рис. 90).
Рис.90. Определение времени и порядка активизации триггера
Вопрос 1. Когда должна производиться активизация триггера?
Переключатель ниже позволяет указать, что триггер может активизироваться до или после возникновения события.
Пояснение. Если для одного и того же события определено несколько триггеров, то для данного триггере вы можете указать очередность его активизации.
Вопрос 2. Каким по очереди должен активизироваться триггер?
Расположенный ниже счетчик, позволяет ответить на этот вопрос. Для перехода к завершающему шагу следует "нажать" на кнопку Далее.
Триггер Add_copies был определен как предваряющий триггер, который должен активизироваться в первую очередь.
Шаг 5. Подтверждение готовности к созданию нового триггера(рис. 91).
Рис.91. Подтверждение готовности к созданию нового триггера
Пояснение 1. Вы можете включить комментарий для нового триггера.
Ниже располагается поле для ввода комментария для создаваемого триггера.
Пояснение 2. Мастер сгенерирует заготовку для следующего триггера:
Add_copies | |
Событие, активизи-рующее триггер: | INSERT |
Время активизации: | До выполнения оператора |
Уровень триггера: | Строчный триггер |
После "нажатия" на эту кнопку мастер сформирует заготовку триггера и отобразит ее в окне текстового редактора утилиты.
При создании триггера Add_copies была получена заготовка, представленная на рис. 92.
Рис.92. Заготовка триггера Add_copies
Полученная заготовка содержит обязательные элементы оператора CREATE TRIGGER, необходимые для создания предваряющего строчного триггера Add_copies. Необязательные элементы этого оператора заключены в квадратные скобки. Теперь осталось отредактировать текст заготовки для получения окончательного текста триггера.
6.7.3. Контекстные меню программных объектов
При щелчке правой кнопки мыши по любому объекту в SQL Central появляется контекстное меню. Не является исключением и программные объекты. Вид их представлен на рис. 77 и 86. Контекстные меню триггеров и процедур во многом совпадают и реакция на выбор их одноименных пунктов одинакова. Только в первом случае объектом воздействия являются триггеры, а во втором - процедуры и функции. Меню процедур имеет более широкий состав пунктов и его изучение позволит без проблем использовать контекстное меню триггеров. По этим причинам предметом дальнейшего обсуждения является только контекстное меню процедур. Такое меню включает в себя пункты Open, Open as Watcom-SQL, Open as Transact-SQL, Test in ISQL, Copy, Paste, Delete и Properties. (). Рассмотрим назначение этих пунктов.
Пункт Open предназначен для вызова текстового редактора с тестом текущей процедуры. При этом текст процедуры отображается на том диалекте SQL, на котором он создавался. Ранее уже отмечалось, что программные объекты могут разрабатываться на любом из диалектов SQL, поддерживаемые SYBASE SQL Anywhere (Watcom-SQL или Transact-SQL).
Выбор пунктов Open as Watcom-SQL или Open as Transact-SQL позволяет отображать процедуру в требуемом диалекте языка SQL, вне зависимости от того какой диалект использовался при создании процедуры. Как выглядит на языке Transact-SQL рассмотренная в процедура Get_list_absent приведено на рис. 93.
Рис.93. Процедура Get_list_absent на языке Transact-SQL
Если сравнить текст процедуры Get_list_absent на обоих диалектах, то можно отметить всего два отличия. Одно состоит в служебном слове AS, находящемся перед служебным слово BEGIN на диалекте Transact-SQL., второе - в замене при описании параметра процедуры служебного слова IN на символ @. В других случаях различия могут быть более существенными, но в конечном итоге не очень значительными ().
Пункт Test in ISQL служит для организации процесса тестирования. Реакцией на его выбор является запуск утилиты ISQL, если она еще не работает. При этом в ее окне Command формируются необходимые подготовительные операторы и оператор вызова процедуры с требуемыми параметрами. К вспомогательным операторам относятся операторы CREATE VARIABLE (создание переменных) , SET (присваивание), RESUME ALL (завершение всех процедур, использующих результирующее множество - см. ) и ряд других. Использование пункта Test in ISQL для процедуры Get_list_absent вызывает формирование следующей последовательности SQL-операторов, в которую вставлен перевод комментариев:
% % % SQL Central generated procedure test script % % % Ensure any previously executing procedures are completed /* SQL Central сгенерировал процедуру тестиро- вания программного объекта. Обеспечиваем завер- шение выполнения всех запущенных процедур */ RESUME ALL; % % % Ensure our test variables do not already exist /* Предотвращаем ситуацию повторного объявления переменной, используемой в тесте */ SET OPTION On_error = 'continue'; DROP VARIABLE "Par_N_reader"; SET OPTION On_error = 'prompt'; % % % Create input/output variables /*Описание переменных */ CREATE VARIABLE "Par_N_reader" smallint; % % % Edit the following lines to set the input values /* Отредактируйте следующие строки для присвоения значений пременным */ SET "Par_N_reader" = '1'; % % % Execute the procedure /* Выполнение процедуры */ CALL "Stepanov"."Get_list_absent"( "Par_N_reader" ); % % Use the RESUME command to view multiple result sets /* Используйте оператор RESUME для просмотра нескольких результирующих множеств */
Данные SQL-операторы отображаются в окно Command утилиты ISQL (). В случае необходимости эти операторы могут быть отредактированы и запущены на исполнение.
Выбор пункта Copy позволяет запомнить в системном буфере текст выбранной процедуры/функции с целью ее копирования в другую базу данных. Для этого требуется в текущем сеансе работы утилиты SQL Central осуществить соединение с другой базой данных. Затем для новой базы данных необходимо отобразить в правой панели содержимое папки Procedures & Functions. После этого следует щелкнуть в любом свободном месте правой панели правой кнопкой мыши и выбрать в появляющемся контекстном меню пункт Paste. В результате этого на основании данных системного буфера создается копия процедуры первой базы данных.
Пункт Delete предназначен для удаления процедур и функций.
Особого внимания заслуживает пункт меню Properties. Его выбор выводит на экран окно свойств процедуры (рис. 94).
Рис.94. Вкладка General окна свойств процедуры
Это окно содержит две вкладки General и Permissions. Первая из них представлена на рис. 94. В ней содержится общая информация процедуре: название, владелец, использовавшийся диалект языка SQL и комментарий. Вкладка Permissions предназначена для установки привилегии EXECUTE для процедуры (рис. 95).
Рис.95. Вкладка Permissions окна свойств процедуры
В этом окне видно, что группе пользователей LIBRARIANS предоставлено право использовать процедуру Get_list_absent. Установка такого права (привилегии EXECUTE) осуществляется при помощи кнопки Grant Execute. Кнопка Revoke Execute предназначена для лишения этого права. Такие же действия, но только применительно к таблицам рассмотрены в п.5.6 (см. рис. ).
Таким образом, анализ программных объектов SYBASE SQL Anywhere показал, что их использование позволяет реализовать сложные формы ограничений целостности и существенно расширить функциональные возможности разрабатываемых приложений баз данных.