Diferència entre revisions de la pàgina «M2 - Bases de dades / Exercicis UF3: Llenguatges SQL / Solucions PL-SQL T7»
De wikiserver
(→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, | + | :::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 emp_table_type IS TABLE OF emp_record
- TYPE rev_salary_table_type IS TABLE OF NUMBER(2)
- INDEX BY BINARY_INTEGER;
- TYPE rev_salary_table_type IS TABLE OF NUMBER(2)
- 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