Top Banner
Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi- Columna
137

Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

Mar 07, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Subconsultas Multi-ColumnaSubconsultas Multi-Columna

Page 2: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-2 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

ObjetivosObjetivos

Al completar esta lección, debería ser Al completar esta lección, debería ser capaz de hacer lo siguiente:capaz de hacer lo siguiente:

• Escribir una subconsulta multi-columna

• Describir y explicar el comportamiento de las subconsultas cuando se recuperan valores nulos

• Escribir una subconsulta en una cláusula FROM.

Al completar esta lección, debería ser Al completar esta lección, debería ser capaz de hacer lo siguiente:capaz de hacer lo siguiente:

• Escribir una subconsulta multi-columna

• Describir y explicar el comportamiento de las subconsultas cuando se recuperan valores nulos

• Escribir una subconsulta en una cláusula FROM.

Page 3: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-3 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Subconsultas Multi-ColumnaSubconsultas Multi-Columna

Consulta Principal

MANAGER 10

Subquery

SALESMAN 30

MANAGER 10

CLERK 20

La La C. Principal

compara

MANAGER 10MANAGER 10

Valores de una subc. multi-registroValores de una subc. multi-registroy multi-columnay multi-columna

SALESMAN SALESMAN 3030

MANAGER MANAGER 1010

CLERK CLERK 2020

concon

Page 4: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-4 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Usando Usando

Visualizar el nombre, nº de departamento, Visualizar el nombre, nº de departamento, salario y comisión de cualquier empleado cuyo salario y comisión de cualquier empleado cuyo salario y comisión se correspondan (salario y comisión se correspondan (ambosambos) ) con la comisión y salario de cualquier empleado con la comisión y salario de cualquier empleado del departamento 30.del departamento 30.

Visualizar el nombre, nº de departamento, Visualizar el nombre, nº de departamento, salario y comisión de cualquier empleado cuyo salario y comisión de cualquier empleado cuyo salario y comisión se correspondan (salario y comisión se correspondan (ambosambos) ) con la comisión y salario de cualquier empleado con la comisión y salario de cualquier empleado del departamento 30.del departamento 30.

SQL> SELECT ename, deptno, sal, comm 2 FROM emp 3 WHERE (sal, NVL(comm,0)) IN 4 (SELECT sal, NVL(comm,0) 5 FROM emp 6 WHERE deptno = 30);

Subconsultas Multi-ColumnaSubconsultas Multi-Columna

Page 5: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-5 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Comparaciones entre ColumnasComparaciones entre Columnas

Pairwise

SAL COMM

1600 300

1250 500

1250 1400

2850

1500 0

950

Nonpairwise

SAL COMM

1600 300

1250 500

1250 1400

2850

1500 0

950

Page 6: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-6 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Comparación de Subconsultas “Nonpairwise”

Comparación de Subconsultas “Nonpairwise”

SQL> SELECT ename, deptno, sal, comm 2 FROM emp 3 WHERE sal IN (SELECT sal 4 FROM emp 5 WHERE deptno = 30) 6 AND 7 NVL(comm,-1) IN (SELECT NVL(comm,-1) 8 FROM emp 9 WHERE deptno = 30);

Visualizar el nombre, nº de departamento, salario y Visualizar el nombre, nº de departamento, salario y comisión de cualquier empleado cuyo salario y comisión de cualquier empleado cuyo salario y comisión se corresponda con la comisión y salario comisión se corresponda con la comisión y salario de cualquier empleado del departamento 30.de cualquier empleado del departamento 30.

Visualizar el nombre, nº de departamento, salario y Visualizar el nombre, nº de departamento, salario y comisión de cualquier empleado cuyo salario y comisión de cualquier empleado cuyo salario y comisión se corresponda con la comisión y salario comisión se corresponda con la comisión y salario de cualquier empleado del departamento 30.de cualquier empleado del departamento 30.

Page 7: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-7 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Modificación de la Tabla EMPModificación de la Tabla EMP

• Asuma que el salario y comisión de “Clark” son modificados.

• Asuma que el salario y comisión de “Clark” son modificados.

• El salario se cambia a 1500$ y la comisión a 300$.

• El salario se cambia a 1500$ y la comisión a 300$.

ENAME SAL COMM---------- --------- ---------...CLARK 1500 300...ALLEN 1600 300TURNER 1500 0...14 rows selected.

Page 8: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-8 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Subconsulta “Pairwise”Subconsulta “Pairwise”SQL> SELECT ename, deptno, sal, comm 2 FROM emp 3 WHERE (sal, NVL(comm,0)) IN 4 (SELECT sal, NVL(comm,0) 5 FROM emp 6 WHERE deptno = 30);

ENAME DEPTNO SAL COMM---------- --------- --------- ---------JAMES 30 950WARD 30 1250 500MARTIN 30 1250 1400TURNER 30 1500 0ALLEN 30 1600 300BLAKE 30 2850

6 rows selected.

ENAME DEPTNO SAL COMM---------- --------- --------- ---------JAMES 30 950WARD 30 1250 500MARTIN 30 1250 1400TURNER 30 1500 0ALLEN 30 1600 300BLAKE 30 2850

6 rows selected.

Page 9: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-9 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

SQL> SELECT ename,deptno, sal, comm 2 FROM emp 3 WHERE sal IN (SELECT sal 4 FROM emp 5 WHERE deptno = 30) 6 AND 7 NVL(comm,-1) IN (SELECT NVL(comm,-1) 8 FROM emp 9 WHERE deptno = 30);

Subconsulta “Nonpairwise”Subconsulta “Nonpairwise”

ENAME DEPTNO SAL COMM---------- --------- --------- ---------JAMES 30 950BLAKE 30 2850TURNER 30 1500 0CLARK 10 1500 300...7 rows selected.

Page 10: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-10 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Valores Nulos en una Subconsulta

Valores Nulos en una Subconsulta

SQL> SELECT employee.ename 2 FROM emp employee 3 WHERE employee.empno NOT IN

(SELECT manager.mgr FROM emp manager);

no rows selected.no rows selected.

Page 11: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-11 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso de un Subconsulta en laCláusula FROM

Uso de un Subconsulta en laCláusula FROM

ENAME SAL DEPTNO SALAVG---------- --------- --------- ----------KING 5000 10 2916.6667JONES 2975 20 2175SCOTT 3000 20 2175...6 rows selected.

ENAME SAL DEPTNO SALAVG---------- --------- --------- ----------KING 5000 10 2916.6667JONES 2975 20 2175SCOTT 3000 20 2175...6 rows selected.

SQL> SELECT a.ename, a.sal, a.deptno, b.salavg 2 FROM emp a, (SELECT deptno, avg(sal) salavg 3 FROM emp 4 GROUP BY deptno) b 5 WHERE a.deptno = b.deptno 6 AND a.sal > b.salavg;

Page 12: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-12 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

ResumenResumen

• Una subconsulta multi-columna devuelve más de una columna.

• Las comparaciones entre columnas en una comparación multi-columna, pueden ser “pairwise” o “nonpairwise”.

• Una subconsulta multi-columna puede también ser usada en la cláusula FROM de una sentencia SELECT.

• Una subconsulta multi-columna devuelve más de una columna.

• Las comparaciones entre columnas en una comparación multi-columna, pueden ser “pairwise” o “nonpairwise”.

• Una subconsulta multi-columna puede también ser usada en la cláusula FROM de una sentencia SELECT.

Page 13: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Manipulación de DatosManipulación de Datos

Page 14: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-14 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

ObjetivosObjetivos

Al completar esta lección, debería ser Al completar esta lección, debería ser capaz de hacer lo siguiente:capaz de hacer lo siguiente:Al completar esta lección, debería ser Al completar esta lección, debería ser capaz de hacer lo siguiente:capaz de hacer lo siguiente:

• Describir cada sentencia DMLDescribir cada sentencia DML

• Insertar filas nuevas en una tabla.Insertar filas nuevas en una tabla.

• Modificar filas de una tabla.Modificar filas de una tabla.

• Eliminar filas de una tabla.Eliminar filas de una tabla.

• Explicar el control de transacciones y Explicar el control de transacciones y su importancia.su importancia.

Page 15: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-15 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

El Lenguaje de Manipulación de Datos

El Lenguaje de Manipulación de Datos

• Una sentencia DML se ejecuta cuando:

– Añade nuevos registros a una tabla

– Modifica registros existentes

– Elimina registros existentes

• Una transacción consiste en una colección de sentencias DML que forman una unidad lógica de trabajo.

• Una sentencia DML se ejecuta cuando:

– Añade nuevos registros a una tabla

– Modifica registros existentes

– Elimina registros existentes

• Una transacción consiste en una colección de sentencias DML que forman una unidad lógica de trabajo.

Page 16: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-16 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Añadir un Nuevo Registro a una Tabla

Añadir un Nuevo Registro a una Tabla

DEPT DEPT DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

Nuevo RegistroNuevo Registro

50 DEVELOPMENT DETROIT

DEPT DEPT DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

“…“…insertar un nuevo insertar un nuevo

registro en la tabla DEPT...”registro en la tabla DEPT...”

50 DEVELOPMENT DETROIT

Page 17: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-17 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

La Sentencia INSERTLa Sentencia INSERT

• Añadimos nuevos registros a una tabla, por medio de la sentencia INSERT.

• Mediante esta sintaxis, sólo se inserta un registro al mismo tiempo.

• Añadimos nuevos registros a una tabla, por medio de la sentencia INSERT.

• Mediante esta sintaxis, sólo se inserta un registro al mismo tiempo.

INSERT INTO table [(column [, column...])]VALUES (value [, value...]);

INSERT INTO table [(column [, column...])]VALUES (value [, value...]);

Page 18: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-18 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Inserción de Nuevos RegistrosInserción de Nuevos Registros• Insertar una nueva fila conteniendo los Insertar una nueva fila conteniendo los

valores para cada columna. valores para cada columna.

• Opcionalmente, se pueden listar las Opcionalmente, se pueden listar las columnas en la cláusula INSERT.columnas en la cláusula INSERT.

• Colocar los valores en el orden que las Colocar los valores en el orden que las columnas tienen en la tabla por defecto.columnas tienen en la tabla por defecto.

• Encerrar los valores de datos de tipo Encerrar los valores de datos de tipo carácter y fecha entre comillas simples.carácter y fecha entre comillas simples.

SQL> INSERT INTO dept (deptno, dname, loc) 2 VALUES (50, 'DEVELOPMENT', 'DETROIT');1 row created.1 row created.

Page 19: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-19 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Inserción de Registros con Valores Nulos

Inserción de Registros con Valores Nulos

• Método Implícito: Omitir la columna en Método Implícito: Omitir la columna en la lista.la lista.

Método Explícito: Especificar la palabra Método Explícito: Especificar la palabra clave NULL o el string vacío ('') en la clave NULL o el string vacío ('') en la lista de VALUES.lista de VALUES.

SQL> INSERT INTO dept (deptno, dname ) 2 VALUES (60, 'MIS');1 row created.1 row created.

SQL> INSERT INTO dept 2 VALUES (70, 'FINANCE', NULL);1 row created.1 row created.

Page 20: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-20 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Inserción de Valores EspecialesInserción de Valores Especiales

La función SYSDATE registra la fecha y La función SYSDATE registra la fecha y hora actual.hora actual.La función SYSDATE registra la fecha y La función SYSDATE registra la fecha y hora actual.hora actual.

SQL> INSERT INTO emp (empno, ename, job, 2 mgr, hiredate, sal, comm, 3 deptno) 4 VALUES (7196, 'GREEN', 'SALESMAN', 5 7782, SYSDATE, 2000, NULL, 6 10);1 row created.1 row created.

Page 21: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-21 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Insertando Valores de Fecha EspecíficosInsertando Valores de Fecha Específicos

• Añadimos un nuevo empleado:• Añadimos un nuevo empleado:SQL> INSERT INTO emp 2 VALUES (2296,'AROMANO','SALESMAN',7782, 3 TO_DATE('FEB 3,97', 'MON DD, YY'), 4 1300, NULL, 10);1 row created.1 row created.

• Verificamos la inserción:• Verificamos la inserción:EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO----- ------- -------- ---- --------- ---- ----- ----- 2296 AROMANO SALESMAN 7782 03-FEB-97 1300 10

Page 22: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-22 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Inserción de Valores por medio de Variables de Sustitución

Inserción de Valores por medio de Variables de Sustitución

Creamos un script interactivo usando Creamos un script interactivo usando parámetros de sustitución de SQL*Plus:parámetros de sustitución de SQL*Plus:Creamos un script interactivo usando Creamos un script interactivo usando parámetros de sustitución de SQL*Plus:parámetros de sustitución de SQL*Plus:

SQL> INSERT INTO dept (deptno, dname, loc) 2 VALUES (&department_id, 3 '&department_name', '&location');

Enter value for department_id: 8080Enter value for department_name: EDUCATIONEDUCATIONEnter value for location: ATLANTAATLANTA

1 row created.

Page 23: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-23 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Creación de un Script con PROMPTS Específicos

Creación de un Script con PROMPTS Específicos

• ACCEPT almacena el valor en una var.

• PROMPT visualiza el texto especificado.

• ACCEPT almacena el valor en una var.

• PROMPT visualiza el texto especificado.

ACCEPT department_id PROMPT 'Please enter the -

department number:'

ACCEPT department_name PROMPT 'Please enter -

the department name:'

ACCEPT location PROMPT 'Please enter the -

location:'

INSERT INTO dept (deptno, dname, loc)

VALUES (&department_id, '&department_name',

&location);

Page 24: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-24 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Copiando Registros de Otra Tabla

Copiando Registros de Otra Tabla• Escribir el comando INSERT con una Escribir el comando INSERT con una

subconsulta (subconsulta (subquerysubquery).).

• No usar la cláusula VALUES.No usar la cláusula VALUES.

• Observar que coincida el número de Observar que coincida el número de columnas en la cláusula INSERT con las columnas en la cláusula INSERT con las de la subconsulta.de la subconsulta.

SQL> INSERT INTO managers(id, name, salary, hiredate) 2 SELECT empno, ename, sal, hiredate 3 FROM emp 4 WHERE job = 'MANAGER';3 rows created.3 rows created.

Page 25: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-25 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Modificación de Datos en una Tabla

Modificación de Datos en una TablaEMPEMP

“… “…Modificación deModificación deun registro en laun registro en la

Tabla EMP…”Tabla EMP…”

EMPEMP

EMPNO ENAME JOB ... DEPTNO

7839 KING PRESIDENT 10 7698 BLAKE MANAGER 30 7782 CLARK MANAGER 10 7566 JONES MANAGER 20 ...

20

EMPNO ENAME JOB ... DEPTNO

7839 KING PRESIDENT 10 7698 BLAKE MANAGER 30 7782 CLARK MANAGER 10 7566 JONES MANAGER 20 ...

Page 26: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-26 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

La Sentencia UPDATELa Sentencia UPDATE

• Modificamos registros existentes con la sentencia UPDATE

• Puede afectar a más de un registro al mismo tiempo.

• Modificamos registros existentes con la sentencia UPDATE

• Puede afectar a más de un registro al mismo tiempo.

UPDATE tableSET column = value [, column = value][WHERE condition];

UPDATE tableSET column = value [, column = value][WHERE condition];

Page 27: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-27 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Modificación de Registros en una TablaModificación de Registros en una Tabla

• Los registros a modificar se especifican por medio de la cláusula WHERE

• Si se omite la cláusula WHERE se modificarían todos los registros de la tabla.

• Los registros a modificar se especifican por medio de la cláusula WHERE

• Si se omite la cláusula WHERE se modificarían todos los registros de la tabla.

SQL> UPDATE emp 2 SET deptno = 20 3 WHERE empno = 7782;1 row updated.1 row updated.

SQL> UPDATE employee 2 SET deptno = 20;14 rows updated.14 rows updated.

SQL> UPDATE employee 2 SET deptno = 20;14 rows updated.14 rows updated.

Page 28: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-28 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Proceso de Modificación con Subconsultas Multi-ColumnaProceso de Modificación con Subconsultas Multi-Columna

SQL> UPDATE emp 2 SET (job, deptno) = 3 (SELECT job, deptno 4 FROM emp 5 WHERE empno = 7499) 6 WHERE empno = 7698;1 row updated.1 row updated.

Modificar el oficio y departamento del Modificar el oficio y departamento del empleado 7698, con los valores empleado 7698, con los valores correspondientes actualmente al empleado correspondientes actualmente al empleado 7499:7499:

Modificar el oficio y departamento del Modificar el oficio y departamento del empleado 7698, con los valores empleado 7698, con los valores correspondientes actualmente al empleado correspondientes actualmente al empleado 7499:7499:

Page 29: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-29 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Modificación de Registros Basados en Otra Tabla

Modificación de Registros Basados en Otra Tabla

Utilice subconsultas en sentencias Utilice subconsultas en sentencias UPDATE, para modificar registros de una UPDATE, para modificar registros de una tabla, basados en valores de otra tabla.tabla, basados en valores de otra tabla.

Utilice subconsultas en sentencias Utilice subconsultas en sentencias UPDATE, para modificar registros de una UPDATE, para modificar registros de una tabla, basados en valores de otra tabla.tabla, basados en valores de otra tabla.

SQL> UPDATE employee 2 SET deptno = (SELECT deptno 3 FROM emp 4 WHERE empno = 7788) 5 WHERE job = (SELECT job 6 FROM emp 7 WHERE empno = 7788);2 rows updated.2 rows updated.

SQL> UPDATE employee 2 SET deptno = (SELECT deptno 3 FROM emp 4 WHERE empno = 7788) 5 WHERE job = (SELECT job 6 FROM emp 7 WHERE empno = 7788);2 rows updated.2 rows updated.

Page 30: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-30 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

UPDATE emp *ERROR at line 1:ORA-02291: integrity constraint (USR.EMP_DEPTNO_FK) violated - parent key not found

UPDATE emp *ERROR at line 1:ORA-02291: integrity constraint (USR.EMP_DEPTNO_FK) violated - parent key not found

SQL> UPDATE emp 2 SET deptno = 55 3 WHERE deptno = 10;

SQL> UPDATE emp 2 SET deptno = 55 3 WHERE deptno = 10;

Modificación de Registros: Error de Integridad (Constraints)

Modificación de Registros: Error de Integridad (Constraints)

El Departa

mento número 55 no existe

El Departa

mento número 55 no existe

El Departa

mento número 55 no existe

El Departa

mento número 55 no existe

Page 31: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-31 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

“…“…Borramos un Borramos un registro de la tabla registro de la tabla DEPT…”DEPT…”

Eliminación de Registros de una Tabla

Eliminación de Registros de una Tabla DEPT DEPT

DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON 50 DEVELOPMENT DETROIT 60 MIS ...

DEPT DEPT DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON 60 MIS ...

Page 32: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-32 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

La Sentencia DELETELa Sentencia DELETE

Puede eliminar registros existentes de Puede eliminar registros existentes de una tabla, por medio de la sentencia una tabla, por medio de la sentencia DELETE.DELETE.

Puede eliminar registros existentes de Puede eliminar registros existentes de una tabla, por medio de la sentencia una tabla, por medio de la sentencia DELETE.DELETE.

DELETE [FROM] table[WHERE condition];

DELETE [FROM] table[WHERE condition];

Page 33: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-33 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

• Los registros a eliminar se especifican por medio de la cláusula WHERE

• Si omite la cláusula WHERE se borrarán todos los registros de la tabla

• Los registros a eliminar se especifican por medio de la cláusula WHERE

• Si omite la cláusula WHERE se borrarán todos los registros de la tabla

Eliminación de Registros de una Tabla

Eliminación de Registros de una Tabla

SQL> DELETE FROM department 2 WHERE dname = 'DEVELOPMENT'; 1 row deleted.1 row deleted.

SQL> DELETE FROM department 2 WHERE dname = 'DEVELOPMENT'; 1 row deleted.1 row deleted.

SQL> DELETE FROM department;4 rows deleted.4 rows deleted.

SQL> DELETE FROM department;4 rows deleted.4 rows deleted.

Page 34: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-34 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Eliminación de Registros Basados en Otra Tabla

Eliminación de Registros Basados en Otra Tabla

Utilice subconsultas en sentencias Utilice subconsultas en sentencias DELETE, para eliminar registros de una DELETE, para eliminar registros de una tabla, basados en valores de otra tabla.tabla, basados en valores de otra tabla.

Utilice subconsultas en sentencias Utilice subconsultas en sentencias DELETE, para eliminar registros de una DELETE, para eliminar registros de una tabla, basados en valores de otra tabla.tabla, basados en valores de otra tabla.

SQL> DELETE FROM employee 2 WHERE deptno = 3 (SELECT deptno 4 FROM dept 5 WHERE dname ='SALES');6 rows deleted.6 rows deleted.

Page 35: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-35 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Eliminación de Registros: Error de Integridad (Constraints)

Eliminación de Registros: Error de Integridad (Constraints)

SQL> DELETE FROM dept 2 WHERE deptno = 10;

SQL> DELETE FROM dept 2 WHERE deptno = 10;

DELETE FROM dept *ERROR at line 1:ORA-02292: integrity constraint (USR.EMP_DEPTNO_FK) violated - child record found

DELETE FROM dept *ERROR at line 1:ORA-02292: integrity constraint (USR.EMP_DEPTNO_FK) violated - child record found

No puede eliminar u

n registro

que contiene

No puede eliminar u

n registro

que contiene

una clave primaria

, usada como clave extern

a

una clave primaria

, usada como clave extern

a

en otra ta

bla

en otra ta

blaNo puede elim

inar un re

gistro que contie

ne

No puede eliminar u

n registro

que contiene

una clave primaria

, usada como clave extern

a

una clave primaria

, usada como clave extern

a

en otra ta

bla

en otra ta

bla

Page 36: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-36 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Transacciones en la Base de Datos

Transacciones en la Base de Datos

Contienen una de las siguientes sentencias:Contienen una de las siguientes sentencias:

• Sentencias DML que deciden un cambio consistente sobre los datos

• Una sentencia DDL

• Una sentencia DCL

Contienen una de las siguientes sentencias:Contienen una de las siguientes sentencias:

• Sentencias DML que deciden un cambio consistente sobre los datos

• Una sentencia DDL

• Una sentencia DCL

Page 37: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-37 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Transacciones en la Base de Datos

