Выбрать главу

SELECT 'GRANT ENABLE TO '|| USERNAME || ';'

FROM SYS.DBA_USERS;

В этом примере используется представление системного каталога Oracle, содержащее информацию о пользователях.

Обратите внимание на то, что здесь фраза GRANT ENABLE TO заключена в кавычки. Использование кавычек заставляет воспринимать все заключенное между ними как буквальное значение. Буквальные значения можно выбирать из таблиц точно так же, как и столбцы. USERNAME является столбцом таблицы SYS. DBA_USERS из системного каталога. Двойная вертикальная черта ( | | ) используется для конкатенации столбцов. Использование двойной вертикальной черты с последующим '; ' добавляет к концу пользовательского имени точку с запятой, означающую завершение оператора.

В результате сгенерированные операторы SQL будут выглядеть примерно так:

GRANT ENABLE TO RRPLEW;

GRANT ENABLE TO RKSTEP;

Результат необходимо сохранить в файле, который можно будет передать базе данных. База данных, в свою очередь, выполнит все операторы SQL из этого файла по очереди, избавляя вас от необходимости долгого печатания команд и тем самым сэкономив вам немало времени.

В следующий раз, когда вам придется при написании операторов SQL повторять однообразные операторы SQL несколько раз подряд, остановитесь и позвольте SQL сделать эту работу за вас.

Прямой вызов SQL и вложенный SQL

Прямое использование SQL означает выполнение операторов SQL с любого интерактивного терминала. Результаты при этом возвращаются обратно на терминал, инициировавший выполнение операторов. В данной книге до сих пор, в основном, рассматривалось прямое использование SQL. Прямое использование SQL называют также интерактивным вызовом или прямым вызовом (direct invocation)

Вюженныи SQL (embedded SQL) представляет собой программный код SQL, используемый в рамках другой программы, созданной, например, средствами Pascal, Fortran, COBOL или С Программный код SQL оказывается фактически встроенным в несущий его язык программирования посредством интерфейса уровня вызовов, как было указано выше. Встроенные в несущий язык программирования операторы SQL обычно предваряются командой ЕХЕС SQL и, как правило, завершаются точкой с запятой. В других же случаях такими завершающими командами могут быть END-EXEC или закрывающая скобка.

Вот пример вложения оператора SQL в вызывающую программу, созданную средствами ANSI С

{операторы вызывающей программы}

ЕХЕС SQL {оператор SQL};

{другие операторы вызывающей программы}

Резюме

В ходе этого урока обсуждались некоторые средства SQL, выходящие за рамки элементарных. Хотя мы и не вдавались в детали, вы должны были получить общее представление о том, как используются обсуждавшиеся здесь возможности. Сначала были рассмотрены курсоры, с помощью которых можно сохранять результаты запросов в памяти. Чтобы объявившая курсор программа могла его использовать, эта программа должна открыть его. После этого содержимое курсора можно передать соответствующей переменной, чтобы программа смогла в нужный момент эти данные использовать. Данные курсора сохраняются в памяти до тех пор, пока курсор не будет закрыт, а занятая им память освобождена.

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

Кроме того, были рассмотрены динамический SQL, генерирование операторов SQL средствами SQL и различия между прямым вызовом SQL и использованием вложенного SQL. Динамический SQL, в отличие от статического, позволяет динамическое создание программного кода SQL непосредственно пользователем в ходе выполнения программы. Использование SQL для генерации операторов SQL может существенно экономить время, поскольку дает возможность с помощью конкатенации и выбора подходящих буквальных значений автоматизировать трудоемкие операции по созданию больших последовательностей однообразных операторов SQL. Наконец, обсуждались различия между прямым вызовом SQL и вложенным SQL. Главное из этих различий заключается в том, что прямой вызов операторов SQL осуществляется непосредственно пользователем с любого терминала, а вложенный SQL можно фактически считать частью программы, с помощью которой обрабатываются данные.

Рассмотренные в ходе этого урока средства будут использованы для иллюстрации возможностей использования SQL в рамках реальной базы данных типичного предприятия, о котором пойдет речь на следующем уроке, "Использование SQL в локальных и глобальных сетях".

Вопросы и ответы

Может ли сохраненная процедура вызывать другую сохраненную процедуру?

Да. Вызываемая процедура называется также вложенной процедурой.

Как заставить курсор выполняться?

Используйте для этого оператор OPEN CURSOR. В итоге результат выполнения курсора будет сохранен в специальной области памяти.

Практикум

Задания практических занятий разделены на тесты и упражнения. Тесты предназначены для проверки общего уровня понимания рассмотренного материала. Упражнения дают возможность применить на практике идеи, обсуждавшиеся в ходе текущего урока, в комбинации с идеями из предыдущих уроков. Мы рекомендуем ответить на тестовые вопросы и выполнить упражнения прежде, чем продолжать дальнейшее чтение книги. Ответы можно проверить по Приложению Б, "Ответы".

Тесты

1. Можно ли изменить триггер?

2. Можно ли использовать имя курсора вновь после того, как курсор будет закрыт?

3. Какая команда используется для извлечения данных курсора после его открытия?

4. Когда выполняются триггеры - до или после выполнения команд INSERT, UPDATE И DELETE?

Упражнения

1. Используя таблицы системного каталога вашей базы данных, запишите программный код SQL, с помощью которого автоматически будут созданы следующие операторы SQL. Условные имена объектов замените реальными.

a. GRANT SELECT ON ИМЯ_ТАБЛИЦЫ ТО ИМЯ_ПОЛЬЗОВАТЕЛЯ;

б. GRANT, CONNECT, RESOURCE TO ИМЯ_ПОЛЬЗОВАТЕЛЯ; В. SELECT COUNT (*) FROM ИМЯ__ТАБЛИЦЫ;

2. Запишите оператор, создающий процедуру, позволяющую удалять строки таблицы PRODUCTS_TBL. В качестве образца используйте оператор, предложенный в тексте этого урока для процедуры, добавляющей строку с новым продуктом в указанную таблицу.

3. Запишите оператор, использующий созданную в предыдущем упражнении процедуру для удаления из таблицы строки с информацией о продукте с кодом (PROD_ID), равным 9999.

23-й час Использование SQL в локальных и глобальных сетях

В ходе этого урока мы с вами поговорим о том как использовать SQL в \сю-виях реального предприятия ичи локачьной сети компании и как испочьзовать SQL в Internet

Основными на этом уроке будут следующие темы

• SQL на уровне предприятия

• Приложения прикладной и интерфейсной частей системы

• Удаленный доступ к базе данных

• SQL и Internet

• SQL и intranet

SQL на уровне предприятия

В ходе предыдущего урока мы рассмотрели средства SQL, которые приоткрыли вам дверь в мир практического использования возможностей этого языка В ходе этого урока мы обсудим использование SQL в рамках реального предприятия, что предполагает, в частности, наличие приложений SQL, с помощью которых работники предприятия получают возможность использования базы данных в производственных целях Многие коммерческие предприятия имеют данные, доступ к которым предлагается пользователям вне компании - другим предприятиям, покупателям или производителям Например, предприятие может предлагать потенциальным покупателям доступ к дополнительной информации о продуктах предприятия в надежде увеличить сбыт Должны быть учтены и нужды служащих предприятия Например, доступной может быть служебная информация о графиках работы и отпусков, обучении персонала, политике компании и т п Подобная база данных может быть создана и сделана легко доступной для пользователей средствами SQL и Internet