Работа с базами данных

       

ДИНАМИЧЕСКИЙ 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?



  • Содержание раздела