Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторные № 5-6

.docx
Скачиваний:
5
Добавлен:
06.02.2022
Размер:
107.92 Кб
Скачать

Министерство цифрового развития, связи и массовых коммуникаций Российской Федерации

Ордена Трудового Красного Знамени

Федеральное государственное бюджетное образовательное учреждение высшего образования

«Московский технический университет связи и информатики»

Кафедра «Интеллектуальные системы в управлении и автоматизации»

Отчет по лабораторным работам №5-6

по дисциплине «Технологии баз данных»

Выполнил: Кондратьев И.В

Студент группы БСТ1851

Создать хранимую процедуру Customer_Insert

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;

BEGIN

SELECT Count (*) INTO rowcount

FROM CUSTOMER

WHERE Name=newname AND Area_Code=newareacode 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,ArtistID)

VALUES

(CustID.CurrVal,artist.ArtistID);

END LOOP;

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

END;

Exec CustomerInsert('Selma Warning', '206', '555-0099', 'US');

select * from CUSTOMER;

Создадим процедуру NewCustomerWithTransaction

CREATE OR REPLACE PROCEDURE NewCustomerWithTransaction

(

newname IN char,newareacode IN char,newphone IN char,artistname IN char,worktitle IN char,workcopy IN char,price IN number

)

AS

rowcount integer(2); tid int; aid int;

CURSOR transcursor IS SELECT TransactionID,ARTIST.ArtistID FROM ARTIST,WORK,TRANSACTION WHERE

Name=artistname AND Title=worktitle AND Copy=workcopy AND

TRANSACTION.CustomerID IS NULL AND ARTIST.ArtistID=WORK.ArtistID AND WORK.WorkID=TRANSACTION.WorkID;

BEGIN

SELECT Count(*) INTO rowcount

FROM CUSTOMER

WHERE Name=newname AND Area_Code=newareacode AND Phone_Number=newphone;

IF rowcount > 0 THEN

BEGIN

DBMS_OUTPUT.PUT_LINE('Customer Already Exists, changes denied');

RETURN;

END;

END IF;

INSERT INTO CUSTOMER(CustomerID,Name,Area_Code,Phone_Number) VALUES(CustID.NextVal,newname,newareacode,newphone);

rowcount:=0;

FOR trans In transcursor LOOP

tid :=trans.TransactionID; aid :=trans.ArtistID; rowcount:=rowcount+1;

END LOOP;

IF rowcount > 1 THEN

BEGIN

ROLLBACK;

DBMS_OUTPUT.PUT_LINE('Wrong records in ARTIST/WORK/TRANSACTION, changes denied');

RETURN;

END;

END IF;

IF rowcount=0 THEN

BEGIN

ROLLBACK;

DBMS_OUTPUT.PUT_LINE('There are no available lines in TRANSACTION, changes denied');

RETURN;

END;

END IF;

DBMS_OUTPUT.PUT_LINE(tid);

UPDATE TRANSACTION SET CustomerID=CustID.CurrVal, Salesprice=price, PurchaseDate=SysDate WHERE TransactionID=tid;

DBMS_OUTPUT.PUT_LINE('Client successfully added');

INSERT INTO CUSTOMER_ARTIST_INT(ArtistID,CustomerID) VALUES (aid,CustID.CurrVal);

END;

Exec NewCustomerWithTransaction( 'ABC', '12', '12', '12', '12', '12', '12');

SELECT CUSTOMER.Name, Copy, Title, ARTIST.Name

FROM CUSTOMER, TRANSACTION, WORK, ARTIST

WHERE CUSTOMER.CustomerID = TRANSACTION.CustomerID AND

TRANSACTION.WorkID = WORK.WorkID AND

WORK.ArtistID = ARTIST.ArtistID;

SELECT CUSTOMER.Name, ARTIST.Name

FROM CUSTOMER, CUSTOMER_ARTIST_INT, ARTIST

WHERE CUSTOMER.CustomerID = CUSTOMER_ARTIST_INT.CustomerID

AND

ARTIST.ArtistID= CUSTOMER_ARTIST_INT.ArtistID;

Задания

Модифицировать процедуру 1, обеспечив добавление всех данных о новых покупателях с учетом их интереса к художникам определенных национальностей. Добавьте 2 новых покупателей (вызов процедуры 1)

