Материал: !Лабораторный практикум ТБД (задание)

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

специальный триггер, называемый замещающим триггером (триггер INSTEAD OF).

Контрольные задания к л.р. № 3-4

ОБЯЗАТЕЛЬНЫ ДЛЯ ВЫПОЛНЕНИЯ!!!

1.Вывести на экран информацию о таблицах пользователя

2.Вывести на экран информацию о структуре одной из таблиц

3.Вывести в отчет информацию физических атрибутах таблицы Artist

Ввести данные для следующих ситуаций:

4.На склад поступили репродукции картин 2-х русских художниках. Как минимум одно произведение - первого художника и два произведения -

второго. (Прошу обратить внимание, что требуются данные о реальных художниках!)

5.Сначала появился первый покупатель и приобрел картину первого художника. Затем появился другой покупатель и приобрел репродукции второго художника. Сделки были оформлены.

6.Внести данные в соответствующие таблицы «Вручную!!!», в том числе отобразить предпочтения покупателя к картинам определенных художников.

7.Последовательно отобразить СОДЕРЖИМОЕ ВСЕХ ТАБЛИЦ!!!

31

Лабораторная работа №5-6

Логика приложения

Есть много способов обработки баз данных Oracle из приложений. Один из способов заключается в том, чтобы создавать приложения на C++, С#, Java, Visual Basic или каком-либо другом языке программирования и вызывать из них программы Oracle. Для этого можно воспользоваться кодовыми библиотеками Oracle или задействовать промышленные стандарты ODBC или

JDBC.

Другой способ обработки баз данных Oracle состоит в написании процедур на PL/SQL. Эти процедуры можно хранить в виде файлов, запускаемых по команде START в SQL Plus, в виде хранимых процедур в базе данных, а также в виде триггеров, которые вызываются при наступлении определенных событий. Рассмотрим каждый из этих вариантов.

Обработка файлов PL/SQL

Если пользователь базы данных имеет доступ к SQL Plus, он может сохранить операторы PL/SQL в файле и запускать их напрямую командой START. Файл, содержащий оператор

SELECT *

FROM ExpensiveArt:

/

можно сохранить под именем ToSell.sqL Пользователь откроет SQL Plus и введет команду

Start ToSell:

Врезультате будут выведены данные из представления ExpensiveArt.

Вреальности большинство пользователей в деловом мире не имеет доступа

кSQL Plus, а если бы и имели, то вряд ли работа с этой программой пришлась бы им по вкусу. Однако этот стиль обработки используется администраторами и разработчиками баз данных для автоматизации рутинных задач администрирования.

Хранимые процедуры

Хранимая процедура — это программа на языке PL/SQL или Java, которая хранится в базе данных. Хранимые процедуры могут иметь параметры, вызывать другие процедуры и функции, возвращать значения и генерировать

32

исключения. Хранимые процедуры могут вызываться удаленно. Мы рассмотрим два примера хранимых процедур.

Хранимая процедура Customer_Insert

Галерее View Ridge требуется возможность добавлять в базу данных новых клиентов и записывать информацию о художниках, работами которых клиенты интересуются. В частности, нужно записывать имя и телефоны клиента, а также ассоциировать его со всеми художниками выбранной национальности.

В листинге 1 показана хранимая процедура, выполняющая эту задачу. Процедура, которая называется Customer_Insert, принимает четыре параметра: newname (имя нового клиента), newareacode (код региона), newphone (телефон) и artistnationality (национальность художника). Ключевое слово IN указывает на то, что вес эти параметры являются входными. Выходные параметры (которых у этой процедуры нет) обозначаются ключевым словом OUT, а параметры, играющие роль и входных, и выходных, — сочетанием IN OUT. Обратите внимание, что для параметра указывается тип данных, но не длина. Oracle определит длину из контекста.

Листинг 1. Процедура CustomerInsert

CREATE OR REPLACE PROCEDURE CustomerInsert

(

 

 

newname

IN

char,

newareacode

 

IN char,

newphone

IN

char,

artistnationality

IN char

)

 

 

AS

rowcount integer(4);

CURSOR artistcursor IS

SELECT ArtistID

FROM ARTIST

WHERE Nationality=artistnationality

33

BEGIN

 

SELECT

Count (*) INTO rowcount

FROM

CUSTOMER

WHERE

Name=newnaine AND Area_Code5newareacode AND

Phone_Number = newphone;

IF rowcount > 0 THEN BEGIN

DBMS_OUTPUT.PUT_LINE ('Клиент уже есть в базе данных - никаких действий не предпринято');

RETURN;

END; END IF;

INSERT INTO CUSTOMER

(CustomerID, Name, Area_Code, Phone_Number) VALUES

(CustID.NextVal, newname, newareacode, newphone);

FOR artist IN artistcursor LOOP

INSERT INTO CUSTOMER_ARTIST_INT (CustomerID, ArttstID)

VALUES

(CustID.CurrVal, artist.ArtistID); END LOOP;

DBMS_OUTPUT.PUT_LINE (‘ Новый клиент успешно добавлен в базу '); END;

/

Выполнить процедуру!

34

Раздел объявления переменных следует за ключевым словом AS. Оператор SELECT определяет переменную-курсор (cursor variable) с именем artistcursor. Этот курсор выделяет из таблицы ARTIST для обработки строки всех художников заданной национальности.

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

!!! Обратите внимание, что пользователь получит это сообщение только в том случае, если процедура будет вызвана из SQL Plus. В случае вызова процедуры иным путем, например с помощью браузера через Интернет, пользователь не увидит этого сообщения. Чтобы сообщить пользователю об ошибке, разработчик должен воспользоваться выходным параметром или сгенерировать исключение. Синтаксис для вывода строки и значения переменной, хотя это не показано в листинге 1, имеет вид

DBMS_OUTPUT.PUT_ LINЕ('строка'//переменная).

Кроме того, чтобы такие сообщения стали видимыми, следует выполнить команду

Set serveroutput on:

Если при работе в SQL Plus Вы не видите сообщений, выводимых вашими процедурами, скорее всего, вы не выполнили этот оператор.

Оставшаяся часть процедуры в листинге 1 вставляет данные о новом клиенте и затем перебирает всех художников выбранной национальности. Обратите внимание на использование специальной конструкции PL/SQL

FOR artist IN artistcursor.

Эта конструкция выполняет несколько задач. Прежде всего, она открывает курсор и считывает первую строку. Затем она последовательно обрабатывает все строки под курсором и по окончании обработки передает управление следующему оператору после FOR.

Заметьте также, что обращение к столбцу ArtistID текущей строки происходит с использованием синтаксиса artist.ArtistID, где artist — это имя

переменной цикла FOR, а не курсора.

После того как процедура написана, ее необходимо скомпилировать и сохранить в базе данных. Наберите текст процедуры в редакторе и сохраните

35

Источник: https://studfile.net/preview/16527141/