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
(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: rev_salary_table per emmagatzemar el percentatge de augment de salari. i emp_table per guardar l'empleat tractat.
+
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 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;