ДИНАМИЧЕСКИЙ SQL
ЛАБОРАТОРНАЯ РАБОТА 6
ДИНАМИЧЕСКИЙ SQL
Цель работы
Приобретение практических навыков работы со средствами динамического SQL при написании программ на ESQL/C.
Содержание работы и методические указания
к ее выполнению
С помощью динамического SQL программа-клиент выполняет программное формирование оператора SQL для его последующего исполнения, делая это в три этапа:
программа собирает текст оператора SQL в виде символьной строки, хранящейся в программной переменной; в общем случае это может быть не один, а несколько операторов SQL, разделенных точкой с запятой;
программа выполняет оператор Prepare, который обращается к серверу баз данных для анализа текста оператора и подготовки его к выполнению;
программа использует оператор Execute для выполнения подготовленного оператора.
Динамический оператор SQL по форме напоминает любой другой оператор SQL, записанный в программе, с тем ограничением, что он не может содержать имена главных переменных. Поэтому
в динамический оператор Select нельзя включать спецификатор Into;
в любом месте, где главная переменная могла бы появиться в выражении, ей соответствует знак вопроса.
Оператор Prepare создает структуру данных, имеющую имя и отображающую строку символов с текстом оператора SQL.
Подготовленный по оператору Prepare динамический оператор (группу операторов) можно многократно выполнять. С помощью оператора Execute выполняются операторы, отличные от операторов Select, а также операторы Select, которые возвращают в качестве результата одну строку. Если оператор Select возвращает более одной строки, динамический оператор Select выполняется не с помощью оператора Execute, а подключается к курсору и в дальнейшем используется обычным образом с помощью курсорных средств. В обоих случаях при выполнении динамического оператора с помощью спецификатора Using ему передаются главные переменные, участвующие в выражениях и принимающие возвращаемые значения и, по сути, играющие роль фактических параметров. Как ограничение, следует отметить, что знак вопроса нельзя использовать вместо идентификаторов SQL, таких как имя базы данных, таблицы или столбца: эти идентификаторы должны указываться в тексте оператора при его подготовке, возможно, как полученные из пользовательского ввода.
Последовательность выполнения лабораторной работы:
Изучить синтаксис и правила использования операторов Prepare, Execute (см. Приложение 2), а также особенности работы с курсором при выполнении динамического оператора SQL.
Разработать и отладить набор ESQL/С-программ, решающих задачи из соответствующего варианта заданий. Результатом работы программ является одна или несколько строк, которые подлежат выводу на экран с соответствующими пояснительными заголовками.
Требования к разрабатываемой программе
Разрабатываемые ESQL/C-программы должна удовлетворять следующим требованиям:
обеспечивать необходимую обработку ошибок;
использовать аппарат транзакций;
все используемые в программах операторы SQL, включая операторы, реализующие аппарат транзакций, должны быть динамически подготовлены;
необходимые параметры, определяющие условия задачи, вводятся с клавиатуры и передаются в строку с текстом динамического оператора SQL;
все параметры, специфицирующие выполняемые действия, должны передаваться через главные переменные; такими параметрами в условиях задач являются название города, название детали, номер поставщика и т.д.;
должен быть предусмотрен вывод сообщений обо всех шагах выполнения программы, в том числе и о возможных ошибках;
программа должна быть достаточно документирована.
Варианты заданий
Вариант 1.
1. Выдать полную информацию о поставщике, имеющим максимальный рейтинг (с использованием оператора Execute).
2. Получить номера изделий, для которых детали полностью поставляет поставщик с указанным номером (параметр - номер поставщика (S1)).
3. Выдать номера и фамилии поставщиков, поставляющих детали для какого-либо изделия с деталью, номер которой указывается, в количестве, большем, чем средний объем поставок данной детали для этого изделия (параметр - номер детали (P1)).
Вариант 2.
1. Выдать полную информацию об изделии, изготавливаемом в городе, в котором проживает поставщик с максимальным рейтингом (с использованием оператора Execute).
2.
Получить общее количество деталей с указанным номером, поставляемых некоторым поставщиком (параметры - номер детали (P1), номер поставщика (S1)).
3. Выдать номера изделий, использующих только детали, поставляемые некоторым поставщиком (параметр - номер поставщика (S1)).
Вариант 3.
1. Выдать полную информацию о детали, имеющей максимальный вес (с использованием оператора Execute).
2. Получить общее число изделий, для которых поставляет детали поставщик с указанным номером (параметр - номер поставщика (S1)).
3. Выдать номера изделий, детали для которых поставляет каждый поставщик, поставляющий какую-либо деталь указанного цвета (параметр - цвет детали (красный)).
Вариант 4.
1. Выдать общий объем поставок деталей красного цвета (с использованием оператора Execute).
2. Получить полный список деталей для всех изделий, изготавливаемых в некотором городе (параметр - название города (Лондон)).
3. Выдать номера деталей, поставляемых каким-либо поставщиком из указанного города (параметр - название города (Лондон)).
Вариант 5.
1. Выдать полную информацию об изделии, имеющем максимальный объем поставок деталей (с использованием оператора Execute).
2. Получить список всех поставок, в которых количество деталей находится в некотором диапазоне (параметры - границы диапазона (от 300 до 750)) .
3. Выдать номера и названия деталей, поставляемых для какого-либо изделия из указанного города (параметр - название города (Лондон)).
Вариант 6.
1. Выдать общий объем поставок деталей для изделия J2 (с использованием оператора Execute).
2. Получить цвета деталей, поставляемых некоторым поставщиком (параметр - номер поставщика (S1)).
3. Выдать номера и фамилии поставщиков, поставляющих некоторую деталь для какого-либо изделия в количестве, большем среднего объема поставок данной детали для этого изделия (параметр - номер детали (P1)).
Вариант 7.
1. Выдать общий объем поставок деталей для изделия с максимальным объемом поставок (с использованием оператора Execute).
2.Получить названия изделий, для которых поставляются детали некоторым поставщиком (параметр - номер поставщика (S1)).
3. Выдать номера изделий, для которых средний объем поставки некоторой детали больше максимального объема поставки любой детали для указанного изделия (параметры - номер детали (P1), номер изделия (J1)).
Контрольные вопросы
Каково назначение и синтаксис оператора Prepare?
Каково назначение и синтаксис оператора Execute?
Каковы особенности использования динамических операторов SQL?
Что такое динамические главные переменные? Для чего они используются?
С какими операторами связано использование динамических главных переменных?
Каково назначение оператора Execute Immediate?