Diferència entre revisions de la pàgina «M2 - Bases de dades / Exercicis UF3: Llenguatges SQL / Solucions PL-SQL T7»
(→T7- Tipus de dades compostes) |
(→T7- Tipus de dades compostes) |
||
Línia 21: | Línia 21: | ||
Creem el tipus taula de registres: | Creem el tipus taula de registres: | ||
− | TYPE emp_table_type IS | + | TYPE emp_table_type IS TABLE OF emp_record_type; |
*Alternativa: TYPE emp_table_type IS TABLE OF top_dogs%TYPE (amb aquesta opció no caldria haver declarat el tipus registre) | *Alternativa: TYPE emp_table_type IS TABLE OF top_dogs%TYPE (amb aquesta opció no caldria haver declarat el tipus registre) |
Revisió del 20:54, 17 abr 2015
T7- Tipus de dades compostes
Crea una nova taula per emmagatzemar salaris i sous.
SQL> CREATE TABLE top_dogs 2 (name VARCHAR2(25), 3 salary NUMBER(11,2));
- Exercici 1
Escriu un bloc PL/SQL que inicialitzi les 3 primeres posicions d'una taula de registres (nom, salari) i a continuació actualitzi la taula top_dogs amb aquesta informació.
Creem el tipus registre:
TYPE emp_record_type IS RECORD (name VARCHAR2(25), salary NUMBER(11,2));
Creem el tipus taula de registres:
TYPE emp_table_type IS TABLE OF emp_record_type;
- Alternativa: TYPE emp_table_type IS TABLE OF top_dogs%TYPE (amb aquesta opció no caldria haver declarat el tipus registre)
Creem la variable taula de registres:
emp_table emp_table_type;
Inicialitzem la taula:
emp_table(1).name := 'Pere'; emp_talbe(1).salary := 3000; emp_table(2).name := 'Joan'; emp_talbe(2).salary := 4000; emp_table(3).name := 'Raquel'; emp_talbe(3).salary := 3500;
Inserim els valors a la taula TOP_DOGS:
FOR i IN 1..3 LOOP INSERT top_dogs VALUES (emp_table(1).name, emp_talbe(1).salary); END LOOP;
- Exercici 2
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. Declara dues taules: rev_salary_table_type per emmagatzemar el percentatge de augment de salari. i emp_table_type per guardar l'empleat tractat.
b. 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 ...
c. Guarda el nom i salari en la taula emp_table en la posició corresponent al departament de l'empleat.
d. 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