Transacciones en la Base de Datos

• Comienzan cuando se ejecuta el Comienzan cuando se ejecuta el primer comando SQL. primer comando SQL.

• Finalizan con uno de los siguientes Finalizan con uno de los siguientes eventos:eventos:

– COMMIT o ROLLBACK.

– Ejecución de un comando DDL o DCL (commit automático).

– Errores, salida o caída del sistema.

• Comienzan cuando se ejecuta el Comienzan cuando se ejecuta el primer comando SQL. primer comando SQL.

• Finalizan con uno de los siguientes Finalizan con uno de los siguientes eventos:eventos:

– COMMIT o ROLLBACK.

– Ejecución de un comando DDL o DCL (commit automático).

– Errores, salida o caída del sistema.

Page 38: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-38 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Ventajas de COMMIT y ROLLBACK

Ventajas de COMMIT y ROLLBACK

• Aseguran la consistencia de los datos.Aseguran la consistencia de los datos.

• Pueden visualizar los cambios sobre los Pueden visualizar los cambios sobre los datos antes de hacerlos permanentes. datos antes de hacerlos permanentes.

• Agrupan lógicamente tareas Agrupan lógicamente tareas relacionadas entre sí.relacionadas entre sí.

Page 39: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-39 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

DELETEDELETE

Control de TransaccionesControl de Transacciones

TransacciónTransacciónTransacciónTransacción

Savepoint ASavepoint A

ROLLBACK to Savepoint BROLLBACK to Savepoint B

DELETEDELETE

Savepoint BSavepoint BCOMMITCOMMIT

INSERTINSERTUPDATEUPDATE

ROLLBACK to Savepoint AROLLBACK to Savepoint A

INSERTINSERTUPDATEUPDATEINSERTINSERT

ROLLBACKROLLBACK

INSERTINSERT

Page 40: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-40 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

• Un commit automático ocurre bajo una de las Un commit automático ocurre bajo una de las siguientes circunstancias:siguientes circunstancias:

– Se emite un comando DDL, tal como Se emite un comando DDL, tal como CREATE.CREATE.

– Se emite un comando DCL, tal como Se emite un comando DCL, tal como GRANT.GRANT.

– Una salida normal desde SQL*Plus, sin Una salida normal desde SQL*Plus, sin realizar un COMMIT o ROLLBACK realizar un COMMIT o ROLLBACK explícitamente.explícitamente.

• Un rollback automático ocurre bajo una Un rollback automático ocurre bajo una terminación anormal de SQL*Plus o una falla terminación anormal de SQL*Plus o una falla del sistema.del sistema.

Proceso Implícito de TransaccionesProceso Implícito de Transacciones

Page 41: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-41 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Estado de los Datos Antes de COMMIT o ROLLBACK

Estado de los Datos Antes de COMMIT o ROLLBACK

• El estado previo de los datos puede ser El estado previo de los datos puede ser recuperado porque el afectado es el búfer de la recuperado porque el afectado es el búfer de la base de datos. base de datos.

• El usuario actual puede revisar los resultados El usuario actual puede revisar los resultados de sus operaciones DML usando la sentencia de sus operaciones DML usando la sentencia SELECT. SELECT.

• Otros usuarios Otros usuarios no pueden no pueden ver los resultados ver los resultados de las sentencias DML ejecutadas por el de las sentencias DML ejecutadas por el usuario actual.usuario actual.

• Las filas afectadas son bloqueadas (Las filas afectadas son bloqueadas (locked)locked); ; otros usuarios no pueden cambiar los datos otros usuarios no pueden cambiar los datos pertenecientes a esas filas.pertenecientes a esas filas.

Page 42: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-42 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Estado de los Datos Después del COMMITEstado de los Datos Después del COMMIT

• Los cambios en los datos son escritos en la Los cambios en los datos son escritos en la base de datos.base de datos.

• Los datos anteriores se pierden Los datos anteriores se pierden definitivamente.definitivamente.

• Todos los usuarios pueden ver los resultados. Todos los usuarios pueden ver los resultados.

• Se liberan los bloqueos aplicados a las filas Se liberan los bloqueos aplicados a las filas afectadas; esas filas están ahora disponibles afectadas; esas filas están ahora disponibles para que otros usuarios las usen.para que otros usuarios las usen.

• Se borran todos los savepoints.Se borran todos los savepoints.

Page 43: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-43 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Commit de DatosCommit de Datos

SQL> UPDATE emp 2 SET deptno = 10 3 WHERE empno = 7782;1 row updated.1 row updated.

SQL> UPDATE emp 2 SET deptno = 10 3 WHERE empno = 7782;1 row updated.1 row updated.

• Realizar los cambios:• Realizar los cambios:

• Hacer Commit de los cambios:• Hacer Commit de los cambios:SQL> COMMIT;Commit complete.Commit complete.

Page 44: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-44 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Estado de los Datos Después de Hacer

ROLLBACK

Estado de los Datos Después de Hacer

ROLLBACK• Se descartan todos los cambios pendientes.Se descartan todos los cambios pendientes.

• Los cambios en los datos se deshacen.Los cambios en los datos se deshacen.

• Se restaura el estado previo de los datos. Se restaura el estado previo de los datos.

• Se levantan todos los bloqueos sobre las filas Se levantan todos los bloqueos sobre las filas afectadas.afectadas.

SQL> DELETE FROM employee;14 rows deleted.14 rows deleted.SQL> ROLLBACK;Rollback complete.Rollback complete.

Page 45: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-45 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Hacer ROLLBACK Hasta un Punto de Salvaguarda

(Marca)

Hacer ROLLBACK Hasta un Punto de Salvaguarda

(Marca)• Crear una marca dentro de una transacción Crear una marca dentro de una transacción

usando el comando SAVEPOINT (marca).usando el comando SAVEPOINT (marca).

• Hacer un Hacer un rollbackrollback hacia la marca usando el hacia la marca usando el comando ROLLBACK TO SAVEPOINT.comando ROLLBACK TO SAVEPOINT.

SQL> UPDATE...SQL> SAVEPOINT update_done;Savepoint created.Savepoint created.SQL> INSERT...SQL> ROLLBACK TO update_done;Rollback complete.Rollback complete.

Page 46: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-46 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Rollback a Nivel de SentenciaRollback a Nivel de Sentencia

• Si una única sentencia DML falla Si una única sentencia DML falla durante su ejecución, entonces se hace durante su ejecución, entonces se hace rollbackrollback sobre esa sentencia solamente. sobre esa sentencia solamente.

• Oracle8 implementa una marca de Oracle8 implementa una marca de seguridad o seguridad o savepoint savepoint implícito.implícito.

• Todos los otros cambios se mantienen.Todos los otros cambios se mantienen.

• El usuario debería terminar El usuario debería terminar explícitamente las transacciones explícitamente las transacciones usando una sentencia COMMIT o usando una sentencia COMMIT o ROLLBACK.ROLLBACK.

Page 47: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-47 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Consistencia en LecturaConsistencia en Lectura

• La consistencia en lectura garantiza una vista consistente de los datos en cualquier circunstancia.

• Los cambios realizados por otro usuario no crean conflictos con los cambios realizados por otro usuario.

• Asegura que sobre los mismos datos:

– Las lecturas no esperan a las escrituras y viceversa.

• La consistencia en lectura garantiza una vista consistente de los datos en cualquier circunstancia.

• Los cambios realizados por otro usuario no crean conflictos con los cambios realizados por otro usuario.

• Asegura que sobre los mismos datos:

– Las lecturas no esperan a las escrituras y viceversa.

Page 48: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-48 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Implementación de la Consistencia en Lectura

Implementación de la Consistencia en Lectura

update empupdate empset sal = 2000set sal = 2000where ename = where ename = 'SCOTT''SCOTT'

Bloques Bloques de Datosde Datos

Segmentos Segmentos de Rollbckde Rollbck

select *select *from empfrom emp

Datos Datos cambiados y cambiados y no cambiadosno cambiados

Antes de Antes de cambiar los cambiar los datos datos “antiguos”“antiguos”

Usuario AUsuario A

Usuario BUsuario B

Imagen Imagen ConsistenteConsistenteen Lecturaen Lectura

Page 49: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-49 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

BloqueosBloqueos

Bloqueos en Oracle8:Bloqueos en Oracle8:

• Previenen la intereacción destructiva entre transacciones concurrentes

• No requieren acciones por parte del usuario

• Automáticamente utilizan el nivel más bajo de restricción

• Se mantienen mientras dura la transacción

• Tienen básicamente dos modos:– Exclusive (exclusivos)– Shared (compartidos)

Bloqueos en Oracle8:Bloqueos en Oracle8:

• Previenen la intereacción destructiva entre transacciones concurrentes

• No requieren acciones por parte del usuario

• Automáticamente utilizan el nivel más bajo de restricción

• Se mantienen mientras dura la transacción

• Tienen básicamente dos modos:– Exclusive (exclusivos)– Shared (compartidos)

Page 50: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-50 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

ResumenResumen

Comando Descripción

INSERT Agrega una fila nueva a la tabla.

UPDATE Modifica filas de una tabla.

DELETE Elimina filas de una tabla.

COMMIT Hace permanentes todos los cambios

pendientes.

SAVEPOINT Permite hacer un rollback hasta la marca de

savepoint.

ROLLBACK Descarta todos los cambios pendientes de los

datos.

Page 51: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Creación y Gestión de TablasCreación y Gestión de Tablas

Page 52: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-52 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

ObjetivosObjetivos

Al completar esta lección, debería ser capaz Al completar esta lección, debería ser capaz de hacer lo siguiente:de hacer lo siguiente:

• Describir los principales objetos de la B.D.

• Crear tablas

• Describir los tipos de datos que se pueden usar al definir una columna

• Alterar definiciones de tablas

• Borrar, renombrar y truncar tablas

Al completar esta lección, debería ser capaz Al completar esta lección, debería ser capaz de hacer lo siguiente:de hacer lo siguiente:

• Describir los principales objetos de la B.D.

• Crear tablas

• Describir los tipos de datos que se pueden usar al definir una columna

• Alterar definiciones de tablas

• Borrar, renombrar y truncar tablas

Page 53: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-53 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Objetos de la Base de DatosObjetos de la Base de Datos

Objeto Descripción

Tabla Unidad básica de almacenamiento;

compuesta de registros y columnas.

Vista Lógicamente representa un subconjunto de

una o más tablas.

Secuencia Genera valores para claves primarias.

Indice Mejoran el rendimiento de algunas

consultas

Sinónimo Da nombres alternativos a los objetos.

Page 54: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-54 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Reglas para los NombresReglas para los Nombres

• Deben comenzar con una letra.Deben comenzar con una letra.

• Pueden tener una longitud de 1-30 Pueden tener una longitud de 1-30 caracteres de largo.caracteres de largo.

• Deben contener solamente A–Z, a–z, 0–9, _, Deben contener solamente A–Z, a–z, 0–9, _, $, y #$, y #

• No deben duplicar el nombre de otro objeto No deben duplicar el nombre de otro objeto que sea propiedad del mismo usuario.que sea propiedad del mismo usuario.

• No debe ser una palabra reservada del No debe ser una palabra reservada del Servidor Oracle8.Servidor Oracle8.

Page 55: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-55 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