CREATE OR REPLACE PROCEDURE CustomerInsert

(

newname IN char,

newstreet in char,

newcity in char,

newstate in char,

newZIP 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;

BEGIN

SELECT Count(*) INTO rowcount

FROM CUSTOMER

WHERE Name=newname

AND Area_code=newareacode

AND Phone_Number=newphone

AND State=newstate

AND City = newcity;

IF rowcount > 0 THEN

BEGIN

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

RETURN;

END;

END IF;

INSERT INTO CUSTOMER (CustomerID,Name, Street, City, State, ZIP,Area_Code,Phone_Number) Values (CustID.NextVal,newname,newstreet,newcity,newstate,newZIP,newareacode,newphone);

FOR artist IN artistcursor LOOP

INSERT INTO CUSTOMER_ARTIST_INT(CustomerID,ArtistID) VALUES

(CustID.CurrVal,artist.ArtistID);

END LOOP;

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

END;

Exec CustomerInsert( 'A11','A1','A1','A1','A1','A1','A1','A1');

Exec CustomerInsert( 'A22','A2','A2','A2','A2','A2','A2','A2');

Добавить в таблицу CUSTOMER новое поле Second_Name

alter table Customer

add Second_Name varchar(25) NULL;

Модифицировать 2 процедуру

CREATE OR REPLACE PROCEDURE NewCustomerWithTransaction

(

newname IN char,

newstreet in char,

newcity in char,

newstate in char,

newZIP in char,

newareacode IN char,

newphone IN char,

newsecondname IN char,

artistname IN char,

worktitle IN char,

workcopy IN char,

price IN number

)

AS

rowcount integer(2);

tid int;

aid int;

CURSOR transcursor IS SELECT TransactionID,ARTIST.ArtistID FROM ARTIST,WORK,TRANSACTION WHERE

Name=artistname AND Title=worktitle AND Copy=workcopy AND

TRANSACTION.CustomerID IS NULL AND ARTIST.ArtistID=WORK.ArtistID AND WORK.WorkID=TRANSACTION.WorkID;

BEGIN

SELECT Count(*) INTO rowcount

FROM CUSTOMER WHERE Name=newname AND Area_Code=newareacode AND Phone_Number=newphone;

IF rowcount > 0 THEN

BEGIN

DBMS_OUTPUT.PUT_LINE('Customer Already Exists, changes denied');

RETURN;

END;

END IF;

INSERT INTO CUSTOMER (CustomerID,Name, Street, City, State, ZIP,Area_Code,Phone_Number, Second_Name) Values (CustID.NextVal,newname,newstreet,newcity,newstate,newZIP,newareacode,newphone, newsecondname);

rowcount:=0;

FOR trans In transcursor LOOP

tid :=trans.TransactionID;

aid :=trans.ArtistID;

rowcount:=rowcount+1;

END LOOP;

IF rowcount > 1 THEN

BEGIN

ROLLBACK;

DBMS_OUTPUT.PUT_LINE('Wrong records in ARTIST/WORK/TRANSACTION, changes denied');

RETURN;

END;

END IF;

IF rowcount=0 THEN

BEGIN

ROLLBACK;

DBMS_OUTPUT.PUT_LINE('There are no available lines in TRANSACTION, changes denied');

RETURN;

END;

END IF;

DBMS_OUTPUT.PUT_LINE(tid);

UPDATE TRANSACTION SET CustomerID=CustID.CurrVal, Salesprice=price, PurchaseDate=SysDate WHERE TransactionID=tid;

DBMS_OUTPUT.PUT_LINE('Client successfully added');

INSERT INTO CUSTOMER_ARTIST_INT(ArtistID,CustomerID) VALUES (aid,CustID.CurrVal);

END;

Exec NewCustomerWithTransaction( 'GG', 'G1', 'G1', 'G11', 'G1', 'G1', 'G1', 'G1', 'G1', 'G1', 'G1', '11');

Exec NewCustomerWithTransaction( 'B22', 'B2', 'B2', 'B2', 'B2', 'B2', 'B2', 'B2', 'B2', 'B2', 'B2', '22');

Москва 2021