Advertisement
What_Ever

Untitled

May 4th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 3.03 KB | None | 0 0
  1. DROP SCHEMA IF EXISTS SHEET5;
  2. CREATE SCHEMA IF NOT EXISTS SHEET5;
  3.  
  4. USE SHEET5;
  5.  
  6. CREATE TABLE IF NOT EXISTS DEPT (
  7.     Dnumber VARCHAR(10),
  8.     Dname VARCHAR(100),
  9.     Founded DATE,
  10.     Mgr_ssn VARCHAR(10),
  11.     Budget INT,
  12.     CONSTRAINT DEPT_PK PRIMARY KEY(Dnumber)
  13. );
  14.  
  15. CREATE TABLE IF NOT EXISTS EMPLOYEE (
  16.     Ssn VARCHAR(10),
  17.     Ename VARCHAR(100),
  18.     Bdate DATE,
  19.     Dno VARCHAR(10),
  20.     Salary INT,
  21.     CONSTRAINT EMP_PK PRIMARY KEY(Ssn),
  22.     CONSTRAINT EMP_DEPT_FK FOREIGN KEY(Dno) REFERENCES DEPT(Dnumber)
  23. );
  24.  
  25. ALTER TABLE DEPT ADD CONSTRAINT DEPT_MGR_FK FOREIGN KEY(Mgr_ssn) REFERENCES EMPLOYEE(Ssn);
  26.  
  27. ## Definitions
  28. DELIMITER //
  29. ## REQ 1
  30. CREATE FUNCTION Count_Emp(DNUMBER VARCHAR(10)) RETURNS INT DETERMINISTIC
  31. BEGIN
  32.     DECLARE cnt int;
  33.     SET cnt = 0;
  34.     SELECT COUNT(*) INTO cnt FROM EMPLOYEE GROUP BY Dno HAVING Dno = DNUMBER;
  35.     RETURN cnt;
  36. END//
  37. ## REQ 2
  38. CREATE PROCEDURE Year()
  39. BEGIN
  40.     SET SQL_SAFE_UPDATES = 0;
  41.    
  42.     UPDATE DEPT AS UDEPT
  43.     SET UDEPT.Founded = '1960-1-1'
  44.     WHERE UDEPT.Dnumber IN (
  45.         SELECT *
  46.         FROM (
  47.             SELECT Dnumber
  48.             FROM DEPT
  49.             WHERE FOUNDED < '1960-1-1') AS D);
  50.  
  51.     SET SQL_SAFE_UPDATES = 1;
  52. END//
  53. ## REQ 3
  54. CREATE TRIGGER MAX_EMP BEFORE INSERT ON EMPLOYEE
  55. FOR EACH ROW
  56. BEGIN
  57.     IF (NEW.Dno IN (SELECT Dno FROM EMPLOYEE GROUP BY Dno HAVING COUNT(*) >= 8))
  58.     THEN
  59.         SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Error: A Department Can\'t Have More Than 8 Employees';
  60.     END IF;
  61. END//
  62. ## REQ 4
  63. CREATE TRIGGER UPDATE_DNO_CASCADE AFTER UPDATE ON DEPT
  64. FOR EACH ROW
  65. BEGIN
  66.     SET SQL_SAFE_UPDATES = 0;
  67.  
  68.     IF (NEW.Dnumber != OLD.Dnumber)
  69.     THEN
  70.         UPDATE EMPLOYEE
  71.         SET Dno = NEW.Dnumber
  72.         WHERE Dno = OLD.Dnumber;
  73.     END IF;
  74.    
  75.     SET SQL_SAFE_UPDATES = 1;
  76. END//
  77. ## REQ 5
  78. CREATE TRIGGER UPDATE_MGR_SALARY BEFORE UPDATE ON EMPLOYEE
  79. FOR EACH ROW
  80. BEGIN
  81.     SET SQL_SAFE_UPDATES = 0;
  82.    
  83.         UPDATE EMPLOYEE
  84.         SET Salary = NEW.Salary
  85.         WHERE Ssn IN (
  86.             SELECT Ssn
  87.             FROM DEPT
  88.             JOIN EMPLOYEE ON Mgr_ssn = Ssn
  89.             WHERE Dnumber = NEW.Dno
  90.             AND Salary < NEW.Salary);
  91.  
  92.     SET SQL_SAFE_UPDATES = 1;
  93. END//
  94. DELIMITER ;
  95.  
  96.  
  97. INSERT INTO DEPT (Dnumber, Founded) VALUES (1, '1959-1-1'), (2, '1960-1-2');
  98. INSERT INTO EMPLOYEE(Ssn, Dno, Salary) VALUES(1, 1, 1), (2, 1, 5000), (3, 2, 1000);
  99. INSERT INTO DEPT (Dnumber, Mgr_Ssn) VALUES (3, 1);
  100. INSERT INTO EMPLOYEE(Ssn, Dno, Salary) VALUES (4, 3, 2);
  101. ## TEST REQ 3
  102. #INSERT INTO EMPLOYEE(Ssn, Dno) VALUES(1, 1), (2, 1), (3, 2), (4, 1), (5, 1), (6, 1), (7, 1), (8, 1), (9, 1), (10, 1);
  103.  
  104. SELECT * FROM DEPT;
  105.  
  106. ## TEST REQ 1
  107. SELECT Count_Emp(1);
  108. SELECT Count_Emp(2);
  109.  
  110. ## TEST REQ 2
  111. CALL Year();
  112. SELECT * FROM DEPT;
  113.  
  114. ## TEST REQ 4 (THIS WON'T WORK);
  115. -- SET SQL_SAFE_UPDATES = 0;
  116. -- UPDATE DEPT SET Dnumber = 4 WHERE Dnumber = 2;
  117. -- SET SQL_SAFE_UPDATES = 1;
  118. -- SELECT * FROM EMPLOYEE;
  119.  
  120. ## TEST REQ 5 (THIS WON'T WORK);
  121. -- SET SQL_SAFE_UPDATES = 0;
  122. -- UPDATE EMPLOYEE SET Salary = 10000 WHERE Ssn = 4;
  123. -- SET SQL_SAFE_UPDATES = 1;
  124. -- SELECT * FROM EMPLOYEE;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement