Advertisement
Guest User

Untitled

a guest
Jan 19th, 2020
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 3.14 KB | None | 0 0
  1. SET SERVEROUTPUT ON;
  2. DECLARE
  3. najwieksza INTEGER;najmniejsza INTEGER;
  4. BEGIN
  5. SELECT MAX(sal) INTO najwieksza FROM emp;
  6. SELECT MIN(sal) INTO najmniejsza FROM emp;
  7. DBMS_OUTPUT.put_line('min:'||najmniejsza);
  8. DBMS_OUTPUT.put_line('max:'||najwieksza);
  9. END;
  10. DECLARE
  11. zmienna INTEGER;
  12. BEGIN
  13. SELECT COUNT(*) INTO zmienna FROM emp WHERE mgr IS NULL;
  14. DBMS_OUTPUT.put_line(zmienna);
  15. END;
  16. SELECT * FROM emp;
  17. CREATE OR REPLACE PROCEDURE proc1(nazwa VARCHAR,lokalizacja VARCHAR) AS
  18.  
  19. BEGIN
  20. INSERT INTO DEPT VALUES((SELECT MAX(deptno)+10 FROM dept),nazwa,lokalizacja);
  21. END;
  22. --execute proc1('testDzial','Warszawa')
  23. --select * from dept
  24. CREATE OR REPLACE TRIGGER tri1
  25. BEFORE INSERT OR UPDATE
  26. ON EMP
  27. FOR EACH ROW
  28. BEGIN
  29. IF :NEW.sal IS NULL THEN
  30. raise_application_error(-20111, 'pensja jest nieznana');
  31. END IF;
  32. END;
  33. --insert into emp values(699,'tak','prawnik','7902',current_date,890,0,20);
  34. --select * from emp;
  35. CREATE OR REPLACE PROCEDURE proc2(nazwisko VARCHAR,pensja INT) AS
  36. zmienna int;
  37. BEGIN
  38. SELECT COUNT(*)INTO zmienna FROM emp WHERE ename=nazwisko;
  39. IF zmienna=0 THEN
  40. DBMS_OUTPUT.put_line('nie istnieje pracownik o podanym nazwisku');
  41. ELSE
  42. SELECT sal INTO zmienna FROM emp WHERE ename=nazwisko;
  43. IF zmienna<pensja THEN
  44. UPDATE emp SET sal=pensja WHERE ename=nazwisko;
  45. END IF;
  46. END IF;
  47. END;
  48. --select * from emp;
  49. --execute proc2('ALLEN',2000);
  50. CREATE OR REPLACE TRIGGER tri2
  51. BEFORE INSERT
  52. ON EMP
  53. FOR EACH ROW
  54. BEGIN
  55. IF :NEW.mgr IS NULL THEN
  56. SELECT empno INTO :NEW.mgr FROM emp WHERE hiredate=(SELECT MIN(hiredate) FROM emp);
  57. END IF;
  58. END;
  59. INSERT INTO emp VALUES(997,'Michxs','CLERK',NULL,CURRENT_DATE,900,0,20);
  60. SELECT * FROM emp;
  61. CREATE OR REPLACE PROCEDURE proc3(liczba int)AS
  62. SREDNIA int;
  63. CURSOR kursor IS SELECT ename, sal FROM emp;
  64.     wiersz kursor%ROWTYPE;
  65. BEGIN
  66. SELECT AVG(sal) INTO srednia FROM emp;
  67. OPEN kursor;
  68.     LOOP
  69.         FETCH kursor INTO wiersz;
  70.         EXIT WHEN kursor%NOTFOUND;
  71.     IF wiersz.sal>srednia THEN
  72.         UPDATE emp SET sal=sal-liczba WHERE ename=wiersz.ename;
  73.         DBMS_OUTPUT.put_line('zmniejszono pensje '||wiersz.ename);
  74.         ELSE
  75.         UPDATE emp SET sal=sal+liczba WHERE ename=wiersz.ename;
  76.         DBMS_OUTPUT.put_line('zwiekszono pensje '||wiersz.ename);
  77.     END IF;
  78.     END LOOP;
  79.     CLOSE kursor;
  80. END;
  81. --execute proc3(1);
  82. --select * from emp;
  83. CREATE OR REPLACE TRIGGER tri3
  84. BEFORE INSERT OR DELETE OR UPDATE
  85. ON EMP
  86. FOR EACH ROW
  87. DECLARE tmp INT;
  88. BEGIN
  89. IF inserting THEN
  90. SELECT MIN(sal)INTO tmp FROM emp;
  91.     IF :NEW.sal<tmp THEN
  92.     raise_application_error(-20111, 'za mala pensja');
  93.     END IF;
  94. SELECT MAX(sal)INTO tmp FROM emp;
  95.     IF :NEW.sal>tmp THEN
  96.     raise_application_error(-20111, 'za duza pensja');
  97.     END IF;
  98. ELSIF DELETING THEN
  99.     IF :old.deptno IS NOT NULL THEN
  100.     raise_application_error(-20111, 'nie mozna usunac pracownika');
  101.     END IF;
  102. ELSE
  103.     IF :old.hiredate!=:NEW.hiredate THEN
  104.     raise_application_error(-20111,'data ulegla zmianie');
  105.     END IF;
  106. END IF;
  107. END;
  108. DELETE FROM emp WHERE ename='FERRARI'
  109. INSERT INTO emp VALUES('433','FERRARI','ANALYST',7902,CURRENT_DATE,2000,0,0);
  110. UPDATE EMP SET hiredate=CURRENT_DATE WHERE ename='JAMES'
  111. SELECT * FROM emp;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement