Diferència entre revisions de la pàgina «M2 - Bases de dades / Exercicis UF3: Llenguatges SQL / Solucions PL-SQL T7»

De wikiserver
Dreceres ràpides: navegació, cerca
(T7- Tipus de dades compostes)
(T7- Tipus de dades compostes)
Línia 67: Línia 67:
 
:::SELECT ename, sal, deptno
 
:::SELECT ename, sal, deptno
 
    
 
    
:::INTO v_emp.ename, v_ename.sal, v_deptno
+
:::INTO v_emp.ename, v_emp.sal, v_deptno
  
 
:::FROM emp
 
:::FROM emp

Revisió del 16:44, 30 abr 2014

T7- Tipus de dades compostes

  • Exercici 1

Escriu un bloc PL/SQL per recuperar el nom i el sou d'un empleat concret de la taula EMP a partir de la introducció del seu número d'empleat.

a. Crea una nova taula per emmagatzemar salaris i sous.

SQL> CREATE TABLE top_dogs
  2  (name    VARCHAR2(25),
  3   salary  NUMBER(11,2));

b. Declara dues taules: rev_salary_table_type per emmagatzemar el percentatge de augment de salari. i emp_table_type per guardar l'empleat tractat.

c. Inicialitza les posicions de la taula rev_salary_table, corresponents als números de departament de la taula dept, amb els diferents percentatges:

      10 -->  2; 20 --> 3; 30 --> 4; 40 --> 3 ...

d. Guarda el nom i salari en la taula emp_table en la posició corresponent al departament de l'empleat.

e. Finalment guarda en la taula top_dogs el nom de l'empleat i el seu salari revisat en funció del departament al que pertany.


SET VERIFY OFF
ACCEPT p_empno PROMPT 'Número de empleado:'
DECLARE
TYPE emp_record IS RECORD
(
ename emp.ename%TYPE ,
sal emp.sal%TYPE
);
TYPE emp_table_type IS TABLE OF emp_record
INDEX BY BINARY_INTEGER;
TYPE rev_salary_table_type IS TABLE OF NUMBER(2)
INDEX BY BINARY_INTEGER;
emp_table emp_table_type;
rev_salary_table rev_salary_talbe_type;
v_empno emp.empno%TYPE := &p_empno;
v_deptno BINARY_INTEGER;
v_emp emp_record;
v_salary_rev emp.sal%TYPE;
BEGIN
rev_salary_table(10) := 2;
rev_salary_table(20) := 3;
rev_salary_table(30) := 4;
rev_salary_table(40) := 3;
SELECT ename, sal, deptno
INTO v_emp.ename, v_emp.sal, v_deptno
FROM emp
WHERE empno = v_empno;
emp_table(v_deptno) := v_emp;
v_salary_rev := emp_table(v_deptno).sal * (1 + rev_salary_table(v_deptno)/100)
INSERT INTO top_dogs (name,salary)
VALUES (emp_table(v_deptno).ename, v_salary_rev);
COMMIT;
END;
/
SET VERIFY ON