Advertisement
truefan4ever

Untitled

Nov 26th, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 1.37 KB | None | 0 0
  1. -- Написать процедуру, которая выводит информацию о контрактах,
  2. -- в которых сумма заказа лежит в диапазоне +/- 50$ от введенного значения.
  3. -- Если контрактов с такой суммой не имеется, должно выводиться
  4. -- соответствующее сообщение.
  5.  
  6. SET SERVEROUTPUT ON
  7.  
  8. CREATE OR REPLACE PROCEDURE INFO (COST IN INTEGER) IS
  9. CURSOR CONTRACT IS SELECT customer_id, order_cost FROM Orders;
  10. INPUT_ERROR EXCEPTION;
  11. COST_ERROR EXCEPTION;
  12. CONTRACT_LIST CONTRACT%ROWTYPE;
  13. PRAGMA AUTONOMOUS_TRANSACTION;
  14.  
  15.  
  16. BEGIN
  17.  
  18. DBMS_OUTPUT.PUT_LINE(' ');
  19. IF COST IS NULL OR COST <= 0 THEN
  20. RAISE INPUT_ERROR;
  21. END IF;
  22.  
  23.  
  24. OPEN CONTRACT;
  25. FETCH CONTRACT INTO CONTRACT_LIST;
  26. WHILE CONTRACT%FOUND
  27. LOOP
  28. IF CONTRACT_LIST.order_cost >= COST-50 AND CONTRACT_LIST.order_cost <= COST+50 THEN
  29. DBMS_OUTPUT.PUT_LINE('Customer id= ' || CONTRACT_LIST.customer_id || 'Order cost=' || CONTRACT_LIST.order_cost);
  30. ELSE
  31. RAISE COST_ERROR;
  32. END IF;
  33. END LOOP;
  34. CLOSE CONTRACT;
  35.  
  36.  
  37. EXCEPTION
  38.     WHEN INPUT_ERROR THEN
  39.     DBMS_OUTPUT.PUT_LINE('Check the input data. Cost must be not null and positive number.');
  40.     WHEN COST_ERROR THEN
  41.     DBMS_OUTPUT.PUT_LINE('There is no order with such cost.');
  42. END;
  43. /
  44.  
  45.  
  46. BEGIN
  47. INFO(2900);
  48. END;
  49. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement