Контрольная работа: Особенности проектирования баз данных

into: name_books, : name_publishers, : city_publishers

dosuspend;

end

В данной процедуре вместо обычного запроса на выборку SELECT использована конструкция «FOR SELECT ... INTO ... DO ...», которая производит обработку возвращаемого набора записей в цикле. Иначе если SELECT возвратит более одной строки, то возникнет ошибка «multiplerowsinsingletonselect». Здесь же после каждой возвращаемой строки производится принудительная выдача параметров, после чего они принимают новые значения при следующей итерации цикла и т. д. пока не будут выданы все строки, удовлетворяющие условию запроса.

Вторая процедура будет выводить список книг, выданных за указанный период (входные параметры – начальная и конечная дата). Зададим входные параметры «DATE_1 DATE» и «DATE_2 DATE». Зададим выходные параметры: «NAME_BOOKS VARCHAR (30)», «NAME_PUBLISHERS VARCHAR(20)» и «CITY_PUBLISHERS VARCHAR(20)».

Листинг процедуры «BOOKS_LIST_PERIOD»:

CREATE PROCEDURE BOOKS_LIST_PERIOD (

date_1 date,

date_2 date)

returns (

city_publishers varchar(20) character set win1251,

name_publishers varchar(20) character set win1251,

name_books varchar(30) character set win1251)

as

declare variable var_date date;

begin

for

select distinct books.name, publishers.name, publishers.city, books.date_issue

from books inner join publishers on books.id_publishers = publishers.id_publishers

into: name_books, : name_publishers, : city_publishers, :var_date

do if (var_date between date_1 and date_2) then suspend;

end

В этой процедуре в операторе циклической выборки для каждой записи, полученной в результате выполнения оператора выборки «SELECT», проверяется, лежит ли значение одной из возвращаемых SELECT-ом переменной var_date между двумя введёнными, заданными входными параметрами date_1 и date_2. Если да, то производится выдача процедурой значений выходных параметров при помощи оператора suspend.

Создадим третью процедуру, которая будет выводить количество книг и средний тираж по издательствам. Здесь выходные данные будут представлять собой значения функций агрегирования, вычисляемые для каждой группы по значению поля «PUBLISHERS. NAME».

Листинг процедуры «KOL_BOOKS_TIRAZ»:

CREATE PROCEDURE KOL_BOOKS_TIRAZ

returns (

publishers_name varchar(20) character set win1251,

avg_tiraz integer,

К-во Просмотров: 404
Бесплатно скачать Контрольная работа: Особенности проектирования баз данных