Diferència entre revisions de la pàgina «M2 - Bases de dades / Exercicis UF2: Llenguatges SQL / Solucions T11-HR»

De wikiserver
Dreceres ràpides: navegació, cerca
(Es crea la pàgina amb «1) El personal del departamento de recursos humanos desea ocultar algunos de los datos de la tabla EMPLOYEES. Cree una vista denominada EMPLOYEES_VU basada en los núm...».)
 
Línia 1: Línia 1:
1) El personal del departamento de recursos humanos desea ocultar algunos de los datos
+
1) El personal del departamento de recursos humanos desea ocultar algunos de los datos de la tabla EMPLOYEES. Cree una vista denominada EMPLOYEES_VU basada en los números y los apellidos de los empleados y en los números de departamento de la tabla EMPLOYEES. La cabecera del nombre de empleado debe ser EMPLOYEE.
de la tabla EMPLOYEES. Cree una vista denominada EMPLOYEES_VU basada en los
+
<pre>
números y los apellidos de los empleados y en los números de departamento de la
 
tabla EMPLOYEES. La cabecera del nombre de empleado debe ser EMPLOYEE.
 
 
CREATE OR REPLACE VIEW employees_vu AS
 
CREATE OR REPLACE VIEW employees_vu AS
 
SELECT employee_id, last_name employee, department_id
 
SELECT employee_id, last_name employee, department_id
 
FROM employees;
 
FROM employees;
 +
</pre>
 +
 
2) Confirme que la vista funciona. Visualice el contenido de la vista EMPLOYEES_VU .
 
2) Confirme que la vista funciona. Visualice el contenido de la vista EMPLOYEES_VU .
SELECT
+
<pre>
FROM
+
SELECT *
*
+
FROM employees_vu;
employees_vu;
+
</pre>
3) Con la vista EMPLOYEES_VU , escriba una consulta para el departamento de recursos
+
 
humanos para visualizar todos los nombres de empleados y números de
+
3) Con la vista EMPLOYEES_VU , escriba una consulta para el departamento de recursos humanos para visualizar todos los nombres de empleados y números de departamento.
departamento.
+
<pre>
SELECT
+
SELECT employee, department_id
FROM
+
FROM employees_vu;
employee, department_id
+
</pre>
employees_vu;
 
4) El departamento 50 necesita acceso a los datos de los empleados. Cree una vista con
 
el nombre DEPT50 que contenga los números y apellidos de los empleados y los
 
números de departamento de todos los empleados del departamento 50. Se le ha
 
solicitado que etiquete las columnas de la vista como EMPNO , EMPLOYEE y DEPTNO .
 
Por motivos de seguridad, no permita la reasignación de un empleado a otro
 
departamento a través de la vista.
 
  
 +
4) El departamento 50 necesita acceso a los datos de los empleados. Cree una vista con el nombre DEPT50 que contenga los números y apellidos de los empleados y los números de departamento de todos los empleados del departamento 50. Se le ha solicitado que etiquete las columnas de la vista como EMPNO , EMPLOYEE y DEPTNO.
 +
Por motivos de seguridad, no permita la reasignación de un empleado a otro departamento a través de la vista.
 +
<pre>
 
CREATE VIEW dept50 AS
 
CREATE VIEW dept50 AS
SELECT
+
SELECT employee_id empno, last_name employee, department_id deptno
employee_id empno, last_name employee,
+
FROM employees
department_id deptno
+
WHERE department_id = 50
FROM
 
employees
 
WHERE
 
department_id = 50
 
 
WITH CHECK OPTION CONSTRAINT emp_dept_50;
 
WITH CHECK OPTION CONSTRAINT emp_dept_50;
 +
</pre>
  
 
5) Visualice la estructura y el contenido de la vista DEPT50 .
 
5) Visualice la estructura y el contenido de la vista DEPT50 .
 +
<pre>
 
DESCRIBE dept50
 
DESCRIBE dept50
SELECT
+
 
FROM
+
SELECT *
*
+
FROM dept50;
dept50;
+
</pre>
 +
 
 
6) Pruebe la vista. Intente reasignar Matos al departamento 80.
 
6) Pruebe la vista. Intente reasignar Matos al departamento 80.
UPDATE
+
<pre>
SET
+
UPDATE dept50
WHERE
+
SET deptno = 80
 +
WHERE employee = 'Matos';
 +
</pre>
  
ra
+
El error se debe a que la vista DEPT50 se ha creado con la restricción WITH CHECK OPTION. De esta forma, se garantiza que la columna DEPTNO de la vista esté protegida contra cambios.
dept50
 
deptno = 80
 
employee = 'Matos';
 
El error se debe a que la vista DEPT50 se ha creado con la restricción WITH CHECK
 
OPTION . De esta forma, se garantiza que la columna DEPTNO de la vista esté
 
protegida contra cambios.
 
  
7) Necesita una secuencia que se pueda utilizar con la columna de clave primaria de la
+
7) Necesita una secuencia que se pueda utilizar con la columna de clave primaria de la tabla DEPT. La secuencia debe empezar en 200 y tener un valor máximo de 1.000. Aplique incrementos de 10 a la secuencia. Asigne a la secuencia el nombre DEPT_ID_SEQ.
tabla DEPT . La secuencia debe empezar en 200 y tener un valor máximo de 1.000.
+
<pre>
Aplique incrementos de 10 a la secuencia. Asigne a la secuencia el nombre
 
DEPT_ID_SEQ .
 
 
CREATE SEQUENCE dept_id_seq
 
CREATE SEQUENCE dept_id_seq
 
START WITH 200
 
START WITH 200
 
INCREMENT BY 10
 
INCREMENT BY 10
 
MAXVALUE 1000;
 
MAXVALUE 1000;
8) Para probar la secuencia, escriba un script para insertar dos filas en la tabla DEPT .
+
</pre>
Asigne al script el nombre lab_11_08.sql . Asegúrese de utilizar la secuencia que
+
 
ha creado para la columna ID. Agregue dos departamentos: Education y
+
8) Para probar la secuencia, escriba un script para insertar dos filas en la tabla DEPT.
Administration. Confirme las adiciones. Ejecute los comandos del script.
+
 
 +
Asigne al script el nombre lab_11_08.sql . Asegúrese de utilizar la secuencia que ha creado para la columna ID. Agregue dos departamentos: Education y Administration. Confirme las adiciones. Ejecute los comandos del script.
 +
<pre>
 
INSERT INTO dept
 
INSERT INTO dept
 
VALUES (dept_id_seq.nextval, 'Education');
 
VALUES (dept_id_seq.nextval, 'Education');
 
INSERT INTO dept
 
INSERT INTO dept
 
VALUES (dept_id_seq.nextval, 'Administration');
 
VALUES (dept_id_seq.nextval, 'Administration');
 +
</pre>
  
 
9) Cree un índice no único en la columna NAME de la tabla DEPT .
 
9) Cree un índice no único en la columna NAME de la tabla DEPT .
 +
<pre>
 +
CREATE INDEX dept_name_idx ON dept (name);
 +
</pre>
  
CREATE INDEX dept_name_idx ON dept (name);
 
 
10) Cree un sinónimo para la tabla EMPLOYEES . Llámelo EMP .
 
10) Cree un sinónimo para la tabla EMPLOYEES . Llámelo EMP .
 +
<pre>
 
CREATE SYNONYM emp FOR EMPLOYEES;
 
CREATE SYNONYM emp FOR EMPLOYEES;
 +
</pre>

Revisió del 13:25, 5 des 2017

1) El personal del departamento de recursos humanos desea ocultar algunos de los datos de la tabla EMPLOYEES. Cree una vista denominada EMPLOYEES_VU basada en los números y los apellidos de los empleados y en los números de departamento de la tabla EMPLOYEES. La cabecera del nombre de empleado debe ser EMPLOYEE.

CREATE OR REPLACE VIEW employees_vu AS
SELECT employee_id, last_name employee, department_id
FROM employees;

2) Confirme que la vista funciona. Visualice el contenido de la vista EMPLOYEES_VU .

SELECT *
FROM employees_vu;

3) Con la vista EMPLOYEES_VU , escriba una consulta para el departamento de recursos humanos para visualizar todos los nombres de empleados y números de departamento.

SELECT employee, department_id
FROM employees_vu;

4) El departamento 50 necesita acceso a los datos de los empleados. Cree una vista con el nombre DEPT50 que contenga los números y apellidos de los empleados y los números de departamento de todos los empleados del departamento 50. Se le ha solicitado que etiquete las columnas de la vista como EMPNO , EMPLOYEE y DEPTNO. Por motivos de seguridad, no permita la reasignación de un empleado a otro departamento a través de la vista.

CREATE VIEW dept50 AS
SELECT employee_id empno, last_name employee, department_id deptno
FROM employees
WHERE department_id = 50
WITH CHECK OPTION CONSTRAINT emp_dept_50;

5) Visualice la estructura y el contenido de la vista DEPT50 .

DESCRIBE dept50

SELECT *
FROM dept50;

6) Pruebe la vista. Intente reasignar Matos al departamento 80.

UPDATE dept50
SET deptno = 80
WHERE employee = 'Matos';

El error se debe a que la vista DEPT50 se ha creado con la restricción WITH CHECK OPTION. De esta forma, se garantiza que la columna DEPTNO de la vista esté protegida contra cambios.

7) Necesita una secuencia que se pueda utilizar con la columna de clave primaria de la tabla DEPT. La secuencia debe empezar en 200 y tener un valor máximo de 1.000. Aplique incrementos de 10 a la secuencia. Asigne a la secuencia el nombre DEPT_ID_SEQ.

CREATE SEQUENCE dept_id_seq
START WITH 200
INCREMENT BY 10
MAXVALUE 1000;

8) Para probar la secuencia, escriba un script para insertar dos filas en la tabla DEPT.

Asigne al script el nombre lab_11_08.sql . Asegúrese de utilizar la secuencia que ha creado para la columna ID. Agregue dos departamentos: Education y Administration. Confirme las adiciones. Ejecute los comandos del script.

INSERT INTO dept
VALUES (dept_id_seq.nextval, 'Education');
INSERT INTO dept
VALUES (dept_id_seq.nextval, 'Administration');

9) Cree un índice no único en la columna NAME de la tabla DEPT .

CREATE INDEX dept_name_idx ON dept (name);

10) Cree un sinónimo para la tabla EMPLOYEES . Llámelo EMP .

CREATE SYNONYM emp FOR EMPLOYEES;