Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.20 KB | None | 0 0
  1. #1 - количество поставленных товаров на организацию
  2. create or replace algorithm = temptable view _tmp as select организация.name, sum(поставки.count) as cnt from организация, поставки
  3. where поставки.idорганизации = организация.idорганизации
  4. group by поставки.idорганизации;
  5.  
  6. select max(cnt) from _tmp;
  7. select * from _tmp;
  8.  
  9. #1 - вывод поставок на организацию
  10. create or replace algorithm = undefined view tab as select организация.name, count(поставки.count) as cnt from организация, поставки
  11. where поставки.idорганизации = организация.idорганизации
  12. group by поставки.idорганизации;
  13.  
  14. select * from tab;
  15.  
  16. #2 - обновляемое представление, не позволяющее выполнить insert
  17. create or replace algorithm = merge view w (idтоварa, name, bonus) as select idтоварa, name, (count+3) from товар;
  18.  
  19. select * from w;
  20. insert into w (idтоварa, name, bonus) values(77, 'jjj', 777);
  21.  
  22. #3 - обновляемое представление, позволяющее выполнить insert
  23. create or replace algorithm = merge view w (id, _name, _count) as select idтоварa, name, count from товар
  24. where name like 'IPhone XR%';
  25.  
  26. select * from w;
  27.  
  28. #4 - Создать вложенное обновляемое представление с проверкой ограничений (WITH CHECK OPTION)
  29. create or replace view _w as select id, _name, _count from w
  30. where _name like 'IPhone X%'
  31. with cascaded check option; # if local, то заносится в таблицу
  32.  
  33. insert into _w (id, _name, _count) values(13,'IPhone XS', 1);
  34.  
  35. select max(_count) from _w;
  36. select * from _w;
  37.  
  38.  
  39. #5
  40. delimiter //
  41. create trigger trg
  42. after delete on организация
  43. for each row
  44. begin
  45. delete from поставки where поставки.idорганизации = old.idорганизации;
  46. end;
  47. //
  48.  
  49. delimiter ;
  50.  
  51. #6
  52. delimiter //
  53. create trigger _t before update on склад
  54. for each row
  55. begin
  56. if new.num_ячейки < 0 then signal sqlstate '45000' set message_text = 'error';
  57. elseif new.num_ячейки >= 0 then set new.num_ячейки = new.num_ячейки;
  58. end if;
  59. end;
  60. //
  61.  
  62. delimiter ;
  63.  
  64. update склад set num_ячейки = -9 where idтовара = 12;
  65. update склад set num_ячейки = 55 where idтовара = 12;
  66.  
  67. #7
  68. delimiter //
  69. create trigger trig
  70. before insert on склад
  71. for each row
  72. begin
  73. update товар set count = (count + 1) where idтоварa = товар.idтоварa;
  74. end;
  75. //
  76.  
  77. delimiter ;
  78.  
  79.  
  80. #9.1
  81. delimiter //
  82. create trigger _instime
  83. after insert on товар for each row
  84. begin
  85. insert into new_table
  86. (
  87. idтовара,
  88. data,
  89. имя_товара,
  90. count)
  91. values
  92. (
  93. new.idтоварa,
  94. sysdate(),
  95. new.name,
  96. new.count);
  97. end;
  98. //
  99. delimiter ;
  100.  
  101. #8.1
  102. delimiter //
  103. create trigger t1
  104. before insert on товар for each row
  105. begin
  106. if new.count < 0 then signal sqlstate '45000' set message_text = 'error';
  107. elseif new.count >= 0 then set new.idтоварa = new.idтоварa, new.name = new.name, new.count = new.count;
  108. end if;
  109. end;
  110. //
  111. delimiter ;
  112.  
  113. delimiter //
  114. create trigger t1
  115. before insert on товар for each row
  116. begin
  117. if new.count < 0 then signal sqlstate '45000' set message_text = 'error';
  118. elseif new.count >= 0 then set new.idтоварa = new.idтоварa, new.name = new.name, new.count = new.count;
  119. end if;
  120. end;
  121. //
  122. delimiter ;
  123.  
  124. insert into товар values(99, 'iPhone 3' , 1);
  125. drop trigger _instime;
  126. drop trigger t1;
  127.  
  128.  
  129. select * from new_table;
  130.  
  131. insert into товар values(15, 'iPhone 4', 11);
  132.  
  133. SET FOREIGN_KEY_CHECKS=0;
  134. insert into склад values(1, 62);
  135. SET FOREIGN_KEY_CHECKS=1;
  136.  
  137. drop trigger _t;
  138. drop trigger trig;
  139. drop trigger _ins;
  140.  
  141. SET FOREIGN_KEY_CHECKS=0;
  142. delete from организация where idорганизации = 2;
  143. select * from поставки;
  144. SET FOREIGN_KEY_CHECKS=1;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement