Advertisement
lunguc

L9

Dec 8th, 2016
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 4.80 KB | None | 0 0
  1. -- Problema 1
  2. CREATE OR REPLACE PACKAGE prod_pack IS
  3.   PROCEDURE add_prod(
  4.     v_prod_id IN product.prodid%TYPE,
  5.     v_prod_descrip IN product.descrip%TYPE);
  6.  
  7.   PROCEDURE del_prod(v_prod_id IN product.prodid%TYPE);
  8.  
  9.   PROCEDURE upd_prod(
  10.     v_prod_id IN product.prodid%TYPE,
  11.     v_prod_descrip IN product.descrip%TYPE);
  12.  
  13.   FUNCTION Q_PROD(id_prod IN product.prodid%TYPE) RETURN product.descrip%TYPE;
  14.  
  15. END prod_pack;
  16.  
  17. CREATE OR REPLACE PACKAGE BODY prod_pack IS
  18.   PROCEDURE add_prod(
  19.     v_prod_id IN product.prodid%TYPE,
  20.     v_prod_descrip IN product.descrip%TYPE)
  21.     IS
  22.   BEGIN
  23.     INSERT INTO product(prodid, descrip) VALUES (v_prod_id, v_prod_descrip);
  24.   EXCEPTION
  25.     WHEN DUP_VAL_ON_INDEX THEN
  26.       DBMS_OUTPUT.PUT_LINE('Eroare');
  27.   END add_prod;
  28.  
  29.  
  30.   PROCEDURE del_prod(
  31.     v_prod_id IN product.prodid%TYPE)
  32.     IS
  33.     v_tmp product.prodid%TYPE;
  34.     negasit EXCEPTION;
  35.   BEGIN
  36.     SELECT COUNT(*) INTO v_tmp FROM product WHERE prodid = v_prod_id;
  37.     IF v_tmp = 0 THEN
  38.       RAISE negasit;
  39.     END IF;
  40.     DELETE FROM product WHERE prodid = v_prod_id;
  41.     DBMS_OUTPUT.PUT_LINE('Sters');
  42.   EXCEPTION
  43.     WHEN negasit THEN
  44.       DBMS_OUTPUT.PUT_LINE('Neagsit');
  45.   END del_prod;
  46.  
  47.   PROCEDURE upd_prod(
  48.   v_prod_id IN product.prodid%TYPE,
  49.   v_prod_descrip IN product.descrip%TYPE)
  50.   IS
  51.   BEGIN
  52.     UPDATE product SET descrip = v_prod_descrip WHERE prodid = v_prod_id;
  53.   EXCEPTION
  54.     WHEN NO_DATA_FOUND THEN
  55.       DBMS_OUTPUT.PUT_LINE('Eroare');
  56.   END upd_prod;
  57.  
  58.   FUNCTION Q_PROD(id_prod IN product.prodid%TYPE) RETURN product.descrip%TYPE
  59.   IS
  60.     v_descript product.descrip%TYPE;
  61.   BEGIN
  62.     SELECT descrip INTO v_descript FROM product WHERE prodid = id_prod;
  63.     RETURN v_descript;
  64.   END;
  65.  
  66. END prod_pack;
  67.  
  68. --Problema 2
  69. CREATE OR REPLACE PACKAGE emp_pack IS
  70.   PROCEDURE new_emp(
  71.     v_ename emp.ename%TYPE,
  72.     v_job emp.job%TYPE:= 'SALESMAN',
  73.     v_mgr emp.mgr%TYPE:= 7839,
  74.     v_hiredate emp.hiredate%TYPE,
  75.     v_sal emp.sal%TYPE:=1000,
  76.     v_comm emp.comm%TYPE:=0,
  77.     v_deptno emp.deptno%TYPE:=30);
  78. END emp_pack;
  79.  
  80. CREATE OR REPLACE PACKAGE BODY emp_pack IS
  81.   FUNCTION valid_deptno(id_departament IN dept.deptno%TYPE) RETURN NUMBER
  82.   IS
  83.     v_id_dep dept.deptno%TYPE;
  84.   BEGIN
  85.     SELECT deptno INTO v_id_dep FROM dept WHERE deptno = id_departament;
  86.     IF ((id_departament > 0 ) AND (v_id_dep = id_departament)) THEN
  87.       RETURN 1;
  88.     ELSE
  89.       RETURN 0;
  90.     END IF;
  91.   END;  
  92.  
  93.   PROCEDURE new_emp(
  94.     v_ename emp.ename%TYPE,
  95.     v_job emp.job%TYPE:= 'SALESMAN',
  96.     v_mgr emp.mgr%TYPE:= 7839,
  97.     v_hiredate emp.hiredate%TYPE,
  98.     v_sal emp.sal%TYPE:=1000,
  99.     v_comm emp.comm%TYPE:=0,
  100.     v_deptno emp.deptno%TYPE:=30)
  101.   IS
  102.     res NUMBER;
  103.   BEGIN
  104.     DBMS_OUTPUT.put_line('begin');
  105.     IF (LENGTH(TRIM(v_ename)) > 0) THEN
  106.       DBMS_OUTPUT.put_line(v_deptno);
  107.       res:= valid_deptno(v_deptno);
  108.       IF (res = 1) THEN
  109.         DBMS_OUTPUT.put_line('valid');
  110.         INSERT INTO emp (ename, job, mgr, hiredate, sal, comm, deptno) VALUES (v_ename, v_job, v_mgr, v_hiredate, v_sal, v_comm, v_deptno);
  111.       ELSE
  112.         DBMS_OUTPUT.put_line('Departamentul nu exista');
  113.       END IF;
  114.     ELSE
  115.       DBMS_OUTPUT.put_line('Introduceti nume angajat');
  116.     END IF;
  117.   END;
  118.  
  119. END emp_pack;
  120.  
  121. --Problema 3
  122. CREATE OR REPLACE PACKAGE chk_pack IS
  123.   PROCEDURE chk_hiredate(d IN emp.hiredate%TYPE);
  124.   PROCEDURE chk_dept_mgr(empno1 IN emp.empno%TYPE, empno2 IN emp.empno%TYPE) ;
  125. END chk_pack;
  126.  
  127. CREATE OR REPLACE PACKAGE BODY chk_pack IS
  128.   FUNCTION isdate(p_string IN VARCHAR2, p_fmt IN VARCHAR2 := NULL)
  129.       RETURN VARCHAR2
  130.     IS
  131.         l_date DATE;
  132.     BEGIN
  133.         l_date := TO_DATE(p_string, p_fmt);
  134.      RETURN 1;
  135.   EXCEPTION
  136.        WHEN OTHERS THEN
  137.            RETURN 0;
  138.   END;
  139.   PROCEDURE chk_hiredate(d IN emp.hiredate%TYPE)
  140.   IS    
  141.   BEGIN
  142.     IF isdate(d) = 1 THEN
  143.       IF d BETWEEN SYSDATE - NUMTOYMINTERVAL(50,'year') AND SYSDATE + NUMTOYMINTERVAL(3,'month') THEN
  144.         sys.DBMS_OUTPUT.put_line('Data ok');
  145.       END IF;
  146.     ELSE
  147.       sys.DBMS_OUTPUT.put_line('Data invalida');
  148.     END IF;
  149.   END;
  150.   PROCEDURE chk_dept_mgr(empno1 IN emp.empno%TYPE, empno2 IN emp.empno%TYPE)
  151.   IS
  152.     v_empno1 emp.empno%TYPE;
  153.     v_empno2 emp.empno%TYPE;
  154.   BEGIN
  155.     SELECT deptno INTO v_empno1 FROM emp WHERE empno = empno1;
  156.  
  157.     SELECT emp1.deptno INTO v_empno2
  158.     FROM emp emp1    
  159.     inner join emp emp2 ON emp2.empno = emp1.mgr
  160.     WHERE emp1.empno = empno2;
  161.  
  162.     IF v_empno1 IS NOT NULL THEN    
  163.       IF v_empno2 IS NOT NULL THEN
  164.         IF v_empno1 = v_empno2 THEN
  165.           sys.DBMS_OUTPUT.put_line('Verificare OK');
  166.         END IF;
  167.       ELSE
  168.         sys.DBMS_OUTPUT.put_line('Managerul angajatului nu exista');
  169.       END IF;
  170.     ELSE
  171.       sys.DBMS_OUTPUT.put_line('Angajatul nu exista');
  172.     END IF;
  173.   END;
  174. END chk_pack;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement