Учебное пособие Для студентов университетов Специальностей «Информатика», «Прикладная математика»


Получение информации о хранимых процедурах и функциях



Pdf көрінісі
бет156/177
Дата15.02.2022
өлшемі2,58 Mb.
#25567
түріУчебное пособие
1   ...   152   153   154   155   156   157   158   159   ...   177
Получение информации о хранимых процедурах и функциях. 
Ин-
формацию о процедурах и функциях можно получить из представления 
словаря данных USER_OBJECTS, например, следующей командой: 
SELECT  *  FROM  USER_OBJECTS; 
П р и м е р ы 
1. 
Создать хранимую процедуру, увеличивающую стоимость указан-
ной книги в таблице BOOKS на 10 %. Параметр: код книги. 
Вариант 1. 
CREATE  OR  REPLACE  PROCEDURE  INCREASE 
(CODE_BOOK   BOOKS.CODE_BOOK%TYPE)  AS 
     Q  NUMBER(1) := 0; 
BEGIN 
     SELECT  COUNT(*)  INTO  Q  FROM  BOOKS 
          WHERE  BOOKS.CODE_BOOK = INCREASE.CODE_BOOK; 
     IF  Q <> 0  THEN 
          UPDATE  BOOKS  SET  PRICE = PRICE + PRICE*0.1 
               WHERE  BOOKS.CODE_BOOK = INCREASE.CODE_BOOK; 
     ELSE 
               RAISE_APPLICATION_ERROR(-20105, ‘В таблице BOOKS  
                            отсутствует книга с указанным кодом’); 
     END  IF; 
END  INCREASE; 
Выполнение процедуры INCREASE (вариант 1) реализуется операто-
ром  
EXECUTE INCREASE (1); 
 
174


 
Вариант 2. 
CREATE  OR  REPLACE  PROCEDURE  INCREASE  
(CODE_BOOK  BOOKS.CODE_BOOK%TYPE)  AS  
BEGIN 
     UPDATE  BOOKS  SET  PRICE = PRICE*1.1 
          WHERE  BOOKS.CODE_BOOK = INCREASE.CODE_BOOK; 
          IF  SQL%NOTFOUND  THEN 
                     RAISE_APPLICATION_ERROR(-20105, ‘В таблице BOOKS  
                            отсутствует книга с указанным кодом’); 
          END  IF; 
END  INCREASE; 
Выполнение процедуры INCREASE (вариант 2) реализуется операто-
ром 
EXECUTE  INCREASE (1); 
2.  
Создать  хранимую  процедуру,  которая  при  поступлении  книг  к 
продавцу либо добавляет указанное количество к количеству уже имею-
щихся  у  продавца  таких  же  книг,  обновляя  соответствующую  запись  в 
таблице BOOKS_DELIVERY, либо  вставляет  новую  запись  в  таблицу 
BOOKS_DELIVERY,  если  у  продавца  книг  такого  наименования  нет. 
Параметры: код книги, количество единиц, фамилия продавца. 
Создание процедуры: 
CREATE  OR  REPLACE  PROCEDURE  ADD_BOOKS  
(CODE_BOOK  NUMBER, QUANTITY  NUMBER,   
SALESMAN  VARCHAR2)  IS 
     Q  NUMBER(5) := 0; 
BEGIN 
     SELECT  COUNT(*)  INTO  Q  FROM  BOOKS_DELIVERY 
     WHERE  
     BOOKS_DELIVERY.CODE_BOOK = ADD_BOOKS.CODE_BOOK 
     AND   
     BOOKS_DELIVERY.SALESMAN = ADD_BOOKS.SALESMAN; 
     IF  Q <> 0  THEN 
       UPDATE  BOOKS_DELIVERY  SET 
       QUANTITY = QUANTITY + ADD_BOOKS.QUANTITY 
       WHERE 
            BOOKS_DELIVERY.CODE_BOOK = 
            ADD_BOOKS.CODE_BOOK  
       AND 
 
175


 
       BOOKS_DELIVERY.SALESMAN = ADD_BOOKS.SALESMAN; 
     ELSE  
        INSERT  INTO  BOOKS_DELIVERY  VALUES 
          (CODE_OP.NEXTVAL,  
          ADD_BOOKS.CODE_BOOK, ADD_BOOKS.SALESMAN,  
          ADD_BOOKS.QUANTITY, SYSDATE); 
     END  IF; 
END  ADD_BOOKS; 
Выполнение процедуры ADD_BOOKS реализуется следующими опе-
раторами: 
EXECUTE  ADD_BOOKS(1, 10, 'Иванов И. И.'); 
EXECUTE  ADD_BOOKS(5, 10, 'Иванов И. И.'); 
При первом вызове процедуры осуществляется добавление 10 книг к 
тем, что уже имеются у указанного продавца. При втором вызове в таб-
лицу BOOKS_DELIVERY вставляется новая запись. 
3. 
Создать  хранимую  функцию,  которая  проверяет,  входит  ли  для 
указанного продавца общее количество имеющихся у него книг в опре-
деленный диапазон, и если нет, то выдает соответствующее сообщение. 
Параметр:  фамилия  продавца.  Минимальное  и  максимальное  значения 
для  проверки  устанавливаются  в  теле  функции  с  помощью  переменных 
MIN_QUANTITY  и  MAX_QUANTITY. 
Создание функции: 
CREATE  OR  REPLACE  FUNCTION  TEST_B 
(SALESMAN  VARCHAR2)  
     RETURN  BOOLEAN  IS 
     MIN_QUANTITY  NUMBER(5) :=10; 
     MAX_QUANTITY  NUMBER(5) := 100; 
     Q  NUMBER(5); 
BEGIN 
     SELECT  SUM(QUANTITY)  INTO  Q  FROM   
     BOOKS_DELIVERY  WHERE   
     BOOKS_DELIVERY.SALESMAN = TEST_B.SALESMAN; 
RETURN (Q >= MIN_QUANTITY  AND  Q <= MAX_QUANTITY); 
END  TEST_B; 
Вызов  функции TEST_B осуществляется  с  помощью  тестирующей 
программы, приведенной ниже.  
DECLARE 
ADD_SALESMAN  VARCHAR2(20); 
 
176


 
ADD_QUANTITY  NUMBER(5); 
ADD_CODE_BOOK  NUMBER(5); 
BEGIN 
     ADD_SALESMAN := 'Иванов И. И.'; 
     ADD_QUANTITY := 20; 
     ADD_CODE_BOOK := 3; 
     IF  TEST_B(ADD_SALESMAN)  THEN 
          UPDATE  BOOKS_DELIVERY  SET   
          QUANTITY = QUANTITY + ADD_QUANTITY 
          WHERE   
           BOOKS_DELIVERY.CODE_BOOK = ADD_CODE_BOOK 
          AND  BOOKS_DELIVERY.SALESMAN =  
ADD_SALESMAN; 
 END  IF; 
END; 
Программа 
добавляет 
указанное 
количество 
(переменная 
ADD_QUANTITY) 
книг 
указанному 
продавцу 
(переменная 
ADD_SALESMAN),  если  общее  количество  имеющихся  у  него  книг  не 
превосходит 100 и не менее 10. 


Достарыңызбен бөлісу:
1   ...   152   153   154   155   156   157   158   159   ...   177




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет