Advertisement
alpe95

DB 11

Dec 15th, 2017
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 4.66 KB | None | 0 0
  1. --1
  2. --drop table stat_employee;
  3. --create table stat_employee(
  4. --    id_employee integer check(id_employee>0),
  5. --    old_salary number(38),
  6. --    new_salary number(38)
  7. --);
  8.  
  9. --alter table stat_employee add
  10. --foreign key (ID_EMPLOYEE) references stuff(code);
  11. /
  12. --create or replace procedure upgrade_salary(id_dept in varchar)
  13. --is
  14. --begin
  15. --    update stuff set oklad=(oklad+oklad*0.25) where part_code=id_dept and oklad<3000;
  16. --    commit;
  17. --end upgrade_salary;
  18. /
  19. --create or replace TRIGGER audit_salary
  20. --AFTER UPDATE ON stuff
  21. --for each row
  22. --BEGIN
  23. --  insert into stat_employee values(:old.code, :OLD.oklad, :NEW.oklad);
  24. --END;
  25.  
  26. BEGIN
  27. upgrade_salary(52);
  28. END;
  29.  
  30. --2
  31.  
  32. --ALTER SESSION SET NLS_DATE_FORMAT='DD.MM.YYYY,HH24:MI';
  33. /
  34. --CREATE SEQUENCE  "ID_SEQ_EMP"  MINVALUE 300100 MAXVALUE 500000 INCREMENT BY 1 START WITH 300150 CACHE 20 NOORDER  NOCYCLE ;
  35. /
  36.  
  37. --create or replace TRIGGER BI_CHECK_AGE
  38. --before INSERT ON stuff
  39. --FOR EACH ROW  
  40. --declare
  41. --    oldid number;
  42. --BEGIN
  43. --  
  44. --    if ROUND((SYSDATE-(:new.bday))/365,0)>=18 then
  45. --        select id_seq_emp.nextval into :new.code from dual;
  46. --    else
  47. --        select null into :new.code from dual;
  48. --    end if;
  49. --END;
  50.  
  51. /
  52. --старше 18
  53. INSERT INTO stuff
  54.    VALUES(0,'Евлеев', 'Семен',   'Петрович', TO_DATE('28.10.1950'),  TO_DATE('23.05.1996'),  52, 13, 'Н',   5500,   20000,  0,  0,  '300');
  55. /  
  56. --младше 18
  57. INSERT INTO stuff
  58. VALUES
  59. ('101000','Егоров',   'Константин', 'Егорович',TO_DATE('28.10.2000','DD.MM.RR'),TO_DATE('23.05.1996','DD.MM.RR'),'52',  '13','Н','20000',NULL,'0','0','300');
  60. --alter trigger BI_CHECK_AGE enable;
  61.  
  62. ROLLBACK;
  63.  
  64. --3
  65. --create table reg_inf (
  66. --  tip_o char(4) check(tip_o in ('I','U','D')),
  67. --  data_kor date,
  68. --  user_name varchar2(256),
  69. --  shifr_sotr integer);
  70. --
  71. --update stuff set fired='Д' where code=20000;
  72. --delete from stuff where code=200198;
  73. --insert into stuff
  74. --   values(0,'Евлеев',   'Семен',   'Петрович', to_date('28.10.1950'),  to_date('23.05.1996'),  52, 13, 'Н',   5500,   20000,  0,  0,  '300');
  75. --create or replace TRIGGER AIUD_LOG_REG_INF
  76. --after INSERT or update or delete ON stuff
  77. --FOR EACH ROW  
  78. --declare
  79. --   v_change char(1);
  80. --   ip_info varchar2(256);
  81. --   id_emp integer;
  82. --BEGIN
  83. --    if inserting then
  84. --        v_change := 'I';
  85. --        id_emp := :new.code;
  86. --    elsif updating then
  87. --        v_change := 'U';
  88. --        id_emp := :new.code;
  89. --    else
  90. --        v_change := 'D';
  91. --        id_emp := :old.code;
  92. --    end if;
  93. --
  94. --    insert into reg_inf values(v_change, sysdate, (select sys_context('userenv','ip_address') from dual), id_emp);
  95. --END;
  96.  
  97. --4
  98.  
  99. --create table total_emp(
  100. --    id_dept integer,
  101. --    sum_salary integer
  102. --);
  103. /
  104. --create or replace procedure push_total_empl
  105. --is
  106. --    sum_salary integer;
  107. --    
  108. --    CURSOR get_employees
  109. --    IS
  110. --    SELECT * FROM stuff;
  111. --    
  112. --    cursor get_dept
  113. --    is
  114. --    select part_code id_dept from stuff group by part_code;
  115. --begin
  116. --    delete from total_emp;
  117. --    for n in get_dept loop    
  118. --        select sum(oklad) into sum_salary from stuff where part_code=n.id_dept and fired_cause<>'Д';
  119. --        insert into total_emp values(n.id_dept, sum_salary);
  120. --    end loop;
  121. --end;
  122. /
  123. BEGIN
  124.     push_total_empl();
  125. END;
  126. /
  127.  
  128. --create or replace TRIGGER AIUD_push_total_empl
  129. --after INSERT or update of oklad, fired_cause or delete ON stuff
  130. --FOR EACH ROW  
  131. --declare
  132. --BEGIN
  133. --
  134. --    if inserting then
  135. --        update total_emp set sum_salary=sum_salary+:new.oklad where id_dept=:new.part_code;
  136. --    elsif updating then
  137. --        if :new.fired_cause<> :old.fired_cause then
  138. --            if :new.fired_cause='Д' then
  139. --                update total_emp set sum_salary=sum_salary-:new.oklad where id_dept=:new.part_code;  
  140. --            elsif :new.fired_cause='Н' then
  141. --                update total_emp set sum_salary=sum_salary+:new.oklad where id_dept=:new.part_code;    
  142. --            end if;
  143. --        end if;
  144. --        if :new.oklad<>:old.oklad then
  145. --            update total_emp set sum_salary=sum_salary+(:new.oklad-:old.oklad) where id_dept=:new.part_code;
  146. --
  147. --        end if;
  148. --
  149. --    elsif deleting then
  150. --        update total_emp set sum_salary=sum_salary-:old.oklad where id_dept=:old.part_code;
  151. --    end if;
  152. --END;
  153.  
  154. UPDATE stuff SET oklad=2000 WHERE code=200420;
  155. UPDATE stuff SET fired='Д' WHERE code=200119;
  156. DELETE FROM stuff WHERE code=200135;
  157. ROLLBACK;
  158.  
  159. INSERT INTO stuff
  160.    VALUES(0,'Заминайко',   'Николай',   'Юрьевич',   TO_DATE('28.10.1950'),  TO_DATE('23.05.1996'),  25, 21, 'N',    5500,   20000,  0,  0,  '300');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement