Diferència entre revisions de la pàgina «M2 - Bases de dades / Exercicis UF3: Llenguatges SQL / Solucions PL-SQL T7»
De wikiserver
(Es crea la pàgina amb «==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…».) |
(→T7- Tipus de dades compostes) |
||
Línia 14: | Línia 14: | ||
</pre> | </pre> | ||
− | b. Declara dues taules: | + | 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, corresponents als números de departament de la taula dept, amb els diferents percentatges: | + | 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 ... | 10 --> 2; 20 --> 3; 30 --> 4; 40 --> 3 ... | ||
Línia 23: | Línia 23: | ||
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. | 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(7,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_emp emp_record; | ||
+ | |||
+ | |||
+ | |||
+ | BEGIN | ||
+ | DELETE | ||
+ | FROM top_dogs; | ||
+ | SELECT ename, sal | ||
+ | INTO v_ename, v_sal | ||
+ | FROM emp | ||
+ | WHERE empno = v_empno; | ||
+ | ename_table(i) := v_ename; | ||
+ | sal_table(i) := v_sal; | ||
+ | INSERT INTO top_dogs (name,salary) | ||
+ | VALUES (ename_table(i), sal_table(i)); | ||
+ | COMMIT; | ||
+ | END; |
Revisió del 12:30, 24 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(7,2)
- INDEX BY BINARY_INTEGER;
- TYPE rev_salary_table_type IS TABLE OF NUMBER(7,2)
- emp_table emp_table_type;
- rev_salary_table rev_salary_talbe_type;
- v_empno emp.empno%TYPE := &p_empno;
- v_emp emp_record;
BEGIN
DELETE FROM top_dogs; SELECT ename, sal INTO v_ename, v_sal FROM emp WHERE empno = v_empno; ename_table(i) := v_ename; sal_table(i) := v_sal; INSERT INTO top_dogs (name,salary) VALUES (ename_table(i), sal_table(i)); COMMIT;
END;