La Sentencia CREATE TABLELa Sentencia CREATE TABLE

• Tiene que tener :

– El privilegio CREATE TABLE

– Un área de almacenamiento

• Ha de especificar:

– Nombre de tabla

– Para las columnas: nombre, tipo de dato y tamaño

• Tiene que tener :

– El privilegio CREATE TABLE

– Un área de almacenamiento

• Ha de especificar:

– Nombre de tabla

– Para las columnas: nombre, tipo de dato y tamaño

CREATE TABLE [schema.]table (column datatype [DEFAULT expr];

Page 56: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-56 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Referencia a Tablas de Otros Usuarios

Referencia a Tablas de Otros Usuarios

• Las tablas propiedad de otros usuarios no pertenecen al esquema del usuario.

• Debe de utilizar como prefijo de la tabla, el nombre del propietario.

• Las tablas propiedad de otros usuarios no pertenecen al esquema del usuario.

• Debe de utilizar como prefijo de la tabla, el nombre del propietario.

Page 57: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-57 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

La Opción DEFAULTLa Opción DEFAULT

… hiredate DATE DEFAULT SYSDATE, …

• Especifica un valor por defecto para una Especifica un valor por defecto para una columna, durante una inserción.columna, durante una inserción.

• Los valores permitidos son literales, Los valores permitidos son literales, expresiones, o funciones SQL, tales como expresiones, o funciones SQL, tales como SYSDATE o USER.SYSDATE o USER.

• No se permiten valores que sean nombres No se permiten valores que sean nombres de otra columna o una pseudocolumna.de otra columna o una pseudocolumna.

• El valor por defecto debe ser del tipo que El valor por defecto debe ser del tipo que tiene definido la columna.tiene definido la columna.

Page 58: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-58 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Creación de TablasCreación de Tablas

SQL> CREATE TABLE dept 2 (deptno NUMBER(2), 3 dname VARCHAR2(14), 4 loc VARCHAR2(13));Table created.Table created.

• Crear la Tabla:• Crear la Tabla:

• Verificar que se ha creado correctamente:• Verificar que se ha creado correctamente: SQL> DESCRIBE dept

Name Null? Type --------------------------- -------- --------- DEPTNO NOT NULL NUMBER(2) DNAME VARCHAR2(14) LOC VARCHAR2(13)

Page 59: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-59 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Consultas al Diccionario de Datos

Consultas al Diccionario de Datos• Describir tablas propiedad del usuario.• Describir tablas propiedad del usuario.

• Ver distintos tipos de objetos propiedad del usuario.

• Ver distintos tipos de objetos propiedad del usuario.

• Ver tablas, vistas, sinónimos y secuencias propiedad del usuario.

• Ver tablas, vistas, sinónimos y secuencias propiedad del usuario.

SQL> SELECT * 2 FROM user_tables;

SQL> SELECT DISTINCT object_type 2 FROM user_objects;

SQL> SELECT * 2 FROM user_catalog;

Page 60: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-60 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Tipos de DatosTipos de Datos

Tipo de Dato Descripción

VARCHAR2(size) Dato carácter de longitud variable

CHAR(size) Dato carácter de longitud fija

NUMBER(p,s) Dato numérico de longitud variable

DATE Valores de fecha y hora

LONG Dato carácter de longitud variable hasta 2 gigabytes

CLOB Dato carácter “single-byte” de hasta 4 gigabytes

RAW and LONG RAW Datos binarios

BLOB Datos binarios hasta 4 gigabytes

BFILE Datos binarios almacenados en un fichero externo; hasta 4 gigabytes

Page 61: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-61 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Creación de una Tablapor medio de una Subconsulta

Creación de una Tablapor medio de una Subconsulta

• Crear una tabla e insertar filas combinando el Crear una tabla e insertar filas combinando el comando CREATE TABLE con la opción AS comando CREATE TABLE con la opción AS subquery.subquery.

• Hacer coincidir la cantidad de columnas Hacer coincidir la cantidad de columnas especificadas con las columnas del subquery.especificadas con las columnas del subquery.

• Definir las columnas con sus nombres, valores por Definir las columnas con sus nombres, valores por defecto y restricciones de integridad solamente.defecto y restricciones de integridad solamente.

CREATE TABLE table [column(, column...)]AS subquery;

Page 62: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-62 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Creación de una Tablapor medio de una Subconsulta

Creación de una Tablapor medio de una Subconsulta

Name Null? Type ---------------------------- -------- ----- EMPNO NOT NULL NUMBER(4) ENAME VARCHAR2(10) ANNSAL NUMBER HIREDATE DATE

Name Null? Type ---------------------------- -------- ----- EMPNO NOT NULL NUMBER(4) ENAME VARCHAR2(10) ANNSAL NUMBER HIREDATE DATE

SQL> DESCRIBE dept30

SQL> CREATE TABLE dept30 2 AS 3 SELECT empno, ename, sal*12 ANNSAL, hiredate 4 FROM emp 5 WHERE deptno = 30;Table created.Table created.

Page 63: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-63 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

La Sentencia ALTER TABLELa Sentencia ALTER TABLE

Use la sentencia ALTER TABLE para:Use la sentencia ALTER TABLE para:

• Añadir una nueva columna

• Modificar una columna que ya existe

• Dar un valor por defecto a una nueva col.

Use la sentencia ALTER TABLE para:Use la sentencia ALTER TABLE para:

• Añadir una nueva columna

• Modificar una columna que ya existe

• Dar un valor por defecto a una nueva col.

ALTER TABLE tableADD (column datatype [DEFAULT expr]

[, column datatype]...);

ALTER TABLE tableMODIFY (column datatype [DEFAULT expr]

[, column datatype]...);

Page 64: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-64 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Añadir una ColumnaAñadir una Columna

DEPT30DEPT30 EMPNO ENAME ANNSAL HIREDATE ------ ---------- -------- 7698 BLAKE 34200 01-MAY-81 7654 MARTIN 15000 28-SEP-81 7499 ALLEN 19200 20-FEB-81 7844 TURNER 18000 08-SEP-81...

“…“…añadir añadir una una nueva nueva columna columna a la tabla a la tabla DEPT30”DEPT30”

DEPT30DEPT30 EMPNO ENAME ANNSAL HIREDATE ------ ---------- -------- 7698 BLAKE 34200 01-MAY-81 7654 MARTIN 15000 28-SEP-81 7499 ALLEN 19200 20-FEB-81 7844 TURNER 18000 08-SEP-81...

JOB

JOB

Nueva columnaNueva columna

Page 65: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-65 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Añadir una ColumnaAñadir una Columna

• Use la cláusula ADD para añadir cols.• Use la cláusula ADD para añadir cols.

EMPNO ENAME ANNSAL HIREDATE JOB--------- ---------- --------- --------- ---- 7698 BLAKE 34200 01-MAY-81 7654 MARTIN 15000 28-SEP-81 7499 ALLEN 19200 20-FEB-81 7844 TURNER 18000 08-SEP-81...6 rows selected.

EMPNO ENAME ANNSAL HIREDATE JOB--------- ---------- --------- --------- ---- 7698 BLAKE 34200 01-MAY-81 7654 MARTIN 15000 28-SEP-81 7499 ALLEN 19200 20-FEB-81 7844 TURNER 18000 08-SEP-81...6 rows selected.

SQL> ALTER TABLE dept30 2 ADD (job VARCHAR2(9));Table altered.Table altered.

• La nueva columna aparece en último lugar• La nueva columna aparece en último lugar

Page 66: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-66 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Modificar una ColumnaModificar una Columna

• Puede cambiar el tipo de dato de una columna, su tamaño y valor por dflt.

• Si cambia el valor por defecto, afectará sólo a sucesivas inserciones en la tabla.

• Puede cambiar el tipo de dato de una columna, su tamaño y valor por dflt.

• Si cambia el valor por defecto, afectará sólo a sucesivas inserciones en la tabla.

ALTER TABLE dept30MODIFY (ename VARCHAR2(15));Table altered.Table altered.

Page 67: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-67 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Eliminación de una TablaEliminación de una Tabla

• Se borran todos los datos de la tabla.

• Cualquier transacción pendiente termina con commit.

• Todos los índices de la tabla se borran.

• No puede hacer rollback de la sentencia

• Se borran todos los datos de la tabla.

• Cualquier transacción pendiente termina con commit.

• Todos los índices de la tabla se borran.

• No puede hacer rollback de la sentencia

SQL> DROP TABLE dept30;Table dropped.Table dropped.

Page 68: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-68 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Cambiar el Nombre de un ObjetoCambiar el Nombre de un Objeto

• Para cambiar el nombre de una tabla, vista, secuencia o sinónimo, ejecutaremos la instrucción RENAME.

• Debe ser el propietario del objeto.

• Para cambiar el nombre de una tabla, vista, secuencia o sinónimo, ejecutaremos la instrucción RENAME.

• Debe ser el propietario del objeto.

SQL> RENAME dept TO department;Table renamed.Table renamed.

Page 69: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-69 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Truncar una TablaTruncar una Tabla• La Sentencia TRUNCATE TABLE:

– Borra todos los registros de una tabla

– Libera todo el espacio de almacenamiento ocupado por la tabla

• No puede hacer rollback

• Alternativamente puede borrar los registros, con la sentencia DELETE

• La Sentencia TRUNCATE TABLE:

– Borra todos los registros de una tabla

– Libera todo el espacio de almacenamiento ocupado por la tabla

• No puede hacer rollback

• Alternativamente puede borrar los registros, con la sentencia DELETE

SQL> TRUNCATE TABLE department;Table truncated.Table truncated.

Page 70: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-70 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Añadir Comentarios a una TablaAñadir Comentarios a una Tabla• Puede añadir comentarios a una tabla o

columna, por medio de la instrucción COMMENT

• Los comentarios podrá verlos a través de determinadas estructuras del D.D.– ALL_COL_COMMENTS– USER_COL_COMMENTS– ALL_TAB_COMMENTS– USER_TAB_COMMENTS

• Puede añadir comentarios a una tabla o columna, por medio de la instrucción COMMENT

• Los comentarios podrá verlos a través de determinadas estructuras del D.D.– ALL_COL_COMMENTS– USER_COL_COMMENTS– ALL_TAB_COMMENTS– USER_TAB_COMMENTS

SQL> COMMENT ON TABLE emp 2 IS 'Employee Information';Comment created.Comment created.

Page 71: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-71 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

ResumenResumen

Sentencia Descripción

CREATE TABLE Creación de tablas.

ALTER TABLE Modifica la estructura de una tabla.

DROP TABLE Borra la estructura y registros de la tabla

RENAME Cambia el nombre de una tabla, vista, secuencia o sinónimo.

TRUNCATE Borra todos los registros y libera el espacio ocupados por los registros de la tabla.

COMMENT Añade comentarios a una tabla o vista.

Page 72: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Constraints (Restricciones)

Constraints (Restricciones)

Page 73: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-73 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

ObjetivosObjetivos

Al completar esta lección, debería ser Al completar esta lección, debería ser capaz de hacer lo siguiente:capaz de hacer lo siguiente:

• Describir constraints

• Crear y mantener constraints

Al completar esta lección, debería ser Al completar esta lección, debería ser capaz de hacer lo siguiente:capaz de hacer lo siguiente:

• Describir constraints

• Crear y mantener constraints

Page 74: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-74 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

¿Qué son las Constraints?¿Qué son las Constraints?

• “Fuerzan reglas a nivel de tabla”

• Las constraints previenen el borrado de una tabla si existen dependencias.

• Los siguientes tipos de constrainst son válidos en Oracle8:– NOT NULL– UNIQUE Key– PRIMARY KEY– FOREIGN KEY– CHECK

• “Fuerzan reglas a nivel de tabla”

• Las constraints previenen el borrado de una tabla si existen dependencias.

• Los siguientes tipos de constrainst son válidos en Oracle8:– NOT NULL– UNIQUE Key– PRIMARY KEY– FOREIGN KEY– CHECK

Page 75: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-75 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Guía para el Uso de ConstraintsGuía para el Uso de Constraints

• Asigne un nombre a la restricción, en Asigne un nombre a la restricción, en caso contrario el Server generará uno caso contrario el Server generará uno usando el formato SYS_Cusando el formato SYS_Cnn..

• Se puede crear una restricciónSe puede crear una restricción

–En el momento de crear la tabla.En el momento de crear la tabla.

–Después que la tabla ha sido creada.Después que la tabla ha sido creada.

• Se puede definir un restricción a nivel de Se puede definir un restricción a nivel de columna o a nivel de tabla.columna o a nivel de tabla.

• Vea la constraint en el diccionario de Vea la constraint en el diccionario de datos.datos.

Page 76: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-76 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Definición de ConstraintsDefinición de Constraints

CREATE TABLE [schema.]table (column datatype [DEFAULT expr]

[column_constraint],…[table_constraint]);

CREATE TABLE emp( (empno NUMBER(4), ename VARCHAR2(10), … deptno NUMBER(7,2) NOT NULL,

CONSTRAINT emp_empno_pk PRIMARY KEY (EMPNO));

Page 77: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-77 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Definición de ConstraintsDefinición de Constraints

• Constraint a nivel de columna:

• Constraint a nivel de tabla:

• Constraint a nivel de columna:

• Constraint a nivel de tabla:

column [CONSTRAINT constraint_name] constraint_type,column [CONSTRAINT constraint_name] constraint_type,

column,... [CONSTRAINT constraint_name] constraint_type (column, ...),

column,... [CONSTRAINT constraint_name] constraint_type (column, ...),

Page 78: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-78 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

La Constraint NOT NULLLa Constraint NOT NULL

Asegura que los valores nulos no serán Asegura que los valores nulos no serán permitidos para la columna.permitidos para la columna.Asegura que los valores nulos no serán Asegura que los valores nulos no serán permitidos para la columna.permitidos para la columna.

EMPEMP

EMPNO ENAME JOB ... COMM DEPTNO

7839 KING PRESIDENT 10 7698 BLAKE MANAGER 30 7782 CLARK MANAGER 10 7566 JONES MANAGER 20 ...

NOT NULL constraintNOT NULL constraint(ningún registro podrá (ningún registro podrá contener un valor nulocontener un valor nulo para esta columna)para esta columna)

Ausencia de la Ausencia de la constraint NOT NULLconstraint NOT NULL(cualquier reg. puede (cualquier reg. puede contener un valor nulo contener un valor nulo para esta columna)para esta columna)

Constraint NOT NULLConstraint NOT NULL

Page 79: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-79 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

La Constraint NOT NULLLa Constraint NOT NULL

Definido a nivel de columna:Definido a nivel de columna:Definido a nivel de columna:Definido a nivel de columna:

SQL> CREATE TABLE emp( 2 empno NUMBER(4), 3 ename VARCHAR2(10) NOT NULL, 4 job VARCHAR2(9), 5 mgr NUMBER(4), 6 hiredate DATE, 7 sal NUMBER(7,2), 8 comm NUMBER(7,2), 9 deptno NUMBER(7,2) NOT NULL);

Page 80: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-80 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

La Constraint UNIQUE KeyLa Constraint UNIQUE Key

DEPT DEPT DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

Constraint UNIQUE keyConstraint UNIQUE key

50 SALES DETROIT 60 BOSTON

Insert intoInsert into No permitido No permitido (DNAME(DNAMESALES ya existe)ya existe)

permitidopermitido

Page 81: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-81 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

La Constraint UNIQUE KeyLa Constraint UNIQUE Key

Definido bien a nivel de tabla o de columna: Definido bien a nivel de tabla o de columna: Definido bien a nivel de tabla o de columna: Definido bien a nivel de tabla o de columna:

SQL> CREATE TABLE dept( 2 deptno NUMBER(2), 3 dname VARCHAR2(14), 4 loc VARCHAR2(13), 5 CONSTRAINT dept_dname_uk UNIQUE);

Page 82: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-82 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

La Constraint PRIMARY KEYLa Constraint PRIMARY KEY

DEPT DEPT DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

PRIMARY keyPRIMARY key

Insert intoInsert into

20 MARKETING DALLAS

FINANCE NEW YORK

No permitido No permitido (DEPTNO(DEPTNO20 20 ya existe)ya existe)No permitidoNo permitido(DEPTNO es null)(DEPTNO es null)

Page 83: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-83 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

La Constraint PRIMARY KEYLa Constraint PRIMARY KEY

Definido bien a nivel de tabla o de Definido bien a nivel de tabla o de columna: columna: Definido bien a nivel de tabla o de Definido bien a nivel de tabla o de columna: columna:

SQL> CREATE TABLE dept( 2 deptno NUMBER(2), 3 dname VARCHAR2(14), 4 loc VARCHAR2(13), 5 CONSTRAINT dept_dname_uk UNIQUE, 6 CONSTRAINT dept_deptno_pk PRIMARY KEY);

Page 84: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-84 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

The FOREIGN KEY ConstraintThe FOREIGN KEY Constraint

DEPT DEPT DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS ...

PRIMARYPRIMARYkeykey

EMPEMP

EMPNO ENAME JOB ... COMM DEPTNO

7839 KING PRESIDENT 10 7698 BLAKE MANAGER 30 ...

FOREIGNFOREIGNkeykey

7571 FORD MANAGER ... 200 9 7571 FORD MANAGER ... 200

Insert intoInsert into

No permitidoNo permitido(DEPTNO(DEPTNO no existe en la no existe en la tabla DEPTtabla DEPT

PermitidoPermitido

Page 85: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-85 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

The FOREIGN KEY ConstraintThe FOREIGN KEY Constraint

Definido bien a nivel de tabla o de Definido bien a nivel de tabla o de columna: columna: Definido bien a nivel de tabla o de Definido bien a nivel de tabla o de columna: columna: SQL> CREATE TABLE emp( 2 empno NUMBER(4), 3 ename VARCHAR2(10) NOT NULL, 4 job VARCHAR2(9), 5 mgr NUMBER(4), 6 hiredate DATE, 7 sal NUMBER(7,2), 8 comm NUMBER(7,2), 9 deptno NUMBER(7,2) NOT NULL, 10 CONSTRAINT emp_deptno_fk FOREIGN KEY (deptno) 11 REFERENCES dept (deptno));

Page 86: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-86 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

La Constraint FOREIGN KEY Palabras Reservadas

La Constraint FOREIGN KEY Palabras Reservadas

• FOREIGN KEY– Define la columna en la tabla hija a

nivel de constraint de tabla

• REFERENCES– Identifica la tabla y columna en la

tabla padre

• ON DELETE CASCADE– Permite borrar en la tabla padre y

borrar registros dependientes de la tabla hija.

• FOREIGN KEY– Define la columna en la tabla hija a

nivel de constraint de tabla

• REFERENCES– Identifica la tabla y columna en la

tabla padre

• ON DELETE CASCADE– Permite borrar en la tabla padre y

borrar registros dependientes de la tabla hija.

Page 87: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-87 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

La Constraint CHECKLa Constraint CHECK• Define una condición que debe satisfacer cada fila.Define una condición que debe satisfacer cada fila.

• Expresiones no permitidas:Expresiones no permitidas:

– Referencias a las pseudocolumnas CURRVAL, Referencias a las pseudocolumnas CURRVAL, NEXTVAL, LEVEL, o ROWNUM.NEXTVAL, LEVEL, o ROWNUM.

– Llamadas a las funciones SYSDATE, UID, USER, o Llamadas a las funciones SYSDATE, UID, USER, o USERENV.USERENV.

– Consultas que se refieran a otros valores en otras Consultas que se refieran a otros valores en otras filas.filas.

• Se define o bien como una restricción a nivel de tabla, o Se define o bien como una restricción a nivel de tabla, o a nivel de columna.a nivel de columna.

..., deptno NUMBER(2), CONSTRAINT emp_deptno_ck CHECK (DEPTNO BETWEEN 10 AND 99),...

Page 88: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-88 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Añadir una ConstraintAñadir una Constraint

• Añade o borra, pero no modifica una constraint.

• Activa-Desactiva constraints.

• Añade una constraint NOT NULL con la cláusula MODIFY.

• Añade o borra, pero no modifica una constraint.

• Activa-Desactiva constraints.

• Añade una constraint NOT NULL con la cláusula MODIFY.

ALTER TABLE table ADD [CONSTRAINT constraint] type (column);

ALTER TABLE table ADD [CONSTRAINT constraint] type (column);

Page 89: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-89 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Añadir una ConstraintAñadir una Constraint

Añada una constraint FOREIGN KEY en la Añada una constraint FOREIGN KEY en la tabla EMP indicando que un manager tabla EMP indicando que un manager (director) tiene que existir previamente (director) tiene que existir previamente como número de empleado.como número de empleado.

Añada una constraint FOREIGN KEY en la Añada una constraint FOREIGN KEY en la tabla EMP indicando que un manager tabla EMP indicando que un manager (director) tiene que existir previamente (director) tiene que existir previamente como número de empleado.como número de empleado.

SQL> ALTER TABLE emp 2 ADD CONSTRAINT emp_mgr_fk 3 FOREIGN KEY(mgr) REFERENCES emp(empno);Table altered.Table altered.

Page 90: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-90 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Eliminación de una ConstraintEliminación de una Constraint

• Borra la constraint del manager de la tabla EMP.

• Borra la constraint del manager de la tabla EMP.

SQL> ALTER TABLE emp 2 DROP CONSTRAINT emp_mgr_fk;Table altered.Table altered.

SQL> ALTER TABLE emp 2 DROP CONSTRAINT emp_mgr_fk;Table altered.Table altered.

• Borra la constraint de PRIMARY KEY de la tabla DEPT y borra la constraint de FOREIGN KEY asociada en la columna EMP.DEPTNO.

• Borra la constraint de PRIMARY KEY de la tabla DEPT y borra la constraint de FOREIGN KEY asociada en la columna EMP.DEPTNO.

SQL> ALTER TABLE dept 2 DROP PRIMARY KEY CASCADE;Table altered.Table altered.

SQL> ALTER TABLE dept 2 DROP PRIMARY KEY CASCADE;Table altered.Table altered.

Page 91: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-91 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Desactivar ConstraintsDesactivar Constraints

• Ejecute la cláusula DISABLE de la sentencia ALTER TABLE para desactivar una constraint de integridad.

• Utilice la opción CASCADE para desactivar constrains dependientes.

• Ejecute la cláusula DISABLE de la sentencia ALTER TABLE para desactivar una constraint de integridad.

• Utilice la opción CASCADE para desactivar constrains dependientes.

SQL> ALTER TABLE emp 2 DISABLE CONSTRAINT emp_empno_pk CASCADE;Table altered.Table altered.

SQL> ALTER TABLE emp 2 DISABLE CONSTRAINT emp_empno_pk CASCADE;Table altered.Table altered.

Page 92: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-92 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Activar ConstraintsActivar Constraints

• Active una constraint de integridad actualmente desactivada en la definición de la tabla, por medio de la cláusula ENABLE.

• Un índice UNIQUE o de PRIMARY KEY se crea automáticamente si activa una constraint tipo UNIQUE o PRIMARY KEY

• Active una constraint de integridad actualmente desactivada en la definición de la tabla, por medio de la cláusula ENABLE.

• Un índice UNIQUE o de PRIMARY KEY se crea automáticamente si activa una constraint tipo UNIQUE o PRIMARY KEY

SQL> ALTER TABLE emp 2 ENABLE CONSTRAINT emp_empno_pk;Table altered.Table altered.

SQL> ALTER TABLE emp 2 ENABLE CONSTRAINT emp_empno_pk;Table altered.Table altered.

Page 93: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-93 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Visualización de ConstraintsVisualización de Constraints

Consulte la tabla USER_CONSTRAINTS Consulte la tabla USER_CONSTRAINTS para ver todos los nombres y definiciones para ver todos los nombres y definiciones de constraints. de constraints.

Consulte la tabla USER_CONSTRAINTS Consulte la tabla USER_CONSTRAINTS para ver todos los nombres y definiciones para ver todos los nombres y definiciones de constraints. de constraints.

CONSTRAINT_NAME C SEARCH_CONDITION------------------------ - ------------------------- SYS_C00674 C EMPNO IS NOT NULL SYS_C00675 C DEPTNO IS NOT NULLEMP_EMPNO_PK P...

CONSTRAINT_NAME C SEARCH_CONDITION------------------------ - ------------------------- SYS_C00674 C EMPNO IS NOT NULL SYS_C00675 C DEPTNO IS NOT NULLEMP_EMPNO_PK P...

SQL> SELECT constraint_name, constraint_type, 2 search_condition 3 FROM user_constraints 4 WHERE table_name = 'EMP';

Page 94: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-94 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Visualización de las Columnas Asociadas con Constraints

Visualización de las Columnas Asociadas con Constraints

CONSTRAINT_NAME COLUMN_NAME------------------------- ----------------------EMP_DEPTNO_FK DEPTNOEMP_EMPNO_PK EMPNOEMP_MGR_FK MGRSYS_C00674 EMPNOSYS_C00675 DEPTNO

CONSTRAINT_NAME COLUMN_NAME------------------------- ----------------------EMP_DEPTNO_FK DEPTNOEMP_EMPNO_PK EMPNOEMP_MGR_FK MGRSYS_C00674 EMPNOSYS_C00675 DEPTNO

SQL> SELECT constraint_name, column_name 2 FROM user_cons_columns 3 WHERE table_name = 'EMP';

Visualice las columnas asociadas con los Visualice las columnas asociadas con los nombres de constraints en la vista:nombres de constraints en la vista:USER_CONS_COLUMNSUSER_CONS_COLUMNS

Visualice las columnas asociadas con los Visualice las columnas asociadas con los nombres de constraints en la vista:nombres de constraints en la vista:USER_CONS_COLUMNSUSER_CONS_COLUMNS

Page 95: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-95 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

ResumenResumen

• Cree los siguientes tipos de constraints:

– NOT NULL

– UNIQUE Key

– PRIMARY KEY

– FOREIGN KEY

– CHECK

• Consulte la tabla USER_CONSTRAINTS para ver todos los nombres y definiciones de constraints.

• Cree los siguientes tipos de constraints:

– NOT NULL

– UNIQUE Key

– PRIMARY KEY

– FOREIGN KEY

– CHECK

• Consulte la tabla USER_CONSTRAINTS para ver todos los nombres y definiciones de constraints.

Page 96: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Creación de VistasCreación de Vistas

Page 97: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-97 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

ObjetivosObjetivos

Al completar esta lección, debería ser Al completar esta lección, debería ser capaz de hacer lo siguiente: capaz de hacer lo siguiente:

• Describir una Vista

• Crear una vista

• Recupera datos a través de una vista

• Alterar la definición de una vista

• Insertar, modificar y borrar datos a través de una vista

• Eliminación de vistas

Al completar esta lección, debería ser Al completar esta lección, debería ser capaz de hacer lo siguiente: capaz de hacer lo siguiente:

• Describir una Vista

• Crear una vista

• Recupera datos a través de una vista

• Alterar la definición de una vista

• Insertar, modificar y borrar datos a través de una vista

• Eliminación de vistas

Page 98: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-98 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Objetos de la Base de DatosObjetos de la Base de Datos

Objecto Descripción

Tabla Unidad básica de almacenamiento;

compuesta de registros y columnas.

Vista Lógicamente representa un subconjunto de

una o más tablas.

Secuencia Genera valores para claves primarias.

Indice Mejoran el rendimiento de algunas

consultas

Sinónimo Da nombres alternativos a los objetos.

Page 99: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-99 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

¿Qué es una Vista?¿Qué es una Vista?

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

----- ------- --------- ----- --------- ----- ----- -------

7839 KING PRESIDENT 17-NOV-81 5000 10

7698 BLAKE MANAGER 7839 01-MAY-81 2850 30

7782 CLARK MANAGER 7839 09-JUN-81 2450 10

7566 JONES MANAGER 7839 02-APR-81 2975 20

7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30

7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30

7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30

7900 JAMES CLERK 7698 03-DEC-81 950 30

7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30

7902 FORD ANALYST 7566 03-DEC-81 3000 20

7369 SMITH CLERK 7902 17-DEC-80 800 20

7788 SCOTT ANALYST 7566 09-DEC-82 3000 20

7876 ADAMS CLERK 7788 12-JAN-83 1100 20

7934 MILLER CLERK 7782 23-JAN-82 1300 10

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

----- ------- --------- ----- --------- ----- ----- -------

7839 KING PRESIDENT 17-NOV-81 5000 10

7698 BLAKE MANAGER 7839 01-MAY-81 2850 30

7782 CLARK MANAGER 7839 09-JUN-81 2450 10

7566 JONES MANAGER 7839 02-APR-81 2975 20

7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30

7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30

7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30

7900 JAMES CLERK 7698 03-DEC-81 950 30

7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30

7902 FORD ANALYST 7566 03-DEC-81 3000 20

7369 SMITH CLERK 7902 17-DEC-80 800 20

7788 SCOTT ANALYST 7566 09-DEC-82 3000 20

7876 ADAMS CLERK 7788 12-JAN-83 1100 20

7934 MILLER CLERK 7782 23-JAN-82 1300 10

EMP TableEMP TableEMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

----- -------- --------- ---- --------- ------ ----- -------

7839 KING PRESIDENT 17-NOV-81 5000 10

7782 CLARK MANAGER 7839 09-JUN-81 1500 300 10

7934 MILLER CLERK 7782 23-JAN-82 1300 10

7566 JONES MANAGER 7839 02-APR-81 2975 20

7788 SCOTT ANALYST 7566 09-DEC-82 3000 20

7876 ADAMS CLERK 7788 12-JAN-83 1100 20

7369 SMITH CLERK 7902 17-DEC-80 800 20

7902 FORD ANALYST 7566 03-DEC-81 3000 20

7698 BLAKE MANAGER 7839 01-MAY-81 2850 30

7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30

7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30

7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30

7900 JAMES CLERK 7698 03-DEC-81 950 30

7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

----- -------- --------- ---- --------- ------ ----- -------

7839 KING PRESIDENT 17-NOV-81 5000 10

7782 CLARK MANAGER 7839 09-JUN-81 1500 300 10

7934 MILLER CLERK 7782 23-JAN-82 1300 10

7566 JONES MANAGER 7839 02-APR-81 2975 20

7788 SCOTT ANALYST 7566 09-DEC-82 3000 20

7876 ADAMS CLERK 7788 12-JAN-83 1100 20

7369 SMITH CLERK 7902 17-DEC-80 800 20

7902 FORD ANALYST 7566 03-DEC-81 3000 20

7698 BLAKE MANAGER 7839 01-MAY-81 2850 30

7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30

7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30

7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30

7900 JAMES CLERK 7698 03-DEC-81 950 30

7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30

EMPNO ENAME JOB ------ -------- ----------- 7839 KING PRESIDENT 7782 CLARK MANAGER 7934 MILLER CLERK

EMPVU10 ViewEMPVU10 View

Page 100: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-100 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

¿Por qué Usar Vistas?¿Por qué Usar Vistas?

• Para restringir el acceso a la B.D.

• Para ralizar consultas complejas fácilmente

• Para la indenpendencia de los datos

• Para presentar diferentes vistas de los mismos datos

• Para restringir el acceso a la B.D.

• Para ralizar consultas complejas fácilmente

• Para la indenpendencia de los datos

• Para presentar diferentes vistas de los mismos datos

Page 101: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-101 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Vistas Simples y Vistas Complejas

Vistas Simples y Vistas Complejas

Característica Vis. Simples Vis. Complejas

Nº de Tablas Una Una o más

Contiene funciones No Sí

Contiene grup. de datos No Sí

DML a través de la vista Sí No siempre

Page 102: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-102 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Creación de una VistaCreación de una Vista• Puede incluir una subconsulta dentro de la sentencia CREATE VIEW.

• La subconsulta puede contener una SELECT compleja.

• La subconsulta no puede contener la claúsula ORDER BY.

• Puede incluir una subconsulta dentro de la sentencia CREATE VIEW.

• La subconsulta puede contener una SELECT compleja.

• La subconsulta no puede contener la claúsula ORDER BY.

CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view [(alias[, alias]...)]AS subquery[WITH CHECK OPTION [CONSTRAINT constraint]][WITH READ ONLY]

CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view [(alias[, alias]...)]AS subquery[WITH CHECK OPTION [CONSTRAINT constraint]][WITH READ ONLY]

Page 103: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-103 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Creación de una VistaCreación de una Vista

• Cree una vista, EMPVU10, que contenga detalles de los empleados del dpto. 10

• Cree una vista, EMPVU10, que contenga detalles de los empleados del dpto. 10

• Describa la estructura de la vista, usando el comando DESCRIBE de SQL*Plus.

• Describa la estructura de la vista, usando el comando DESCRIBE de SQL*Plus.

SQL> DESCRIBE empvu10SQL> DESCRIBE empvu10

SQL> CREATE VIEW empvu10 2 AS SELECT empno, ename, job 4 FROM emp 5 WHERE deptno = 10;View created.View created.

Page 104: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-104 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Creación de una VistaCreación de una Vista

• Cree una vista usando alias de columna en la subconsulta.

• Seleccione las columnas de esta vista, haciendo uso del nombre del alias.

• Cree una vista usando alias de columna en la subconsulta.

• Seleccione las columnas de esta vista, haciendo uso del nombre del alias.

SQL> CREATE VIEW salvu30 2 AS SELECT empno EMPLOYEE_NUMBER, ename NAME, 3 sal SALARY 4 FROM emp 5 WHERE deptno = 30;View created.View created.

Page 105: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-105 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Recuperando Datos de una Vista

Recuperando Datos de una Vista

EMPLOYEE_NUMBER NAME SALARY--------------- ---------- --------- 7698 BLAKE 2850 7654 MARTIN 1250 7499 ALLEN 1600 7844 TURNER 1500 7900 JAMES 950 7521 WARD 1250

6 rows selected.

EMPLOYEE_NUMBER NAME SALARY--------------- ---------- --------- 7698 BLAKE 2850 7654 MARTIN 1250 7499 ALLEN 1600 7844 TURNER 1500 7900 JAMES 950 7521 WARD 1250

6 rows selected.

SQL> SELECT * 2 FROM salvu30;

Page 106: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-106 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Consulta a la Tabla del Diccionario de Datos,

USER_VIEWS

Consulta a la Tabla del Diccionario de Datos,

USER_VIEWS

USER_VIEWSUSER_VIEWS EMPVU10EMPVU10SELECT empno, ename, jobFROM empWHERE deptno = 10;

USER_VIEWSUSER_VIEWS EMPVU10EMPVU10SELECT empno, ename, jobFROM empWHERE deptno = 10;

SQL*PlusSQL*Plus

SELECT *FROM empvu10;

EMP

7839 KING PRESIDENT7782 CLARK MANAGER7934 MILLER CLERK

Page 107: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-107 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Modificación de una VistaModificación de una Vista

• Modificar la vista EMPVU10 por medio de la claúsula CREATE OR REPLACE VIEW. Añada un alias para cada columna.

• Los alias de columna en la claúsula CREATE VIEW, deberán de aparecer en el mismo orden que las columnas en la subconsulta.

• Modificar la vista EMPVU10 por medio de la claúsula CREATE OR REPLACE VIEW. Añada un alias para cada columna.

• Los alias de columna en la claúsula CREATE VIEW, deberán de aparecer en el mismo orden que las columnas en la subconsulta.

SQL> CREATE OR REPLACE VIEW empvu10 2 (employee_number, employee_name, job_title) 3 AS SELECT empno, ename, job 4 FROM emp 5 WHERE deptno = 10;View created.View created.

Page 108: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-108 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Creación de una Vista ComplejaCreación de una Vista Compleja

Cree una vista compleja que contenga Cree una vista compleja que contenga funciones de grupo, para ver valores de dos funciones de grupo, para ver valores de dos tablas.tablas.

Cree una vista compleja que contenga Cree una vista compleja que contenga funciones de grupo, para ver valores de dos funciones de grupo, para ver valores de dos tablas.tablas.

SQL> CREATE VIEW dept_sum_vu 2 (name, minsal, maxsal, avgsal) 3 AS SELECT d.dname, MIN(e.sal), MAX(e.sal), 4 AVG(e.sal) 5 FROM emp e, dept d 6 WHERE e.deptno = d.deptno 7 GROUP BY d.dname;View created.View created.

Page 109: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-109 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Reglas para Realizar Operaciones DML sobre Vistas

Reglas para Realizar Operaciones DML sobre Vistas

• Se pueden realizar operaciones DML Se pueden realizar operaciones DML sobre vistas simples. sobre vistas simples.

• No se puede eliminar una fila si la vista No se puede eliminar una fila si la vista contiene:contiene:

–Funciones de grupo.Funciones de grupo.

–Una cláusula GROUP BY.Una cláusula GROUP BY.

–El comando DISTINCT.El comando DISTINCT.

Page 110: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-110 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Reglas para Realizar Operaciones DML sobre Vistas

Reglas para Realizar Operaciones DML sobre Vistas

• No es posible modificar datos en la vista si la No es posible modificar datos en la vista si la misma contiene:misma contiene:

– Cualquiera de las condiciones anteriores.Cualquiera de las condiciones anteriores.

– Columnas definidas por expresiones.Columnas definidas por expresiones.

– La pseudocolumna ROWNUM.La pseudocolumna ROWNUM.

• No se puede agregar datos si la vista contiene:No se puede agregar datos si la vista contiene:

– Cualquiera de las condiciones anteriores.Cualquiera de las condiciones anteriores.

– Cualquier columna NOT NULL no incluída Cualquier columna NOT NULL no incluída por la vista.por la vista.

Page 111: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-111 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

La Claúsula WITH CHECK OPTION

La Claúsula WITH CHECK OPTION• Asegura que un comando DML sobre la vista Asegura que un comando DML sobre la vista

mantiene el dominio de la misma. mantiene el dominio de la misma.

• Si se intenta cambiar el número de Si se intenta cambiar el número de departamento para cualquier fila, la sentencia departamento para cualquier fila, la sentencia fallará porque viola la restricción de CHECK fallará porque viola la restricción de CHECK OPTION.OPTION.

SQL> CREATE OR REPLACE VIEW empvu20 2 AS SELECT * 3 FROM emp 4 WHERE deptno = 20 5 WITH CHECK OPTION CONSTRAINT empvu20_ck;View created.View created.

Page 112: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-112 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Denegar Operaciones DMLDenegar Operaciones DML

• Agregando la opción WITH READ ONLY en la Agregando la opción WITH READ ONLY en la definición de la vista, se asegura que no definición de la vista, se asegura que no ocurran operaciones DML.ocurran operaciones DML.

• Si se intenta realizar una operación DML sobre Si se intenta realizar una operación DML sobre cualquier fila en la vista, aparecerá el error cualquier fila en la vista, aparecerá el error ORA-01732 del Oracle8 Server.ORA-01732 del Oracle8 Server.

SQL> CREATE OR REPLACE VIEW empvu10 2 (employee_number, employee_name, job_title) 3 AS SELECT empno, ename, job 4 FROM emp 5 WHERE deptno = 10 6 WITH READ ONLY;View created.View created.

Page 113: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-113 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Eliminación de una VistaEliminación de una Vista

• Al Borrar una vista no perderá los datos, porque la vista está basada en tablas subyacentes de la B.D.

• Al Borrar una vista no perderá los datos, porque la vista está basada en tablas subyacentes de la B.D.

SQL> DROP VIEW empvu10; View dropped.View dropped.

DROP VIEW view; DROP VIEW view;

Page 114: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-114 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

ResumenResumen• Una vista se deriva de los datos de otras tablas u Una vista se deriva de los datos de otras tablas u

otras vistas.otras vistas.

• Una vista es como una ventana sobre los datos Una vista es como una ventana sobre los datos subyacentes.subyacentes.

• Una vista provee las siguientes ventajas:Una vista provee las siguientes ventajas:

– Restricción del acceso a los datos.Restricción del acceso a los datos.

– Simplificación de las consultas.Simplificación de las consultas.

– Independencia de los datos.Independencia de los datos.

– Permite varias visiones de los mismos datos.Permite varias visiones de los mismos datos.

– Puede ser eliminada sin borrar los datos Puede ser eliminada sin borrar los datos subyacentes.subyacentes.

Page 115: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Otros Objetos de la Base de Datos

Otros Objetos de la Base de Datos

Page 116: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-116 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

ObjetivosObjetivos

Al completar esta lección, debería ser Al completar esta lección, debería ser capaz de hacer lo siguiente: capaz de hacer lo siguiente:

• Describir otros objetos de la B.D. y sus posibilidades.

• Crear, mantener y usar secuencias

• Crear y mantener índices

• Crear sinónimos públicos y privados

Al completar esta lección, debería ser Al completar esta lección, debería ser capaz de hacer lo siguiente: capaz de hacer lo siguiente:

• Describir otros objetos de la B.D. y sus posibilidades.

• Crear, mantener y usar secuencias

• Crear y mantener índices

• Crear sinónimos públicos y privados

Page 117: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-117 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Objetos de la Base de DatosObjetos de la Base de Datos

Objecto Descripción

Tabla Unidad básica de almacenamiento;

compuesta de registros y columnas.

Vista Lógicamente representa un subconjunto de

una o más tablas.

Secuencia Genera valores para claves primarias.

Indice Mejoran el rendimiento de algunas

consultas

Sinónimo Da nombres alternativos a los objetos.

Page 118: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-118 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

¿Qué Es una Secuencia?¿Qué Es una Secuencia?

• Genera números únicos de forma Genera números únicos de forma automática.automática.

• Es un objeto que se puede compartir.Es un objeto que se puede compartir.

• Se usa típicamente para crear valores Se usa típicamente para crear valores de una clave primaria.de una clave primaria.

• Sustituye código de aplicación.Sustituye código de aplicación.

• Mejora la eficiencia en cuanto a la Mejora la eficiencia en cuanto a la rapidez de acceso cuando los valores rapidez de acceso cuando los valores están en el caché de memoria.están en el caché de memoria.

Page 119: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-119 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

La Sentencia CREATE SEQUENCE

La Sentencia CREATE SEQUENCE

Defina una secuencia para generar Defina una secuencia para generar números secuenciales automáticamente. números secuenciales automáticamente. Defina una secuencia para generar Defina una secuencia para generar números secuenciales automáticamente. números secuenciales automáticamente.

CREATE SEQUENCE sequence[INCREMENT BY n][START WITH n][{MAXVALUE n | NOMAXVALUE}][{MINVALUE n | NOMINVALUE}][{CYCLE | NOCYCLE}][{CACHE n | NOCACHE}];

CREATE SEQUENCE sequence[INCREMENT BY n][START WITH n][{MAXVALUE n | NOMAXVALUE}][{MINVALUE n | NOMINVALUE}][{CYCLE | NOCYCLE}][{CACHE n | NOCACHE}];

Page 120: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-120 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Creación de una SecuenciaCreación de una Secuencia

• Crear una secuencia DEPT_DEPTNO para ser utilizada por la PK de la tabla DEPT.

• No utilizar la opción CYCLE.

• Crear una secuencia DEPT_DEPTNO para ser utilizada por la PK de la tabla DEPT.

• No utilizar la opción CYCLE.

SQL> CREATE SEQUENCE dept_deptno 2 INCREMENT BY 1 3 START WITH 91 4 MAXVALUE 100 5 NOCACHE 6 NOCYCLE;Sequence created.Sequence created.

SQL> CREATE SEQUENCE dept_deptno 2 INCREMENT BY 1 3 START WITH 91 4 MAXVALUE 100 5 NOCACHE 6 NOCYCLE;Sequence created.Sequence created.

Page 121: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-121 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Verificación de SecuenciasVerificación de Secuencias

• Verificar los valores de una secuencia Verificar los valores de una secuencia en la tabla USER_SEQUENCES del en la tabla USER_SEQUENCES del diccionario de datos.diccionario de datos.

• La columna LAST_NUMBER muestra el La columna LAST_NUMBER muestra el próximo número disponible de la próximo número disponible de la secuencia.secuencia.

SQL> SELECT sequence_name, min_value, max_value, 2 increment_by, last_number 3 FROM user_sequences;

SQL> SELECT sequence_name, min_value, max_value, 2 increment_by, last_number 3 FROM user_sequences;

Page 122: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-122 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Las pseudocolumnasNEXTVAL y CURRVALLas pseudocolumnasNEXTVAL y CURRVAL

• NEXTVAL retorna el próximo valor disponible NEXTVAL retorna el próximo valor disponible de la secuencia.de la secuencia.

– Devuelve un valor único cada vez que es Devuelve un valor único cada vez que es referenciada, aún por diferentes usuarios.referenciada, aún por diferentes usuarios.

• CURRVAL obtiene el actual valor de la CURRVAL obtiene el actual valor de la secuencia.secuencia.

– NEXTVAL debe ser emitido para la NEXTVAL debe ser emitido para la secuencia, antes que CURRVAL pueda secuencia, antes que CURRVAL pueda referenciarse.referenciarse.

• Seguir las reglas para su uso.Seguir las reglas para su uso.

Page 123: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-124 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso de una SecuenciaUso de una Secuencia

• Insert a new department named “MARKETING” in San Diego.

• View the current value for the DEPT_DEPTNO sequence.

• Insert a new department named “MARKETING” in San Diego.

• View the current value for the DEPT_DEPTNO sequence.

SQL> INSERT INTO dept(deptno, dname, loc) 2 VALUES (dept_deptno.NEXTVAL, 3 'MARKETING', 'SAN DIEGO');1 row created.1 row created.

SQL> INSERT INTO dept(deptno, dname, loc) 2 VALUES (dept_deptno.NEXTVAL, 3 'MARKETING', 'SAN DIEGO');1 row created.1 row created.

SQL> SELECT dept_deptno.CURRVAL 2 FROM SYS.dual;

SQL> SELECT dept_deptno.CURRVAL 2 FROM SYS.dual;

Page 124: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-125 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso de una SecuenciaUso de una Secuencia

• Mantener los valores de secuencia en memoria Mantener los valores de secuencia en memoria permite un acceso más rápido a los mismos.permite un acceso más rápido a los mismos.

• Se puede producir una brecha o Se puede producir una brecha o gap gap en los en los valores de una secuencia cuando:valores de una secuencia cuando:

– Se produce un rollback.Se produce un rollback.

– Se cae el sistema.Se cae el sistema.

– Una secuencia es usada en otra tabla.Una secuencia es usada en otra tabla.

• Obtener el próximo número disponible en una Obtener el próximo número disponible en una secuencia, si fue creada con NOCACHE, secuencia, si fue creada con NOCACHE, consultando la tabla USER_SEQUENCES.consultando la tabla USER_SEQUENCES.

Page 125: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-126 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Modificación de una SecuenciaModificación de una Secuencia

Cambiar los valores de incremento, valor Cambiar los valores de incremento, valor máximo, valor mínimo y las opciones de máximo, valor mínimo y las opciones de caché y ciclo.caché y ciclo.

SQL> ALTER SEQUENCE dept_deptno 2 INCREMENT BY 1 3 MAXVALUE 999999 4 NOCACHE 5 NOCYCLE;Sequence altered.Sequence altered.

SQL> ALTER SEQUENCE dept_deptno 2 INCREMENT BY 1 3 MAXVALUE 999999 4 NOCACHE 5 NOCYCLE;Sequence altered.Sequence altered.

Page 126: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-127 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Guía para Modificar una Secuencia

Guía para Modificar una Secuencia

• Se debe ser el propietario de la Se debe ser el propietario de la secuencia, o tener el privilegio ALTER secuencia, o tener el privilegio ALTER para la misma.para la misma.

• Son afectados solamente los valores Son afectados solamente los valores futuros de la secuencia.futuros de la secuencia.

• Algunas validaciones son realizadas.Algunas validaciones son realizadas.

• Si se quiere recomenzar la secuencia Si se quiere recomenzar la secuencia con un número diferente, la misma debe con un número diferente, la misma debe ser eliminada y creada nuevamente.ser eliminada y creada nuevamente.

Page 127: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-128 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Eliminación de una SecuenciaEliminación de una Secuencia

• Eliminar una secuencia del diccionario Eliminar una secuencia del diccionario de datos usando el comando DROP de datos usando el comando DROP SEQUENCE.SEQUENCE.

• Una vez eliminada, la secuencia ya no Una vez eliminada, la secuencia ya no puede ser referenciada.puede ser referenciada.

SQL> DROP SEQUENCE dept_deptno;Sequence dropped.Sequence dropped.

SQL> DROP SEQUENCE dept_deptno;Sequence dropped.Sequence dropped.

Page 128: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-129 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

¿Qué es un Indice?¿Qué es un Indice?

• Un objeto de la base de datos.Un objeto de la base de datos.

• Usado por el Servidor Oracle8 para Usado por el Servidor Oracle8 para acelerar la recuperación de filas mediante acelerar la recuperación de filas mediante el uso de punteros.el uso de punteros.

• Reduce la E/S de disco usando un camino Reduce la E/S de disco usando un camino de acceso rápido como método para la de acceso rápido como método para la ubicación de los datos.ubicación de los datos.

• Independiente de la tabla que indexa.Independiente de la tabla que indexa.

• Son usados y mantenidos Son usados y mantenidos automáticamente por el Servidor Oracle8.automáticamente por el Servidor Oracle8.

Page 129: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-130 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

¿Cómo se Crean los Indices?¿Cómo se Crean los Indices?

• Automáticamente.Automáticamente.

Un índice único es creado Un índice único es creado automáticamente cuando se define una automáticamente cuando se define una restricción PRIMARY KEY o UNIQUE en restricción PRIMARY KEY o UNIQUE en la definición de una tabla.la definición de una tabla.

• Manualmente.Manualmente.

Los usuarios pueden crear índices no Los usuarios pueden crear índices no únicos sobre columnas para acelerar el únicos sobre columnas para acelerar el tiempo de acceso a las filas.tiempo de acceso a las filas.

Page 130: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-131 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Creación de un IndiceCreación de un Indice

• Mejoran la velocidad de acceso a una consulta; por ej. para la columna ENAME (apellido) de la tabla EMP

• Mejoran la velocidad de acceso a una consulta; por ej. para la columna ENAME (apellido) de la tabla EMP

SQL> CREATE INDEX emp_ename_idx 2 ON emp(ename);Index created.Index created.

SQL> CREATE INDEX emp_ename_idx 2 ON emp(ename);Index created.Index created.

CREATE INDEX indexON table (column[, column]...);

CREATE INDEX indexON table (column[, column]...);

• Crear índices sobre una o más columnas• Crear índices sobre una o más columnas

Page 131: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-132 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Guía para la Creación de un IndiceGuía para la Creación de un Indice

• La columna es usada frecuentemente en una La columna es usada frecuentemente en una cláusula WHERE o en una condición de cláusula WHERE o en una condición de joinjoin..

• La columna tiene un rango muy amplio de valores.La columna tiene un rango muy amplio de valores.

• La columna contiene un gran número de valores La columna contiene un gran número de valores nulos.nulos.

• Dos o más columnas son usadas juntas con Dos o más columnas son usadas juntas con frecuencia en una cláusula WHERE o en una frecuencia en una cláusula WHERE o en una condición de condición de joinjoin..

• La tabla es grande y se espera que la mayoría de La tabla es grande y se espera que la mayoría de las consultas recuperen menos del 2 al 4 % de las las consultas recuperen menos del 2 al 4 % de las filas.filas.

• Definir más índices no siempre mejora la rapidez Definir más índices no siempre mejora la rapidez de las consultas.de las consultas.

Page 132: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-133 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Guía para la Creación de un Indice

Guía para la Creación de un Indice

No crear un índice si:No crear un índice si:

• La tabla es pequeña.La tabla es pequeña.

• Las columnas no son usadas con Las columnas no son usadas con frecuencia en condiciones de las frecuencia en condiciones de las consultas.consultas.

• Se espera que la mayoría de las Se espera que la mayoría de las consultas recuperen más que el 2 al 4% consultas recuperen más que el 2 al 4% de las filas. de las filas.

• La tabla es actualizada frecuentemente.La tabla es actualizada frecuentemente.

Page 133: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-134 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Verificación de IndicesVerificación de Indices• La vista USER_INDEXES del La vista USER_INDEXES del

diccionario de datos contiene el diccionario de datos contiene el nombre de un índice y su condición de nombre de un índice y su condición de unicidad.unicidad.

• La vista USER_IND_COLUMNS La vista USER_IND_COLUMNS contiene el nombre del índice, nombre contiene el nombre del índice, nombre de la tabla, y nombre de la columna.de la tabla, y nombre de la columna.

SQL> SELECT ic.index_name, ic.column_name, 2 ic.column_position col_pos,ix.uniqueness 3 FROM user_indexes ix, user_ind_columns ic 4 WHERE ic.index_name = ix.index_name 5 AND ic.table_name = 'EMP';

Page 134: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-135 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Eliminación de un IndiceEliminación de un Indice

• Elimina un índice del diccionario de datos.

• Elimina el índice EMP_ENAME_IDX del diccionario de datos.

• Para borrar un índice, tiene que ser propietario del mismo o tener el privilegio DROP ANY INDEX.

• Elimina un índice del diccionario de datos.

• Elimina el índice EMP_ENAME_IDX del diccionario de datos.

• Para borrar un índice, tiene que ser propietario del mismo o tener el privilegio DROP ANY INDEX.

SQL> DROP INDEX emp_ename_idx;Index dropped.Index dropped.

SQL> DROP INDEX emp_ename_idx;Index dropped.Index dropped.

SQL> DROP INDEX index;SQL> DROP INDEX index;

Page 135: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-136 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

SinónimosSinónimos

• Simplificar el acceso a los objetos Simplificar el acceso a los objetos creando un sinónimo (otro nombre para creando un sinónimo (otro nombre para un objeto).un objeto).

• Hacer referencia a una tabla propia o de Hacer referencia a una tabla propia o de otro usuario.otro usuario.

• Permite acortar la longitud de los Permite acortar la longitud de los nombres de los objetos.nombres de los objetos.

CREATE [PUBLIC] SYNONYM synonymFOR object;

CREATE [PUBLIC] SYNONYM synonymFOR object;

Page 136: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-137 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Creación y Eliminación de SinónimosCreación y Eliminación de Sinónimos

SQL> CREATE SYNONYM d_sum 2 FOR dept_sum_vu;Synonym Created.Synonym Created.

SQL> CREATE SYNONYM d_sum 2 FOR dept_sum_vu;Synonym Created.Synonym Created.

SQL> DROP SYNONYM d_sum;Synonym dropped.Synonym dropped.

SQL> DROP SYNONYM d_sum;Synonym dropped.Synonym dropped.

• Crear un nombre más corto para la vista DEPT_SUM_VU

• Crear un nombre más corto para la vista DEPT_SUM_VU

• Borrar un sinónimo• Borrar un sinónimo

Page 137: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

1-138 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

ResumenResumen

• Use secuencias para generar números secuenciales de forma automática.

• La información sobre secuencias se almacena en la tabla USER_SEQUENCES.

• Cree índices para mejorar la velocidad en la recuperación de datos, en consultas.

• La información sobre índices se almacena en la tabla USER_INDEXES.

• Use sinónimos para ofrecer nombres alternativos para objetos.

• Use secuencias para generar números secuenciales de forma automática.

• La información sobre secuencias se almacena en la tabla USER_SEQUENCES.

• Cree índices para mejorar la velocidad en la recuperación de datos, en consultas.

• La información sobre índices se almacena en la tabla USER_INDEXES.

• Use sinónimos para ofrecer nombres alternativos para objetos.