Advertisement
Kimossab

ABD - Ficha 7

Nov 17th, 2015
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 1.57 KB | None | 0 0
  1. CREATE OR REPLACE FUNCTION irss(sal IN NUMBER) RETURN NUMBER AS
  2.   res NUMBER;
  3. BEGIN
  4.   IF sal > 1000 THEN
  5.     res := sal*0.2;
  6.   ELSE
  7.     res := sal*0.1;
  8.   END IF;
  9.   RETURN res;
  10. END;
  11.  
  12. DECLARE x NUMBER;
  13. BEGIN
  14. x:=irss(2000);
  15. DBMS_OUTPUT.PUT_LINE(x);
  16. END;
  17.  
  18. SELECT ename, sal, irss(sal) FROM emp;
  19.  
  20. /*1*/
  21. CREATE OR REPLACE PROCEDURE atsal(nemp NUMBER, valsub NUMBER) IS
  22.   salar NUMBER;
  23.   mger NUMBER;
  24.   encsal NUMBER;
  25.   salario_superior EXCEPTION;
  26. BEGIN
  27.   SELECT sal,mgr INTO salar,mger FROM emp WHERE empno = nemp;
  28.   SELECT sal INTO encsal FROM emp WHERE empno = mger;
  29.   IF salar+valsub < encsal THEN
  30.     UPDATE emp SET sal = salar+valsub WHERE empno = nemp;
  31.   ELSE
  32.     RAISE salario_superior;
  33.   END IF;
  34.   EXCEPTION
  35.   WHEN NO_DATA_FOUND THEN
  36.     DBMS_OUTPUT.put_line('Erro: Empregado errado.');
  37.   WHEN salario_superior THEN
  38.     DBMS_OUTPUT.put_line('Erro: o salário seria maior que o encarregado.');
  39.   WHEN OTHERS THEN
  40.     DBMS_OUTPUT.put_line('Erro: UNKNOWN.');
  41. END;
  42.  
  43. BEGIN
  44.   atsal(1693,40);
  45.   atsal(1693,4000);
  46.   atsal(5,40);
  47. END;
  48. BEGIN
  49.   atsal(1693,40);
  50.   atsal(1693,4000);
  51.   atsal(5,40);
  52. END;
  53. /*2*/
  54. CREATE SEQUENCE seq_emp INCREMENT BY 1 START WITH 8000;
  55.  
  56. CREATE OR REPLACE PROCEDURE criaremp(enam VARCHAR2,jo VARCHAR2, mg NUMBER,hire DATE, sal NUMBER, com NUMBER, deptno NUMBER, div VARCHAR2) IS
  57.  
  58. BEGIN
  59.   INSERT INTO emp VALUES(seq_emp.NEXTVAL, enam, jo, mg, hire, sal, com, deptno, div);
  60. END;
  61.  
  62. BEGIN
  63. criaremp('Luis', 'Nothing', 1839, '15.11.23', 2500, 20, 10, 'EUR');
  64. criaremp('Pedro', 'Nothing', 1839, '15.11.23', 2500, 20, 10, 'EUR');
  65. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement