Advertisement
Guest User

Untitled

a guest
Jan 19th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.52 KB | None | 0 0
  1. DROP TABLE CUSTOMER;
  2. DROP TABLE EMPLOYEE;
  3. DROP TABLE SURGERY;
  4. DROP TABLE SURGEMP;
  5. DROP TABLE SUPPLIER;
  6. DROP TABLE MEDICINE;
  7. DROP TABLE SURGMED;
  8.  
  9. ALTER SESSION SET NLS_LANGUAGE="ENGLISH";
  10.  
  11. CREATE TABLE CUSTOMER
  12. (IDC NUMBER(4) PRIMARY KEY,
  13. CNAME VARCHAR(10),
  14. CSURN VARCHAR(15),
  15. CNUM NUMBER(9),
  16. CBIRTH DATE,
  17. CSTART DATE);
  18.  
  19. INSERT INTO CUSTOMER VALUES
  20. (0001, 'JULIA', 'KONOPKO', 512303767, TO_DATE ('11-JUN-1991', 'DD-MON-YYYY'), TO_DATE('13-FEB-2016', 'DD-MON-YYYY'));
  21. INSERT INTO CUSTOMER VALUES
  22. (0002, 'JANEK', 'SIENKIEWICZ', 657828329, TO_DATE ('03-JUL-1998', 'DD-MON-YYYY'), TO_DATE('29-MAR-2017', 'DD-MON-YYYY'));
  23. INSERT INTO CUSTOMER VALUES
  24. (0003, 'SEBASTIAN', 'MAZUR', 288826572, TO_DATE ('29-OCT-1982', 'DD-MON-YYYY'), TO_DATE('13-OCT-2017', 'DD-MON-YYYY'));
  25. INSERT INTO CUSTOMER VALUES
  26. (0004, 'BARTEK', 'SZYMSKI', 598794611, TO_DATE ('17-JAN-1959', 'DD-MON-YYYY'), TO_DATE('07-JAN-2017', 'DD-MON-YYYY'));
  27. INSERT INTO CUSTOMER VALUES
  28. (0005, 'MARCIN', 'KORNACKI', 893211174, TO_DATE ('15-MAR-1989', 'DD-MON-YYYY'), TO_DATE('27-APR-2018', 'DD-MON-YYYY'));
  29. INSERT INTO CUSTOMER VALUES
  30. (0006, 'ANJELA', 'KOLENDA', 525136483, TO_DATE ('30-DEC-1984', 'DD-MON-YYYY'), TO_DATE('01-JAN-2018', 'DD-MON-YYYY'));
  31. INSERT INTO CUSTOMER VALUES
  32. (0007, 'MAREK', 'TONCZAK', 164527899, TO_DATE ('26-FEB-1993', 'DD-MON-YYYY'), TO_DATE('09-MAR-2017', 'DD-MON-YYYY'));
  33. INSERT INTO CUSTOMER VALUES
  34. (0008, 'ANNA', 'LANGO', 875509092, TO_DATE ('12-MAY-1972', 'DD-MON-YYYY'), TO_DATE('26-JUN-2016', 'DD-MON-YYYY'));
  35. INSERT INTO CUSTOMER VALUES
  36. (0009, 'JAKUB', 'STRELAU', 163422228, TO_DATE ('11-MAR-1994', 'DD-MON-YYYY'), TO_DATE('03-JUL-2017', 'DD-MON-YYYY'));
  37. INSERT INTO CUSTOMER VALUES
  38. (0010, 'MICHAL', 'KUSIAK', 382338209, TO_DATE ('23-OCT-1988', 'DD-MON-YYYY'), TO_DATE('9-MAY-2018', 'DD-MON-YYYY'));
  39.  
  40. CREATE TABLE EMPLOYEE
  41. (IDE NUMBER(4) PRIMARY KEY,
  42. ENAME VARCHAR(10),
  43. ESURN VARCHAR(15),
  44. ENUM NUMBER(9),
  45. EHIRE DATE,
  46. POSIT VARCHAR(15),
  47. SAL NUMBER(7, 2));
  48.  
  49. INSERT INTO EMPLOYEE VALUES
  50. (0010, 'RACHEL', 'GREEN', 846299046, TO_DATE('17-SEP-2014', 'DD-MON-YYYY'), 'NURSE', 2100);
  51. INSERT INTO EMPLOYEE VALUES
  52. (0011, 'CHANDLER', 'BING', 275645637, TO_DATE('25-DEC-2012', 'DD-MON-YYYY'), 'ASSISTANT', 2900);
  53. INSERT INTO EMPLOYEE VALUES
  54. (0012, 'MONICA', 'GELLER', 768490036, TO_DATE('09-APR-2013', 'DD-MON-YYYY'), 'NURSE', 2300);
  55. INSERT INTO EMPLOYEE VALUES
  56. (0013, 'PHOEBEY', 'BUFFAY', 711657326, TO_DATE('23-FEB-2014', 'DD-MON-YYYY'), 'ASSISTANT', 3100);
  57. INSERT INTO EMPLOYEE VALUES
  58. (0014, 'JOEY', 'TRIBBIANI', 337258779, TO_DATE('03-DEC-2014', 'DD-MON-YYYY'), 'DENTIST', 4500);
  59. INSERT INTO EMPLOYEE VALUES
  60. (0015, 'ROSS', 'GELLER', 432280402, TO_DATE('11-OCT-2015', 'DD-MON-YYYY'), 'DENTIST', 4200);
  61.  
  62. select * from employee;
  63.  
  64. CREATE TABLE SURGERY
  65. (IDS NUMBER(4) PRIMARY KEY,
  66. SDATE DATE,
  67. PRICE NUMBER(7, 2),
  68. IDC NUMBER(4),
  69. SDES VARCHAR(20),
  70. FOREIGN KEY (IDC) REFERENCES CUSTOMER(IDC));
  71.  
  72. INSERT INTO SURGERY VALUES
  73. (0100, TO_DATE('19-NOV-2017', 'DD-MON-YYYY'), 520, 0001, 'Root canal treatment');
  74. INSERT INTO SURGERY VALUES
  75. (0101, TO_DATE('30-MAR-2017', 'DD-MON-YYYY'), 750, 0002, 'Root canal treatment');
  76. INSERT INTO SURGERY VALUES
  77. (0102, TO_DATE('19-NOV-2017', 'DD-MON-YYYY'), 810, 0001, 'Dental extractions');
  78. INSERT INTO SURGERY VALUES
  79. (0103, TO_DATE('03-JAN-2018', 'DD-MON-YYYY'), 660, 0003, 'Root canal treatment');
  80. INSERT INTO SURGERY VALUES
  81. (0104, TO_DATE('26-FEB-2017', 'DD-MON-YYYY'), 730, 0004, 'Dental Implants');
  82. INSERT INTO SURGERY VALUES
  83. (0105, TO_DATE('19-MAY-2018', 'DD-MON-YYYY'), 1200, 0005, 'Dental extractions');
  84. INSERT INTO SURGERY VALUES
  85. (0106, TO_DATE('13-MAR-2018', 'DD-MON-YYYY'), 890, 0006, 'Biopsiest');
  86. INSERT INTO SURGERY VALUES
  87. (0107, TO_DATE('01-APR-2017', 'DD-MON-YYYY'), 210, 0007, 'Root canal treatment');
  88. INSERT INTO SURGERY VALUES
  89. (0108, TO_DATE('19-NOV-2017', 'DD-MON-YYYY'), 1580, 0008, 'Reconstr. surgery');
  90. INSERT INTO SURGERY VALUES
  91. (0109, TO_DATE('19-NOV-2017', 'DD-MON-YYYY'), 810, 0009, 'Dental extractions');
  92. INSERT INTO SURGERY VALUES
  93. (0110, TO_DATE('30-JUL-2016', 'DD-MON-YYYY'), 920, 0010, 'Dental extractions');
  94. INSERT INTO SURGERY VALUES
  95. (0111, TO_DATE('30-MAY-2018', 'DD-MON-YYYY'), 1180, 0005, 'Jaw Surgery');
  96. INSERT INTO SURGERY VALUES
  97. (0112, TO_DATE('2-MAY-2018', 'DD-MON-YYYY'), 1510, 0010, 'Dental implants');
  98.  
  99. CREATE TABLE SURGEMP
  100. (IDSE NUMBER(4) PRIMARY KEY,
  101. IDS NUMBER(4),
  102. IDE NUMBER(4),
  103. FOREIGN KEY (IDS) REFERENCES SURGERY(IDS),
  104. FOREIGN KEY (IDE) REFERENCES EMPLOYEE(IDE));
  105.  
  106. INSERT INTO SURGEMP VALUES
  107. (0293, 0100, 0011);
  108. INSERT INTO SURGEMP VALUES
  109. (0213, 0100, 0014);
  110. INSERT INTO SURGEMP VALUES
  111. (0746, 0101, 0014);
  112. INSERT INTO SURGEMP VALUES
  113. (0946, 0102, 0013);
  114. INSERT INTO SURGEMP VALUES
  115. (0239, 0102, 0014);
  116. INSERT INTO SURGEMP VALUES
  117. (0281, 0103,0015);
  118. INSERT INTO SURGEMP VALUES
  119. (0381, 0104, 0013);
  120. INSERT INTO SURGEMP VALUES
  121. (0846, 0104, 0015);
  122. INSERT INTO SURGEMP VALUES
  123. (0245, 0105, 0013);
  124. INSERT INTO SURGEMP VALUES
  125. (0321, 0105, 0015);
  126. INSERT INTO SURGEMP VALUES
  127. (0753, 0106, 0014);
  128. INSERT INTO SURGEMP VALUES
  129. (0928, 0107, 0014);
  130. INSERT INTO SURGEMP VALUES
  131. (0422, 0107, 0015);
  132. INSERT INTO SURGEMP VALUES
  133. (0751, 0108, 0013);
  134. INSERT INTO SURGEMP VALUES
  135. (0421, 0109, 0014);
  136. INSERT INTO SURGEMP VALUES
  137. (0810, 0110, 0015);
  138. INSERT INTO SURGEMP VALUES
  139. (0921, 0110, 0014);
  140. INSERT INTO SURGEMP VALUES
  141. (0634, 0111, 0011);
  142. INSERT INTO SURGEMP VALUES
  143. (0674, 0111, 0014);
  144. INSERT INTO SURGEMP VALUES
  145. (0563, 0112, 0015);
  146.  
  147.  
  148. CREATE TABLE SUPPLIER
  149. (IDSUP NUMBER(4) PRIMARY KEY,
  150. SUPNAME VARCHAR(20),
  151. SUPDATE DATE,
  152. SUPNUM NUMBER(9),
  153. SUPLOC VARCHAR(15));
  154.  
  155. INSERT INTO SUPPLIER VALUES
  156. (1000, 'MOMO', TO_DATE('12-JAN-2016', 'DD-MON-YYYY'), 947321245, 'AUSTRALIA');
  157. INSERT INTO SUPPLIER VALUES
  158. (1001, 'PHIENCY', TO_DATE('24-OCT-2017', 'DD-MON-YYYY'), 546277725, 'ENGLAND');
  159.  
  160. CREATE TABLE MEDICINE
  161. (IDM NUMBER(4) PRIMARY KEY,
  162. MNAME VARCHAR(20),
  163. MDATEBUY DATE,
  164. IDSUP NUMBER(4),
  165. FOREIGN KEY (IDSUP) REFERENCES SUPPLIER(IDSUP));
  166.  
  167. INSERT INTO MEDICINE VALUES
  168. (7563, 'QUARYEBS', TO_DATE('12-JAN-2016', 'DD-MON-YYYY'), 1000);
  169. INSERT INTO MEDICINE VALUES
  170. (7564, 'QUARYEBS', TO_DATE('12-JAN-2016', 'DD-MON-YYYY'), 1000);
  171. INSERT INTO MEDICINE VALUES
  172. (7565, 'QUARYEBS', TO_DATE('12-JAN-2016', 'DD-MON-YYYY'), 1000);
  173. INSERT INTO MEDICINE VALUES
  174. (7566, 'QUARYEBS', TO_DATE('12-JAN-2016', 'DD-MON-YYYY'), 1000);
  175. INSERT INTO MEDICINE VALUES
  176. (7567, 'QUARYEBS', TO_DATE('12-JAN-2016', 'DD-MON-YYYY'), 1000);
  177. INSERT INTO MEDICINE VALUES
  178. (7568, 'QUARYEBS', TO_DATE('12-JAN-2016', 'DD-MON-YYYY'), 1000);
  179. INSERT INTO MEDICINE VALUES
  180. (7569, 'QUARYEBS', TO_DATE('12-JAN-2016', 'DD-MON-YYYY'), 1000);
  181. INSERT INTO MEDICINE VALUES
  182. (7570, 'QUARYEBS', TO_DATE('12-JAN-2016', 'DD-MON-YYYY'), 1000);
  183. INSERT INTO MEDICINE VALUES
  184. (7571, 'QUARYEBS', TO_DATE('12-JAN-2016', 'DD-MON-YYYY'), 1000);
  185. INSERT INTO MEDICINE VALUES
  186. (7572, 'MEOW JYD', TO_DATE('23-APR-2017', 'DD-MON-YYYY'), 1001);
  187. INSERT INTO MEDICINE VALUES
  188. (7573, 'MEOW JYD', TO_DATE('23-APR-2017', 'DD-MON-YYYY'), 1001);
  189. INSERT INTO MEDICINE VALUES
  190. (7574, 'MEOW JYD', TO_DATE('23-APR-2017', 'DD-MON-YYYY'), 1001);
  191. INSERT INTO MEDICINE VALUES
  192. (7575, 'MEOW JYD', TO_DATE('23-APR-2017', 'DD-MON-YYYY'), 1001);
  193. INSERT INTO MEDICINE VALUES
  194. (7576, 'MEOW JYD', TO_DATE('23-APR-2017', 'DD-MON-YYYY'), 1001);
  195. INSERT INTO MEDICINE VALUES
  196. (7577, 'FEWYE', TO_DATE('02-MAY-2017', 'DD-MON-YYYY'), 1000);
  197. INSERT INTO MEDICINE VALUES
  198. (7578, 'FEWYE', TO_DATE('02-MAY-2017', 'DD-MON-YYYY'), 1000);
  199. INSERT INTO MEDICINE VALUES
  200. (7579, 'FEWYE', TO_DATE('02-MAY-2017', 'DD-MON-YYYY'), 1000);
  201. INSERT INTO MEDICINE VALUES
  202. (7580, 'FEWYE', TO_DATE('02-MAY-2017', 'DD-MON-YYYY'), 1000);
  203. INSERT INTO MEDICINE VALUES
  204. (7581, 'FEWYE', TO_DATE('02-MAY-2017', 'DD-MON-YYYY'), 1000);
  205. INSERT INTO MEDICINE VALUES
  206. (7582, 'FEWYE', TO_DATE('02-MAY-2017', 'DD-MON-YYYY'), 1000);
  207. INSERT INTO MEDICINE VALUES
  208. (7583, 'FEWYE', TO_DATE('02-MAY-2017', 'DD-MON-YYYY'), 1000);
  209.  
  210. CREATE TABLE SURGMED
  211. (IDSM NUMBER(4) PRIMARY KEY,
  212. IDS NUMBER(4),
  213. IDM NUMBER(4),
  214. FOREIGN KEY (IDS) REFERENCES SURGERY(IDS),
  215. FOREIGN KEY (IDM) REFERENCES MEDICINE(IDM));
  216.  
  217. INSERT INTO SURGMED VALUES
  218. (9000, 0100, 7576);
  219. INSERT INTO SURGMED VALUES
  220. (9001, 0107, 7581);
  221. INSERT INTO SURGMED VALUES
  222. (9002, 0112, 7563);
  223. INSERT INTO SURGMED VALUES
  224. (9003, 0112, 7582);
  225.  
  226. -- QUERIES
  227.  
  228. -- UNION show all the employees and customers(id, name, surname, phone number)
  229. SELECT IDE, ENAME, ESURN, ENUM
  230. FROM EMPLOYEE
  231. UNION
  232. SELECT IDC, CNAME, CSURN, CNUM
  233. FROM CUSTOMER;
  234.  
  235. -- GROUP
  236. --1 show all the customers who spent more than 800 for surgeries
  237.  
  238. SELECT C.CNAME, C.CSURN, SUM(S.PRICE)
  239. FROM CUSTOMER C, SURGERY S
  240. WHERE S.IDC = C.IDC
  241. GROUP BY C.CNAME, C.CSURN
  242. having sum(s.price) > 800;
  243.  
  244. --2 show all the suppliers who supplied medicines more than 5 times
  245. SELECT S.SUPNAME, COUNT(M.IDM)
  246. FROM SUPPLIER S, MEDICINE M
  247. where s.idsup = m.idsup
  248. GROUP BY S.SUPNAME
  249. having count(idm) > 5;
  250.  
  251.  
  252.  
  253. --CORRELATED ??? show all the surgeries that cost more than average price
  254. SELECT c.cname, s.sdate, s.price
  255. from customer c, surgery s
  256. where s.price = (select max(price) from surgery where idc = c.idc) and s.idc = c.idc;
  257.  
  258. select c.cname, s.price, s.sdate
  259. from customer c, surgery s
  260. where c.idc = s.idc
  261. order by c.cname;
  262.  
  263. -- show total year income of all positions(nurses, dentists, assistans) and their amount
  264. SELECT POSIT, SUM(SAL)*12, COUNT(IDE)
  265. FROM EMPLOYEE
  266. GROUP BY POSIT
  267. ORDER BY POSIT;
  268.  
  269. -- show all the employees who were hired before Tribbiani;
  270. SELECT IDE, ENAME, ESURN, EHIRE
  271. FROM EMPLOYEE
  272. WHERE EHIRE < (SELECT EHIRE FROM EMPLOYEE WHERE ESURN='TRIBBIANI')
  273. ORDER BY EHIRE DESC;
  274.  
  275. -- TRIGGERS
  276.  
  277.  
  278. SET ServerOutput ON
  279. Create or replace trigger R222
  280. After insert or update
  281. on EMPLOYEE
  282. For each row
  283. Begin
  284. DBMS_output.put_line('MY TRIGGER WORKS');
  285. End;
  286.  
  287. -- 1 AFETR UPDATE increase salary if position was changed to dentist
  288. SET ServerOutput ON
  289. CREATE OR REPLACE TRIGGER TRIGG11
  290. AFTER UPDATE
  291. ON EMPLOYEE
  292. REFERENCING NEW AS NEW OLD AS OLD
  293. FOR EACH ROW
  294. BEGIN
  295. IF :NEW.SAL < 1600 THEN
  296. DBMS_OUTPUT.PUT_LINE('THE SALARY IS TOO SMALL');
  297. END IF;
  298. END;
  299.  
  300. DBMS_OUTPUT.ENABLE;
  301. UPDATE EMPLOYEE
  302. SET SAL = 500
  303. WHERE ENAME='RACHEL';
  304.  
  305. -- AFTER INSERT
  306. SET ServerOutput ON
  307. CREATE OR REPLACE TRIGGER TRIGG12
  308. BEFORE INSERT
  309. ON EMPLOYEE
  310. REFERENCING NEW AS NEW OLD AS OLD
  311. DECLARE
  312. COUNT_N INTEGER; COUNT_A INTEGER; COUNT_D INTEGER;
  313. BEGIN
  314. SELECT COUNT(ENAME) INTO COUNT_N FROM EMPLOYEE WHERE EMPLOYEE.POSIT = 'NURSE';
  315. SELECT COUNT(ENAME) INTO COUNT_A FROM EMPLOYEE WHERE EMPLOYEE.POSIT = 'ASISSTANT';
  316. SELECT COUNT(ENAME) INTO COUNT_D FROM EMPLOYEE WHERE EMPLOYEE.POSIT = 'DENTIST';
  317. DBMS_OUTPUT.PUT_LINE('THERE ARE '||COUNT_N||' NURSES, '||COUNT_A||' ASSISTANTS, '||COUNT_D||' DENTISTS');
  318. END;
  319.  
  320.  
  321. INSERT INTO EMPLOYEE VALUES
  322. (0020, 'RACH', 'LOWT', 275645636, TO_DATE('17-jan-2016', 'DD-MON-YYYY'), 'NURSE', 1800);
  323. DBMS_OUTPUT.ENABLE;
  324.  
  325.  
  326.  
  327. -- AFTER DELETE print name and surname of deleted employee
  328. SET ServerOutput ON
  329. CREATE OR REPLACE TRIGGER TRIGG13
  330. AFTER DELETE
  331. ON EMPLOYEE
  332. REFERENCING NEW AS NEW OLD AS OLD
  333. FOR EACH ROW
  334. DECLARE OLD_ID INTEGER; OLD_N VARCHAR(12); OLD_S VARCHAR(12);
  335. BEGIN
  336. OLD_ID := :OLD.IDE;
  337. OLD_N := :OLD.ENAME;
  338. OLD_S := :OLD.ESURN;
  339. delete from surgemp where(ide = OLD_ID);
  340. DBMS_OUTPUT.PUT_LINE( OLD_n||' ' ||OLD_S||' WAS DELETED FROM TABLE EMPLOYEE');
  341. END;
  342.  
  343. DELETE FROM EMPLOYEE WHERE IDE='0020';
  344. DBMS_OUTPUT.ENABLE;
  345.  
  346. --2 BEFORE UPDATE
  347. CREATE OR REPLACE TRIGGER TRIGG21
  348. BEFORE UPDATE
  349. ON SURGERY
  350. FOR EACH ROW
  351. BEGIN
  352. IF :NEW.PRICE > 5000 THEN
  353. DBMS_OUTPUT.PUT_LINE('TOO EXPENSIVE');
  354. END IF;
  355. END;
  356.  
  357. UPDATE SURGERY
  358. SET PRICE = '1800'
  359. WHERE SDES = 'Jaw Surgery';
  360. DBMS_OUTPUT.ENABLE;
  361. -- BEFORE INSERT don't allow to insert customer who's age is less than 16
  362. CREATE OR REPLACE TRIGGER TRIG22
  363. BEFORE INSERT
  364. ON CUSTOMER
  365. FOR EACH ROW
  366. DECLARE
  367. CUS_age INTEGER;
  368. BEGIN
  369. SELECT MONTHS_BETWEEN(TO_DATE(sysdate,'DD-MON-YYYY'), TO_DATE(:new.CBIRTH,'DD-MON-YYYY'))/12
  370. INTO CUS_AGE FROM DUAL;
  371. IF (CUS_AGE < 16) THEN
  372. RAISE_APPLICATION_ERROR(-20000,'CUSTOMER age must be greater than or equal to 16.');
  373. END IF;
  374. END;
  375.  
  376. INSERT INTO CUSTOMER VALUES
  377. (0018, 'MARCIN', 'KORNACKI', 893211174, TO_DATE('15-MAR-2006', 'DD-MON-YYYY'), TO_DATE('27-APR-2018', 'DD-MON-YYYY'));
  378. DBMS_OUTPUT.ENABLE;
  379.  
  380.  
  381.  
  382. CREATE OR REPLACE TRIGGER NONC
  383. BEFORE INSERT
  384. ON CUSTOMER
  385. FOR EACH ROW
  386. BEGIN
  387. SELECT NVL(MAX(IDC)+1, 1) INTO :NEW.IDC FROM CUSTOMER;
  388. END;
  389.  
  390. CREATE OR REPLACE TRIGGER NONE
  391. BEFORE INSERT
  392. ON EMPLOYEE
  393. FOR EACH ROW
  394. BEGIN
  395. SELECT NVL(MAX(IDE)+1, 1) INTO :NEW.IDE FROM EMPLOYEE;
  396. END;
  397.  
  398. CREATE OR REPLACE TRIGGER NONM
  399. BEFORE INSERT
  400. ON MEDICINE
  401. FOR EACH ROW
  402. BEGIN
  403. SELECT NVL(MAX(IDM)+1, 1) INTO :NEW.IDM FROM MEDICINE;
  404. END;
  405.  
  406. CREATE OR REPLACE TRIGGER NONSUP
  407. BEFORE INSERT
  408. ON SUPPLIER
  409. FOR EACH ROW
  410. BEGIN
  411. SELECT NVL(MAX(IDSUP)+1, 1) INTO :NEW.IDSUP FROM SUPPLIER;
  412. END;
  413.  
  414. CREATE OR REPLACE TRIGGER NONSE
  415. BEFORE INSERT
  416. ON SURGEMP
  417. FOR EACH ROW
  418. BEGIN
  419. SELECT NVL(MAX(IDSE)+1, 1) INTO :NEW.IDSE FROM SURGEMP;
  420. END;
  421.  
  422. CREATE OR REPLACE TRIGGER NONS
  423. BEFORE INSERT
  424. ON SURGERY
  425. FOR EACH ROW
  426. BEGIN
  427. SELECT NVL(MAX(IDS)+1, 1) INTO :NEW.IDS FROM SURGERY;
  428. END;
  429.  
  430. CREATE OR REPLACE TRIGGER NONSM
  431. BEFORE INSERT
  432. ON SURGMED
  433. FOR EACH ROW
  434. BEGIN
  435. SELECT NVL(MAX(IDSM)+1, 1) INTO :NEW.IDSM FROM SURGMED;
  436. END;
  437.  
  438.  
  439.  
  440.  
  441.  
  442.  
  443.  
  444. CREATE OR REPLACE PROCEDURE ADD_CUSTOMER(
  445. NEWNAME CUSTOMER.CNAME%TYPE,
  446. NEWSUR CUSTOMER.CSURN%TYPE,
  447. NEWNUM CUSTOMER.CNUM%TYPE,
  448. NEWBIRTH CUSTOMER.CBIRTH%TYPE
  449. )
  450. AS
  451. TOO_YOUNG EXCEPTION;
  452. NEWIDC CUSTOMER.IDC%TYPE;
  453. NEWSTART CUSTOMER.CSTART%TYPE;
  454. BEGIN
  455. SELECT MAX(IDC) INTO NEWIDC FROM CUSTOMER;
  456.  
  457. IF (MONTHS_BETWEEN(SYSDATE, NEWBIRTH)/12 < 18) THEN RAISE TOO_YOUNG;
  458. ELSE
  459.  
  460. INSERT INTO CUSTOMER ("IDC", "CNAME", "CSURN", "CNUM", "CBIRTH", "CSTART")
  461. VALUES (NEWIDC+1, NEWNAME, NEWSUR, NEWNUM, NEWBIRTH, SYSDATE);
  462.  
  463. END IF;
  464.  
  465. EXCEPTION
  466. WHEN TOO_YOUNG THEN DBMS_OUTPUT.PUT_LINE('CUSTOMER IS TOO YOUNG');
  467. END;
  468.  
  469. SET SERVEROUTPUT ON;
  470.  
  471. SELECT * FROM CUSTOMER;
  472.  
  473. EXEC ADD_CUSTOMER('ADAM', 'JAKUBOWICZ', 627194566, TO_DATE ('11-JUN-2003', 'DD-MON-YYYY'));
  474.  
  475. CREATE OR REPLACE PROCEDURE RAISE_SALARY(
  476. EPOSIT EMPLOYEE.POSIT%TYPE
  477. )
  478. AS
  479. CURSOR C IS SELECT IDE FROM EMPLOYEE WHERE POSIT = EPOSIT;
  480. TEMP EMPLOYEE.IDE%TYPE;
  481. NO_SUCH_POSITION EXCEPTION;
  482. PNUM NUMBER(4);
  483. BEGIN
  484. SELECT COUNT(IDE) INTO PNUM FROM EMPLOYEE WHERE POSIT = EPOSIT;
  485. IF PNUM = 0 THEN RAISE NO_SUCH_POSITION;
  486. ELSE
  487. OPEN C;
  488. LOOP
  489. FETCH C INTO TEMP;
  490. EXIT WHEN C%NOTFOUND;
  491. UPDATE EMPLOYEE SET SAL = SAL*1.1 WHERE IDE = TEMP;
  492. END LOOP;
  493. CLOSE C;
  494. END IF;
  495. EXCEPTION
  496. WHEN NO_SUCH_POSITION THEN DBMS_OUTPUT.PUT_LINE('NO EMPLOYEES WITH SUCH POSITION');
  497. END;
  498.  
  499. SELECT * FROM EMPLOYEE;
  500.  
  501. EXEC RAISE_SALARY('NANNY');
  502. EXEC RAISE_SALARY('NURSE');
  503.  
  504. CREATE OR REPLACE PROCEDURE ADD_EMPLOYEE(
  505. NEWNAME EMPLOYEE.ENAME%TYPE,
  506. NEWSURN EMPLOYEE.ESURN%TYPE,
  507. NEWNUM EMPLOYEE.ENUM%TYPE,
  508. NEWPOSIT EMPLOYEE.POSIT%TYPE
  509. )
  510. AS
  511. NEWIDE EMPLOYEE.IDE%TYPE;
  512. NEWHIRE EMPLOYEE.EHIRE%TYPE;
  513. NEWSAL EMPLOYEE.SAL%TYPE;
  514. NO_SALARY EXCEPTION;
  515. BEGIN
  516. NEWHIRE := SYSDATE;
  517. IF NEWPOSIT = 'NURSE' THEN NEWSAL := 800;
  518. ELSE IF NEWPOSIT = 'DENTIST' THEN NEWSAL := 3500;
  519. ELSE IF NEWPOSIT = 'ASSISTANT' THEN NEWSAL := 2000;
  520. ELSE RAISE NO_SALARY;
  521. END IF;
  522. END IF;
  523.  
  524. SELECT MAX(IDE) INTO NEWIDE FROM EMPLOYEE;
  525.  
  526. INSERT INTO EMPLOYEE("IDE", "ENAME", "ESURN", "ENUM", "EHIRE", "POSIT", "SAL")
  527. VALUES (NEWIDE+1, NEWNAME, NEWSURN, NEWNUM, NEWHIRE, NEWPOSIT, NEWSAL);
  528.  
  529. END IF;
  530.  
  531. EXCEPTION
  532. WHEN NO_SALARY THEN DBMS_OUTPUT.PUT_LINE('CANNOT ADD SUCH POSITION WITHOUT SALARY');
  533. END;
  534.  
  535. SELECT * FROM EMPLOYEE;
  536.  
  537. EXEC ADD_EMPLOYEE('RAYRAY', 'GREEN', 264810002, 'ASSISTANT');
  538.  
  539. CREATE OR REPLACE PROCEDURE COUNT_SURG(
  540. EMPLOYEE EMPLOYEE.IDE%TYPE,
  541. COUNTER OUT NUMBER
  542. )
  543. AS
  544. BEGIN
  545. SELECT COUNT(IDSE) INTO COUNTER FROM SURGEMP WHERE IDE = EMPLOYEE;
  546.  
  547. END;
  548.  
  549. CREATE OR REPLACE TRIGGER ADD_SURGEMP
  550. BEFORE INSERT
  551. ON SURGEMP
  552. REFERENCING NEW AS NEW
  553. FOR EACH ROW
  554. DECLARE
  555. COUNTER NUMBER;
  556. BEGIN
  557. COUNT_SURG(:NEW.IDE, COUNTER);
  558. IF counter > 5 THEN
  559. UPDATE EMPLOYEE SET SAL = SAL*1.1 WHERE IDE = :NEW.IDE;
  560. END IF;
  561. END;
  562.  
  563. SELECT * FROM EMPLOYEE;
  564.  
  565. INSERT INTO SURGEMP VALUES
  566. (0293, 0101, 0015);
  567.  
  568. CREATE OR REPLACE FUNCTION COUNT_SURG_CUS(
  569. CUSTOMER_NAME CUSTOMER.CNAME%TYPE,
  570. CUSTOMER_SURN CUSTOMER.CSURN%TYPE
  571. )
  572. RETURN NUMBER
  573. AS
  574. COUNTER NUMBER;
  575. CUSTOM CUSTOMER.IDC%TYPE;
  576. NO_SUCH_CUSTOMER EXCEPTION;
  577. COUN NUMBER;
  578. BEGIN
  579. SELECT COUNT(IDC) INTO COUN FROM CUSTOMER WHERE CNAME = CUSTOMER_NAME AND CSURN = CUSTOMER_SURN;
  580. IF COUN != 1 THEN RAISE NO_SUCH_CUSTOMER;
  581. ELSE
  582. SELECT IDC INTO CUSTOM FROM CUSTOMER WHERE CNAME = CUSTOMER_NAME AND CSURN = CUSTOMER_SURN;
  583. SELECT COUNT(IDS) INTO COUNTER FROM SURGERY WHERE CUSTOM = IDC;
  584.  
  585. RETURN COUNTER;
  586. END IF;
  587. EXCEPTION
  588. WHEN NO_SUCH_CUSTOMER THEN DBMS_OUTPUT.PUT_LINE('NO SUCH CUSTOMER');
  589. END;
  590.  
  591. CREATE OR REPLACE PROCEDURE CHANGE_SUPPLIER (
  592. SUPPLIER_NAME SUPPLIER.IDSUP%TYPE,
  593. SUPPLIER_NEW_NAME SUPPLIER.IDSUP%TYPE
  594. )
  595. AS
  596. CURSOR C IS SELECT IDM FROM MEDICINE WHERE IDSUP = SUPPLIER_NAME;
  597. TEMP MEDICINE.IDM%TYPE;
  598. BEGIN
  599. OPEN C;
  600. LOOP
  601. FETCH C INTO TEMP;
  602. EXIT WHEN C%NOTFOUND;
  603. UPDATE MEDICINE SET IDSUP = SUPPLIER_NEW_NAME WHERE IDM = TEMP;
  604. END LOOP;
  605. CLOSE C;
  606.  
  607. END;
  608.  
  609. SELECT * FROM MEDICINE;
  610.  
  611. EXEC CHANGE_SUPPLIER(1001, 1000);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement