S_Madanska

21.02

Feb 20th, 2021 (edited)
146
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ---------------------------------------------------------------------------
  2. ----------------------------Транзакции-------------------------------------
  3. ---------------------------------------------------------------------------
  4. -- Задача 6-1.
  5. -- Транзакция, която има за цел да изтрие отдел „Мениджмънт“ - 90
  6. -- като преди това прехвърли всички служители от него в отдел „Администрация“. -10
  7.  
  8. select * from DEPARTMENTS
  9.  
  10. begin tran
  11.     --прехвърли всички служители от него в отдел „Администрация“
  12.     update EMPLOYEES
  13.     set DEPARTMENT_ID = 10
  14.     where DEPARTMENT_ID = 90
  15.  
  16.     --изтрие отдел „Мениджмънт“
  17.     delete from DEPARTMENTS
  18.     where DEPARTMENT_ID = 90
  19. commit tran
  20.  
  21. select * from DEPARTMENTS
  22.  
  23. --Задача 6-2.
  24. --Транзакция, която изтрива продукт 1726 -първо го изтрива от всички поръчки
  25. --после от таблицата с продукти, и накрая отхвърля направените промени.
  26.  
  27. begin tran
  28.     delete from ORDER_ITEMS
  29.     where PRODUCT_ID = 1726
  30.  
  31.     delete from PRODUCTS
  32.     where PRODUCT_ID = 1726
  33. rollback tran
  34.  
  35. select * from ORDER_ITEMS
  36.  
  37. ---------------------------------------------------------------------------
  38. -----------------------------Процедури-------------------------------------
  39. ---------------------------------------------------------------------------
  40. --Пример 7-2.
  41. --Да се създаде процедура, която за подадена като входен параметър ORDER_ID
  42. --извежда имена на служител, който я е обработил, както и общата й стойност.
  43.  
  44. create proc employees_orders @ORDER INT
  45. AS
  46. SELECT FNAME, LNAME,
  47.        O.ORDER_ID,
  48.        SUM(OI.QUANTITY* OI.UNIT_PRICE) AS TOTAL
  49. FROM EMPLOYEES E JOIN ORDERS O ON E.EMPLOYEE_ID=O.EMPLOYEE_ID
  50.                  JOIN ORDER_ITEMS OI ON OI.ORDER_ID=O.ORDER_ID
  51. WHERE O.ORDER_ID = 2354
  52. GROUP BY FNAME, LNAME, O.ORDER_ID
  53.  
  54. EXEC employees_orders 100
  55. ---------------------------------------------------------------------------
  56. -----------------------------Функции---------------------------------------
  57. ---------------------------------------------------------------------------
  58. --Пример 7-5.
  59. --Да се създаде функция, връщаща като резултат (резултатен набор)
  60. --служителите с техните длъжности.
  61.  
  62. CREATE FUNCTION EMPLOYEES_JOBS() RETURNS TABLE
  63. AS
  64. RETURN
  65. SELECT FNAME, LNAME, JOB_TITLE
  66. FROM EMPLOYEES E JOIN JOBS J
  67. ON E.JOB_ID=J.JOB_ID
  68.  
  69. SELECT * FROM DBO.EMPLOYEES_JOBS()
  70. ORDER BY FNAME, LNAME
  71.  
  72. ---------------------------------------------------------------------------
  73. -----------------------------Тригери---------------------------------------
  74. ---------------------------------------------------------------------------
  75. --Задача 9-1.
  76. --Да се създаде тригер, който при всяка промяна на фамилия на клиент
  77. --записва ред в нова таблица CUSTOMERS_HIST с атрибути:
  78. --• идентификатор на клиент;
  79. --• стара фамилия;
  80. --• нова фамилия.
  81.  
  82. CREATE TABLE CUSTOMERS_HISTORY
  83. (
  84. CUSTOMER_ID INT,
  85. OLD_NAME VARCHAR(20),
  86. NEW_NAME VARCHAR(20)
  87. )
  88.  
  89. create TRIGGER TGR_CUSTOMERS_HIST
  90. ON CUSTOMERS
  91. FOR UPDATE
  92. AS
  93.     IF UPDATE(LNAME)
  94.     BEGIN
  95.     INSERT INTO CUSTOMERS_HISTORY (CUSTOMER_ID, OLD_NAME, NEW_NAME )
  96.  
  97.     SELECT I.CUSTOMER_ID, D.LNAME, I.LNAME
  98.     FROM inserted I , deleted D
  99.     WHERE I.CUSTOMER_ID=D.CUSTOMER_ID
  100.     END
  101.  
  102. UPDATE CUSTOMERS
  103. SET LNAME = LNAME + '-' + 'КОЛЕВА'
  104. WHERE CUSTOMER_ID IN (103, 111, 114)
  105.  
  106. SELECT * FROM CUSTOMERS
  107.  
  108. SELECT * FROM CUSTOMERS_HISTORY
RAW Paste Data Copied