Apuntes SQL

80
CCNP

description

Mis apuntes de SQL.

Transcript of Apuntes SQL

CCNP

1 ParteROUTING

Estructura del Curso81. Lenguaje SQL ( 30 - 36 horas)82. Lenguaje PLSQL ( 30 - 36 horas)83. Administracin Oracle 11G ( 50 horas)8Variables de Entorno9Instalacin de la Base de Datos10SQL Developed11T 01 - Introduccin13Historia13Estndares SQL13Funcionamiento del Lenguaje SQL13Componentes del Lenguaje SQL13DDL14DCL14DML14TC15Objetos de un Esquema15Reglas para Nombrar los Objetos de la Base de Datos15Objetos de un Esquema15Objetos de un Esquema15Referenciar Objetos de la Base de Datos15Tipos de Datos Oracle16Cadenas de Caracteres16Numricos16Fechas17Lobs (Objetos Grandes)17Otros17Tema 02 - DDL18Comandos DDL18Tipos de Tablas18Crear Tablas19Tipos de Datos de las Columnas20Integridad de los Datos20Reglas de Negocio20Integridad de Entidades21Integridad Referencial22Sintaxis y Cdigo de las Restricciones22Modificar Columnas22Comprobacin Aplazada de Restricciones23Modificacin de Tablas26Alter Table26Drop Table26ndices27Vistas27Secuencias28Sinnimos30Comandos para Modificar Objetos30Rename30Truncate30Diccionario de Vistas31Tema 03 - DML32Select32Operadores SQL33Operador de Concatenacin33Operador de Comparacin33Condiciones Lgicas33Operador de Pertenencia34Operador de Rango de Valores34Operador Like34Operador Null35Operador Set o de Conjuntos35Operador Exists35Funciones Programadas36Funciones de Fila Simple36Funciones Numricas36Cadena de Caracteres37Funciones de Fecha y Hora38Funciones de Conversin39Mscaras de Formato40Otras Funciones40Variables de Entorno41Funciones de Grupo42Combinacin de Tablas: Join42Uniones Naturales43Clusula Using43Clusula On43Uniones Self-Join44Uniones Externas: Outer Join44Uniones Cruzadas45La Expresin Case45Subconsultas46Sentencia Insert47Sentencia Insert Multitabla48Sentencia Update50Sentencia Delete50Sentencia Merge50Sentencias Transaccionales52Sentencia Commit52Sentencia Rollback53Sentencia Savepoint53Ejercicios5501. Creacin de Tablas5502. Create Table5603. Hospital - Consultas - Hoja 46104. Hospital - Consultas - Hoja 56905. Hospital - Consultas - Hoja 67006. Hospital - Consultas - Hoja 77207. Hospital - Consultas - Hoja 87508. Hospital - Consultas - Hoja 978

Tema 1 - XXX

1. XXXXXXXXXX1.1.DDL (Data Definition Languaje) Crear estructura.1.2.DML (Data Manipulation Languaje) Manipular datos y hacer consultas.1.3.DCL (Data Control Languaje) Dar y quitar permisos.1.4.TC (Transaction Control) Control de transacciones.

2. Lenguaje PLSQL ( 30 - 36 horas)Es el lenguaje que se utiliza dentro de la base de datos de la aplicacin.Est basado en Pascal, es decir, es un lenguaje estructurado al que aadimos operaciones para utilizar en la base de datos.En este punto daremos:2.1. Tipos de Datos.2.2.Bloques Annimos.2.3.Estructura de Control.2.4.Colecciones y Registros.2.5.Cursores.2.6.Excepciones.2.7.Procedimientos.2.8.Funciones.2.9.Paquetes.2.10.Disparadores.2.11.Cursores Variables.2.12.SQL Dinmico.

3. Administracin Oracle 11G ( 50 horas)Son los mismos temas que en el libro.Los temas ms importantes de este punto son: Tema 1 Exploring the Oracle Database Architecture. Tema 10 Managing undo data.

Variables de Entorno

Los nombres de las Variables de Entorno van siempre con todas las letras en maysculas.1. Oracle_Base: Es la ruta de partida para la base de datos.Cuando instalas el programa, esta variable se corresponde con la Ubicacin del Directorio Base de Oracle.2. Oracle_Home:Es un subdirectorio de Oracle_Base que contiene el software de Oracle propiamente dicho, para una versin dada.Cuando instalas el programa, esta variable se corresponde con la Ubicacin del Directorio Raz de Oracle.3. Oracle_Sid:Es el nombre de la base de datos a la que queremos acceder.No sale en la primera pantalla de instalacin.Los nombres de los directorios y del Sid en Windows da igual que vayan en mayscula o en minscula, pero si usamos Unix o Linux deben ir siempre en maysculas.

Instalacin de la Base de Datos

Lo primero que se debe hacer es crear un directorio para instalar el programa.Luego ponemos la ruta del directorio en Ubicacin del Directorio Base de Oracle y comprobamos que esta misma ruta forma parte (es el principio de la ruta) de Ubicacin del Directorio Raz de Oracle.Ahora de damos el nombre a la base de datos y la contrasea. Es muy importante apuntarla y no perderla ya que si se pierde u olvida ya no se podr recuperar.Nota

En mi instalacin de mi mquina virtual: Nombre de la Base de Datos Global: orcl. Contrasea de la Base de Datos: dentro123.

Cuando ha terminado de instalarse la base de datos, y antes de cerrar el instalador, entramos en Gestin de Contraseas para desbloquear (slo hay que pinchar sobre el tic para deseleccionarlo) las siguientes cuentas: HP, SH y Scott. Como contrasea de estos usuarios (hay que ponerla en los recuadros contiguos al recuadro del tic) ponemos el usuario en minsculas, excepto para el usuario Scott, ya que su contrasea es tiger (todo en minsculas) desde la creacin de Oracle.Por lo tanto ahora tenemos las siguientes cuentas:1. Sys: dentro1232. System:dentro1233. hr:hrCorresponde a Recursos Humanos.4. sh: shCorresponde a Ventas.5. scott:tigerSlo tiene 4 tablas: empleados, departamentos, bonos y trabajos.Esta cuenta es bastante intil pero se mantiene por causas sentimentales.

SQL Developed

Trabajaremos con SQL Developed. Este programa se ha instalado con la Base de Datos de Oracle, en el subdirectorio Desarrollo de Aplicaciones.Nota

Si al abrir SQL Developed da el error de que no encuentra el archivo MSVCR100.DLL debemos:Copiar el archivo desde Java\Jdk1.7.0_03\Bin al directorio Windows\System32.Cambiar las variables de entorno:A. Agregar classpath con el siguiente valor: c:\ProgramFiles\Java\Jdk1.7.0.B. Agregar java_home con el siguiente valor: c:\ProgramFiles\Java\Jdk1.7.0.C. Agregar path con el siguiente valor: ;c:\ProgramFiles\Java\Jdk1.7.0\Bin.

La primera vez que abrimos el programa sale la pantalla de abrir determinados archivos con este programa. No seleccionamos ninguno.Lo primero que haremos ser crear una conexin con nuestros usuarios. En nuestro caso, tendremos 4 conexiones, una por cada usuario (sys, hr, sh, Scott). Para ello clicamos en nueva conexin y en la ventana que sale rellenamos los campos Connection Name (nombre para identificarlo), User Name (nombre de usuario), Password (contrasea), Role (rol, papel), Hostname (es la forma de nombrar la mquina. Puede ser la IP, el nombre de la mquina o localhost), Puerto (siempre es el mismo, 1521) y, por ltimo, el Sid (nombre de la Base de Datos).Nota

En nuestro caso, los datos de nuestras conexiones sern:

1. Primera Conexin.

A. Connection Name conn.dba.B. User Name sys.C. Role sysdba[footnoteRef:1]. [1: Para todos los usuarios el rol es default, excepto para el usuario sys, cuyo rol es sysdba.]

D. Hostname localhost.E. Password dentro123.F. Port 1521.G. Sid orcl.

2. Segunda Conexin.

A. Connection Name conn.hr.B. User Name hr.C. Role default.D. Hostname localhost.E. Password hr.F. Port 1521.G. Sid orcl.

3. Tercera Conexin.

A. Connection Name conn.sh.B. User Name sys.C. Role default.D. Hostname localhost.E. Password sh.F. Port 1521.G. Sid orcl.

4. Cuarta Conexin.

A. Connection Name conn.scott.B. User Name scott.C. Role default.D. Hostname localhost.E. Password tiger.F. Port 1521.G. Sid orcl.

Tras crear el usuario pasamos el test para comprobar que funciona.Si no funciona:1. Mi PC Administrar Servicios y Aplicaciones.Comprobamos que todos los servicios de Oracle estn iniciados.2. Abrir CMD y escribir Lsnrctl Status.Si sigue sin funcionar comprobamos que el usuario est desbloqueado y que la contrasea es la correcta. Para ello abrimos SQL Plus y seguimos los siguientes pasos:1. Entramos con el usuario y la contrasea de administrador (system dentro123).2. Probamos si el usuario ya existe con el comando connect hr/hr. Si existe, la base de datos se conectar. Si no existe, o la contrasea es errnea, no se podr conectar y devolver un error.3. Si nos devuelve un error el siguiente comando puede crear un usuario con su correspondiente contrasea o modificar una contrasea de un usuario determinado: alter user nombre_de_usuario identified by values nueva_contrasea.4. Comprobamos que funciona intentando volver a conectarnos con el comando connect hr/hr.

T 01 - Introduccin

HistoriaSQL (Structured query languaje). Es un lenguaje utilizado para el acceso y la manipulacin de datos en una base de datos.En 1974 define el lenguaje Donald Chamberlin (IBM), llamndolo SEQUEL (Structured English QUEry Languaje).En 1977 se hace una revisin del lenguaje, y por motivos legales se cambia el nombre a SQL.En 1979 adquiere el lenguaje la compaa Relational Software INC. (posteriormente Oracle) y lo incorpora a su Base de Datos.Entre 1980 y 1989 los principales distribuidores de Bases de datos relacionales adoptan SQL como lenguaje, con lo que se establece como estndar industrial.

Estndares SQLEl estndar SQL est sujeto a los estndar ANSI e ISO. Fue publicado en 1999, con el nombre SQL:99. ANSI X3.135-1999, Database language SQL. ISO/IEC 9075:1999, Database language SQL.

Funcionamiento del Lenguaje SQLEl SQL permite: Almacenar informacin en tablas. Seleccionar la informacin de la base de datos. Realizar cambios en la informacin y estructura de los datos. Combinar y calcular datos para conseguir la informacin necesaria. Garantizar la integridad y consistencia de los datos.

Componentes del Lenguaje SQLLos datos se almacenan en tablas, que se relacionan para poder acceder a la informacin de manera eficiente. Condiciones que cumplen: BD Varias tablas. Esquema Tablas de nombre nico. Tabla Nmero fijo de campos, con distinto nombre y registros nicos. Tabla y Campo Orden no determinado. Campo Conjunto de valores (Tipo de datos). Row Id Columna de gestin interna. En principio es una columna oculta.DDLEl Data Definition Languaje (DDL) es el que se encarga de la modificacin de la estructura de los objetos de la Base de Datos. Incluye rdenes para modificar, borrar o definir las tablas en las que se almacenan los datos de la Base de Datos.1. Create Este comando crea un objeto dentro de la Base de Datos.2. Alter Modifica la estructura de un objeto.3. Drop Elimina un objeto de la Base de Datos. Se puede combinar con la sentencia Alter.4. Replace Reemplaza objetos en la Base de Datos.5. Rename Renombra un objeto dentro de la Base de Datos.6. Truncate Este comando trunca (borra) todo el contenido de una tabla.La ventaja sobre el comando Drop es que si se quiere borrar todo el contenido de una tabla es mucho ms rpido, especialmente si la tabla es muy grande.La desventaja es que Truncate slo sirve cuando se quiere eliminar absolutamente todos los registros, ya que no se permite la clusula Where.Este comando es una DDL ya que el comando Truncate borra la tabla y la vuelve a crear sin ejecutar ninguna transaccin.

DCL1. Grant Dar permisos.2. Revoke Quitar permisos.

DMLEs un lenguaje proporcionado por el sistema de gestin de la Base de Datos que permite a los usuarios llevar a cabo las tareas de consulta o manipulacin de los datos, organizados por el modelo de datos adecuado.1. Select Selecciona datos de una Base de Datos. Este comando produce una tabla (temporal). El esquema de esta tabla temporal debe coincidir con el esquema de la tabla donde los datos van a ser insertados.2. Update Esta sentencia es utilizada para modificar los valores de un conjunto de registros existentes en una tabla. Actualizar datos.3. Insert Esta sentencia agrega uno o ms registros a una (y slo una) tabla en una Base de Datos relacional. Las cantidades de columnas y valores deben ser iguales. Si una columna no se especifica, le ser asignado el valor por omisin.Los valores especificados (o implcitos) por esta sentencia debern satisfacer todas las restricciones aplicables.Si ocurre un error de sintaxis o si alguna de las restricciones es violada, no se agrega la fila y se devuelve un error.4. Delete Esta sentencia borra uno o ms registros existentes en una tabla.5. Merge Esta sentencia permite, dependiendo de una condicin lgica, actualizar registros cuando la condicin se cumple, o insertar registros cuando dicha condicin no se cumple.6. Lock Table Esta sentencia bloquea toda la tabla.

TC1. Commit Guarda los cambios de la transaccin en curso.2. Rollback Deshace los cambios de la transaccin en curso.3. Savepoint Sirve para marcar un punto de referencia en la transaccin para hacer un Rollback parcial. Es el ltimo punto salvado.

Objetos de un EsquemaLos que ms nos interesan son las Tablas, Sinnimos, Vistas, Secuencias e ndices.Otros que veremos sern Bloques Almacenados, Paquetes y Disparadores.

Reglas para Nombrar los Objetos de la Base de Datos1. Se puede entrecomillar (.).2. Se almacena siempre en maysculas.3. Longitud mxima: 30 caracteres.4. No puede ser una palabra reservada.5. Nombre nico en un mismo esquema.6. Nombre de columna debe ser nico en una tabla.

Objetos de un Esquema1.

152. Clsters 3. DB Links 4. Tablas 5. Sinnimos 6. Bloques Almacenados 7. Paquetes8. Dimensiones 9. Clases Java 10. Logs de Vistas11. Objetos 12. Restricciones 13. Disparadores 14. Vistas 15. Secuencias 16. Libreras 17. ndices 18. Vistas Materializadas 19. Recursos Java 20. Objetos Tabla 21. Objetos Vista

Objetos de un Esquema22.

151. Contextos2. Ficheros parmetros3. Roles4. Tablespaces5. Directorios6. Perfiles7. Segmentos Undo8. Usuarios

Referenciar Objetos de la Base de Datos[Esquema]. Nb_Objeto.[ Parte_Objeto][@ Enlace_BD]Todo lo que va entre corchetes es opcional. En donde Esquema es el propietario del objeto, el usuario. Nb_Objeto es el nombre del objeto. Parte_Objeto se refiere al objeto si se divide en partes. Enlace_BD es el nombre del enlace de la Base de Datos que contiene el objeto.El orden de preferencia para hacer las referencias es el siguiente:

141. Tablas pertenecientes al usuario2. Tablas pertenecientes a otro usuario3. Vistas pertenecientes al usuario4. Sinnimo privado perteneciente al usuario5. Sinnimo pblico

16

Tipos de Datos Oracle1. 2. Cadenas de Caracteres3. Numricos4. Fechas5. LOBs6. Otros

Cadenas de CaracteresSon sensibles a las maysculas y las minsculas. Se usan entre comillas simple ` .1. Char Cadena de caracteres de longitud fija.Hay que especificar el nmero de caracteres mximos entre parntesis. El nmero mximo de caracteres es de 2.000.Ya no se usa, pero se mantiene por compatibilidad con versiones antiguas.2. Nchar Cadena de caracteres de longitud variable. El nmero mximo de caracteres es de 4.000.3. Varchar2 Datos para cuando trabajamos con caracteres unicode.Varchar2 se corresponde con Char.Por cada carcter se almacena 1 bit ms 2 o 3 bits que corresponden al lenguaje del caracter.4. Nvarchar2 Datos para cuando trabajamos con caracteres unicode.Corresponde a Nchar. Por cada carcter se almacena 1 bit ms 2 o 3 bits que corresponden al lenguaje del caracter.5. Long Cadena de caracteres de longitud variable. Hasta 2 gigas de almacenamiento de caracteres..

Numricos1. Number (prec,esc) / Numeric (prec,esc) Ambos comandos son iguales. Se utilizan para nmeros con decimales.El nmero mximo de caracteres es 38.Siempre hay que poner: Prec La precisin es el total de nmeros. Esc La escala hace referencia al nmero de decimales.Por ejemplo, el mximo nmero de Number (4,2) sera 99,99. Es decir, 4 nmeros de los cuales 2 seran decimales.Este es el tipo de dato numrico ms utilizado.Podemos poner tambin number (4), con lo que diramos que no lleva ningn decimal.2. Dec / Decimal Corresponde a nmeros decimales que usan siempre el nmero mximo de caracteres, es decir, 38. Todos los caracteres no utilizados se rellenan con ceros.3. Float Guarda nmeros con comas flotantes. Las operaciones son ms rpidas porque las hace en sistema binario (con 0 y 1) y no en el de base 10.Almacena los datos en 32 bits.4. Double Precision Es lo mismo que Float pero almacena los datos en 64 bits.5. Real Se usa para nmeros reales. Los nmeros reales son aquellos que tienen una parte real y otra imaginaria, por ejemplo, 2+e.6. Int / Integer No hay ninguna diferencia entre ellos. Se usa para nmeros enteros hasta 38 caracteres (dgitos).7. Smallint Para nmeros enteros hasta 65.536. Todo lo dems es igual a Integer.8. Binary_Double Casi no se usa. Es como Number, pero ms ptimo, ms rpido.9. Binary_float Casi no se usa. Es como Float, pero ms ptimo, ms rpido.

FechasInternamente, el calendario de Oracle comienza el 1 de enero de 1.411 a.C.Oracle siempre almacena las fechas como dd / mm / aa, as que si queremos modificar este formato de fecha (por ejemplo, para poner el ao con 4 dgitos), debemos especificarlo.Hay 6 comandos distintos para modificar las fechas:1. date Almacena slo la fecha.2. TimeStamp (precisin) Almacena fecha y hora, con una precisin de 10 decimales de segundo mximo.La precisin se establece entre los parntesis.Si no establecemos la precisin, automticamente se guardarn 6 decimales.3. TimeStamp (precisin) with Time Zone Adems aadimos la zona horaria de la Base de Datos.4. TimeStamp (precisin) with Local Time Zone Aadimos la zona horaria local de la Base de Datos, es decir, la zona horaria del equipo.5. Internal Year (precisin) to Month Almacena el intervalo en aos y meses (3 aos y 2 meses). 6. Internal Day (prec_dias) to Second (prec_seg) Almacena el intervalo en das, horas, minutos y segundos (5d, 4h, 20 min y 56 seg.).

Lobs (Objetos Grandes)Almacena datos exactamente igual que Varchar2, pero son datos mucho ms grandes.Su tratamiento no es directo.Son los que se utilizan, por ejemplo, para almacenar fotos.1. Clob Son cadenas de caracteres, iguales a Nvarchar2, pero que almacena cada dato un mximo de 128 Teras.2. Nclob Es igual que Clob, pero para lenguaje Unicode. Por cada carcter se guarda un bit por el carcter y 2 0 3 por el lenguaje.3. Blob Es igual que Clob, pero almacena los datos en lenguaje binario, en decir, en = y 1. Este es el comando que se utiliza para las fotos.4. Bfile Guarda un puntero junto al archivo. Es el nico comando que no almacena los datos en la Base de Datos. Tiene que estar siempre en una carpeta de Oracle, por lo que normalmente estar en el servidor.

Otros1. Raw (bytes) Almacena una cadena de caracteres de longitud variable, con un tamao mximo de 255 bytes.2. Long Raw Es igual que Raw, pero su tamao mximo es de 2 gigas.3. Rowid Es el nmero que Oracle pone automticamente para que no se repitan datos.4. Urowid Es el nmero que Oracle pone automticamente para distinguir vistas.

Tema 02 - DDL

El Lenguaje de Definicin de Datos (DDL) permite la creacin, modificacin, renombrado y borrado de objetos dentro de la Base de Datos. Las DDL hacen referencia a la estructura. Slo tiene privilegios para usarlos el Administrador de la Base de Datos. Todas las DDL llevan implcitas una validacin o COMMIT.

Comandos DDL1. Create Para crear objetos.2. Alter Para modificar objetos a nivel de estructura.3. Drop Para borrar objetos.4. Rename Para renombrar objetos.5. Truncate Para vaciar objetos, es decir, borra todas las filas. Lleva Commit incluido.

Tipos de TablasLos atributos son los datos que diferencian un objeto de otro. Se pueden usar para determinar la apariencia, el estado y otras cualidades de objetos que pertenezcan a esa clase.1. Relacionales o Apiladas Tablas normales. Si usamos este tipo de tablas, no hace falta ponerlo.2. Temporales Almacenan datos temporales. Los datos se borrarn al hacer Commit o al cerrar sesin.3. Indexadas o Tipo ndice Los datos estn ordenados. El orden es por una columna.La columna se ordena por Primary Key, es decir, por orden de nmero, de letra (empezando por la A) o por fecha (de la ms antigua a la ms nueva). Estas columnas no pueden repetirse.4. Externas Los datos no se almacenan en la Base de Datos. Se almacenan en ficheros externos, por ejemplo, en un fichero de texto. Al estar los datos en un archivo externo la conexin ser ms lenta.5. Tablas en Clster Son tablas que comparten el almacenamiento para ahorrar espacio.Se utiliza sobre todo cuando tenemos el almacenamiento en clster.6. Tablas Particionadas Se utiliza para tablas de gran tamao.Lo que hace es particionar la tabla en otras ms pequeas para optimizar el sistema, para que vaya ms rpido. Se recomienda hacer particiones a partir de 2 gigas.A. Particin por Rango Separa los datos en rangos.Por ejemplo, dividir la tabla en rangos de aos, es decir, que particionamos la tabla en 3 rangos, uno que corresponda a los datos de 2010, otra para los datos de 2011 y otra para los de 2012.Al insertar nuevos datos estos se guardarn segn su rango (ao) en una particin u otra.B. Particin por Funcin Hash Las funciones hash tienen un acceso muy rpido.C. Particin por Lista Se hace la particin por una lista de valores. Por ejemplo, por clientes.D. Particiones Compuestas Son subparticiones. La subparticin no tiene por qu ser del mismo tipo que la particin principal.Una tabla muy grande podemos particionarla primero por aos y despus subparticionarla por meses o clientes.Crear TablasEl comando utilizado para crear tablas es Create Table.Su sintaxis es:Create [Global Temporary] Table [esquema.]Nombre_Tabla(columna1 Tipo_Dato_Columna1(longitud) [restriccion_int] | DEFAULT valor],columna2 Tipo_Dato_Columna2(longitud) [restriccion_int] | DEFAULT valor],columna_N Tipo_Dato_Columna_N(longitud) [restriccion_int] | DEFAULT valor][, declaracin de ms restricciones de integridad])[ ORGANIZATION HEAP | INDEX | EXTERNAL ][ ON COMMIT { DELETE | PRESERVE } ROWS][ TABLESPACE nb_tablespace][ AS Subconsulta]

Ejemplos de tablas:CREATE TABLE Productos(codigo_prod NUMBER(4),nombre_prod VARCHAR2(20),descripcion VARCHAR2(80))

Ejemplo de tabla normal:CREATE TABLE sal_trabajos (trabajo, sal_maximo, sal_minimo)TABLESPACE usersAS SELECT job_id, MAX(salary), MIN(salary)FROM employees GROUP BY job_id;

Ejemplo de tabla con Select:CREATE TABLE sal_trabajos (trabajo, sal_maximo, sal_minimo[footnoteRef:2]) [2: No especificamos los campos porque los coge del Select.]

TABLESPACE usersAS SELECT job_id, MAX(salary[footnoteRef:3]), MIN(salary[footnoteRef:4]) [3: No especificamos los campos porque los coge del Select.] [4: No especificamos los campos porque los coge del Select.]

FROM employees GROUP BY job_id;

CREATE TABLE salario_anual_empleadosTABLESPACE usersAS SELECT first_name || || last_name nb_emple, salary*12 sal_anualFROM employees;Ejemplo de tabla creada por particiones:CREATE TABLE facturas( id_factura NUMBER(6),id_producto NUMBER (6),id_cliente NUMBER(6),id_empleado NUMBER (6),fecha_factura DATE,importe_factura NUMBER (12,2))PARTITION BY RANGE (fecha_factura)(PARTITION fact_2009 VALUES LESSTHAN (To_date(01-ENE-2010,DD-MON-YYYY,NLS_DATE_LANGUAGE=Spanish)),(PARTITION fact_2010 VALUES LESSTHAN (To_date(01-ENE-2011,DD-MON-YYYY,NLS_DATE_LANGUAGE=Spanish)),(PARTITION fact_2011 VALUES LESSTHAN (To_date(01-ENE-2012,DD-MON-YYYY,NLS_DATE_LANGUAGE=Spanish)),

Tipos de Datos de las Columnas23.

801. Varchar2 (tamao)2. Nvarchar2 (tamao)3. Number (prec, dec)4. Long5. Date6. Raw (tamao)7. Long Raw8. Rowid9. Char (tamao)10. Nchar (tamao)11. Clob12. Nclob13. Blob 14. Bfile

Integridad de los DatosSon una serie de reglas / restricciones que tienen que cumplir los datos para guardarse en la tabla. Por ejemplo, el tipo de datos o el tamao de esto.Estas restricciones deben cumplir 4 normas bsicas:1. Es conveniente asignarles un nombre autodefinido (propio) que permita referirlas de forma fcil con posterioridad. Si el usuario no les asigna un nombre, el programa las denomina sys_c, donde es un nmero entero diferente para cada restriccin.2. Estas reglas pueden ser definidas a la vez que se crea la tabla o posteriormente.3. Se pueden definir a nivel de tabla o de columna.4. Estas reglas se definen una sola vez.Siempre debemos asegurarnos que los datos cumplen las reglas que definimos para las tablas.Dentro de la Integridad de Datos hay 3 tipos de restricciones (constraint), de los cuales uno es externo a la Base de Datos (Reglas de Negocio) y los otros 2 son internos a la Base de Datos (Integridad de Entidades e Integridad Referencial).

Reglas de NegocioDescriben las polticas, normas, operaciones, definiciones y restricciones presentes en cada organizacin (negocio). Son reglas especficas de cada negocio.Son externas a la Base de Datos.Integridad de EntidadesSon reglas para la tabla donde la creemos. El 100% de las filas tienen que cumplir con estas reglas. Aquellas filas que no las cumplas no se insertarn.Hay 4 tipos de Integridad de Entidades:1. Primary Key (pk) Es la Primary Key. Identifica unvocamente cada fila de la tabla. Especifica el Identificador nico de una fila en una tabla.Se establece a nivel de columna.La/s columna/s que componen la clave primaria no pueden tener 2 datos iguales.Siempre tiene que haber dato en esta columna.Para especificar la Primary Key debemos ponerlo detrs del tipo de datos:Id_Producto number (4) primary key,Si queremos que cuando un dato se salte esta restriccin nos avise y no nos d el nmero de error estndar sino que nos diga que es un error de Primary Key y a qu columna corresponde debemos introducir el cdigo:Id_Producto number (4) constraint prod_id_prod_pk primary key,En esta sentencia Prod corresponde a la tabla, id_prod a la columna y pk hace referencia a que es un error de Primary Key.Si queremos establecer la Primary Key para 2 columnas el cdigo sera:Id_Producto number (4) constraint prod_id_prod_pk primary key (id_prod, nombre),Al error le podemos poner el nombre que queramos, pero lo lgico es que pongamos el nombre de la tabla (prod), de la columna (id_prod) y del tipo de error (pk).2. Unique (uq) Es una columna o combinacin de columnas cuyos valores deben ser nicos para todas las filas de la tabla.No es obligatorio que haya un dato, pero en el momento en el que hay un dato, ste no puede repetirse.Podemos tener tantas restricciones Unique como queramos.Puede establecerse en varias columnas a la vez.La sintaxis es la misma que la Primary Key.Para definirla para una sola columna:Tamanio varchar2 (25) constraint prod_tam_uq unique,Para definirla para varias columnas:Tamanio varchar2 (25) constraint prod_tam_uq unique (tamanio, precio),3. Not Null (nn) Significa que una columna no puede tener un valor nulo, es decir, que siempre debe contener datos.Se aplica a una columna concreta.Significa que una columna no puede contener un valor nulo, es decir, siempre tiene que contener datos. Este dato puede repetirse a lo largo de la columna.Siempre hay que ponerla tras crear la columna. Su sintaxis es:nombre varchar2 (100) constraint prod_nombre_nn not null,Al error le podemos poner el nombre que queramos, pero lo lgico es que pongamos el nombre de la tabla (prod), de la columna (nombre) y del tipo de error (nn).4. Check (ck) Especifica una condicin que debe ser cierta.Sirve para implementar las reglas de negocio. Por ejemplo, que el salario sea mayor que 700, o el precio mayor que 0.A la sintaxis hay que aadirle un predicado que nos devuelva un verdadero o falso:precio_unidad number (4,2) constraint prod_prec_ck check (precio_unidad > 0),

Tambin se puede crear esta restriccin comparndola con otra columna. Debe ir en 2 lneas. Por ejemplo, que el precio sin IVA sea menor que el precio.precio_sin_iva number (4,2), constraint prod_prec_sin_iva_ck check (precio_sin_iva < precio_unidad),

Integridad ReferencialSon las restricciones de Clave Ajena, Foreign Key. La Foreign Key establece y obliga a que se cumpla una restriccin de integridad entre una columna (que ser la Tabla Padre o Clave Primaria) y otra columna (que ser la Tabla Hija o Clave Ajena).Al hacer la Foreign Key debemos tener en cuenta la Propagacin de Modificaciones, que sirven tanto para borrado como para modificacin. Hay 3 tipos:1. No action Tambin sirve para evitar el borrado de determinados datos. Por ejemplo, no puedo borrar a un empleado que es jefe de seccin de la columna empleados si antes no lo he borrado de la columna Jefes.2. Set Null Si borramos la Primary Key pone todos los datos a Null. 3. Cascade Borra todos los datos en cascada. Es decir, que si nos cargamos la Primary Key, borramos tambin todas las columnas. La sintaxis de esta restriccin puede ser de 2 formas:1. En lnea Nb_col tipo_de_datos constraint nombre_restriccion_fk references tabla_padre (nombre_col_clave_primaria) [on delete { cascade | set null }]2. No en lnea Nb_col tipo_de_datos, constraint nombre_restriccion_Primary Key primary key ( Nb_col ), Nb_col tipo_de_datos, constraint nombre_restriccion_fk foreign key (nombre_col_clave_ajena) references tabla_padre (nombre_col_pk) [on delete { cascade | set null }]

Sintaxis y Cdigo de las RestriccionesLa sintaxis general de las restricciones es:NombreTabla_NombreColumna_CodigoRestriccin Los os cdigos de restriccin son:

1. PK Clave primaria o Primary Key.2. FK Clave ajena o Foreign Key. 3. UQ Unique.4. CK Check. 5. NN Obligatorio o Not Null.

Modificar ColumnasPara poder modificar columnas antes debemos usar el comando alter Table para modificar la tabla. Tras este comando, ya podemos modificar las columnas (excepto la que sea Primary Key) con los siguientes comandos:1. Add Aadir datos.2. Modify Modificar los datos de la columna.3. Drop Column Borra los datos de la columna.Nunca se podr borrar una columna que sea Primary Key.Si queremos borrar una columna con clave ajena (Foreign key) deberemos aadir al final de la sintaxis el comando Cascade Constraint, con lo que borraremos tanto la columna como la clave ajena.4. Rename Column Para renombrar una columna.Para restringir los datos de una columna se usarn los siguientes comandos:1. Add Constraint Aadir una restriccin a los datos.2. Drop Constraint Borrar una restriccin de los datos.3. Disable Constraint Desactivar una restriccin temporalmente.4. Enable Constraint Volver a activar una restriccin desactivada temporalmente. No se podr volver a activar si los datos insertados durante la desactivacin no cumplen con las restricciones.Todos los datos de la tabla tienen que cumplir con estas restricciones.

Comprobacin Aplazada de RestriccionesFalla cuando insertemos los datos, pero no cuando la tabla est vaca (al crearla).Las restricciones pueden ser Inmediatas o Diferidas, a nivel de sesin o a nivel de transaccin.1. Restriccin Inmediata Realiza la comprobacin al insertar los datos. Por defecto, si no ponemos nada, las tablas son de este tipo.Sintaxis: Not Deferrable.Ejemplo:Nb_col tipo_de_datos, constraint nombre_restriccion_Primary Key primary key ( Nb_col ), Nb_col tipo_de_datos, constraint nombre_restriccion_fk foreign key (nombre_col_clave_ajena) references tabla_padre (nombre_col_pk) on delete cascade not deferrable2. Restriccin Diferida Realiza la comprobacin de los datos al realizar el commit. Este tipo de restricciones ( Deferrable ) puede ser restricciones inmediatas pero tienen la capacidad de ser Diferidas. Si son diferidas sern Initially deferred, mientras que si son inmeditas sern Initially immediate.No se puede cambiar nunca una restriccin Inmediata a Diferida. Para hacerlo habra que borrar la restriccin Inmedata y a continuacin crear la restriccin Diferida. Pero s se pede cambiar de Diferida a Inmediata.Ejemplo de Diferida:Nb_col tipo_de_datos, constraint nombre_restriccion_Primary Key primary key ( Nb_col ), Nb_col tipo_de_datos, constraint nombre_restriccion_fk foreign key (nombre_col_clave_ajena) references tabla_padre (nombre_col_pk) on delete cascade deferrable initially deferredEjemplo de Inmediata:Nb_col tipo_de_datos, constraint nombre_restriccion_Primary Key primary key ( Nb_col ), Nb_col tipo_de_datos, constraint nombre_restriccion_fk foreign key (nombre_col_clave_ajena) references tabla_padre (nombre_col_pk) on delete cascade deferrable initially immediate3. A Nivel de Sesin Slo afecta a esa sesin. Pueden ser Inmediatas o Diferidas: A. Alter session set constraints = Deferred Todas las deferrable sern diferidas.B. Alter session set constraints = Immediate Todas las deferrable sern inmediatas.4. A Nivel de Transaccin Estos cambios durarn hasta hacer el commit. Pueden ser Inmediatas o Diferidas: A. set constraint nombre_restriccion // all immediate.B. set constraint nb_rest // all Deferred Si se hace con una inmediata dar error.En el siguiente ejemplo probamos todas las opciones. Tras probar cada opcin, ir a SQL Plus y probar los 2 insert y el commit que vienen al final:DROP TABLE tabla1 CASCADE CONSTRAINTS;CREATE TABLE tabla1(campo1 NUMBER ( 4 ) CONSTRAINT t1_pk PRIMARY KEY,campo1 NUMBER ( 4 ) CONSTRAINT t1_pk PRIMARY KEY NOT DEFERRABLE,campo1 NUMBER ( 4 ) CONSTRAINT t1_pk PRIMARY KEY DEFERRABLE INITIALLY IMMEDIATE,campo1 NUMBER ( 4 ) CONSTRAINT t1_pk PRIMARY KEY DEFERRABLE INITIALLY DEFERRED,campo2 VARCHAR2 ( 100 ));INSERT INTO tabla1 VALUES ( 1, 'des1' ) ;INSERT INTO tabla1 VALUES ( 1, 'des2' ) ;Commit; Hay una opcin para que el programa nos diga cuales son los datos errneos. Todos los script de cdigo Oracle estn en el directorio: %Oracle Home% / product / 11.1.0 / db_1 / rdbms / admin. Ah buscamos un archivo que se llama utlexcpt, lo abrimos y copiamos el cdigo.Ahora vamos a ver un segundo ejemplo:drop table mis_excepciones ;create table mis_excepciones ( row_id rowid ,owner varchar2 ( 30 ) ,table_name varchar2 ( 30 ) ,constraint varchar2 ( 30 ) ) ;alter table departmentsdisable primary key ;Select * from departmentsWhere department_id between 10 and 30 ;INSERT INTO departments VALUES ( 10, 'Admin', 100, 1700 ) ;INSERT INTO departments VALUES ( 20, 'I+D', 100, 1800 ) ;INSERT INTO departments VALUES ( 30, 'I+D+i', 200, 1800 ) ;alter table departmentsenable primary key ;alter table departmentsenable primary keyexceptions into mis_excepciones ;Select * from mis_excepcionesWhere constraint = 'DEPT_DEPT_ID_PK' ;Select d.rowid, d.* From departments d Join mis_excepciones eOn ( d.rowid = e.row_id ) ;Modificando el cdigo del segundo ejemplo quedara como resultado:drop table mis_excepciones ;create table mis_excepciones ( row_id rowid,owner varchar2 ( 30 ) ,table_name varchar2 ( 30 ) ,constraint varchar2 ( 30 ) ) ;alter table departmentsdrop primary key cascade;alter table employeesdisable constraint EMP_Dept_FK ;alter table job_historydisable constraint JHIST_DEPT_FK ;Select * from departmentsWhere department_id between 10 and 30 ;INSERT INTO departments VALUES ( 10, 'Admin', 100, 1700 ) ;INSERT INTO departments VALUES ( 20, 'I+D', 100, 1800 ) ;INSERT INTO departments VALUES ( 30, 'I+D+i', 200, 1800 ) ;----alter table departmentsadd constraint dept_id_pk primary key ( department_id )exceptions into mis_excepciones ;----// Vamos a unir los rowid de la tabla mis_excepciones con los rowid de la tabla departments para saber cules // son exactamente los datos que nos faltan.Select d.rowid, d.* From departments d Join mis_excepciones eOn ( d.rowid = e.row_id ) ;----// Para solucionarlo vamos a las filas y cambiamos a mano los datos que fallan.// Tras cambiarlos todos y comprobar que tras el commit no hay ningn fallo, volvemos a la tabla mis_excepciones // y, a mano, eliminamos las filas de los errores. Para guardar hacemos un Commit.----// Ahora tenemos que volver a crear o habilitar la PK.alter table departmentsenable primary keyexceptions into mis_excepciones ;Select * from mis_excepcionesWhere constraint = 'DEPT_DEPT_ID_PK' ;

Ver ejercicio 01. Creacin de Tablas.

Modificacin de Tablas

Alter TableAlter Table sirve para modificar una tabla. Siempre ir seguido de las modificaciones de columnas que hemos dado anteriormente.Con este comando es tambin con el que aadiremos, activaremos, desactivaremos y borraremos las restricciones.1. Add Constraint Comando para aadir restricciones.Sintaxis: Alter table [esquema.]nombre_tabla add constraint nb_restriccion primary key | unique ( col1 [ , col2 ] ) check ( condicion ) foreign key ( col1 ) references tabla ( columna ) ;2. Drop Constraint Comando para borrar restricciones. Sintaxis: Alter table [esquema.]nombre_tabla drop unique ( col1 [ , col2 ] ) | primary key | constraint nb_restriccion [ cascade ] ;3. Enable Constraint Comando para activar restricciones.Sintaxis: Alter table [esquema.]nombre_tabla Enable unique ( col1 [ , col2 ] ) | primary key | constraint nb_restriccion [using index ] [exceptions into exceptions ] ;Excepciones activando restricciones: SQL> @$ORACLE_HOME / rdbms / admin / utlexcpt.sql Create table exceptions(nb_columna tipo_columna) ;Alter table [esquema.]nombre_tablaenable constraint nb_restriccionexceptions into exceptions ;4. Disable Constraint Comando para desactivar restricciones.Sintaxis: Alter table [esquema.]nombre_tabla Disable unique ( col1 [`, col2 ] ) | primary key | constraint nb_restriccion [cascade] ;

Drop TableAlter Table sirve para borrar una tabla. Slo se puede borrar una tabla que no haga referencia a una Foreign Key.Siempre ir seguido de las modificaciones de columnas que hemos dado anteriormente.Su sintaxis:drop table [esquema.]nombre_tabla [ cascade constraints | purge ] ;Los comandos Cascade Constraints y Purge determinan cmo borrar la tabla:1. Cascade Constraint Renombra la tabla y la manda a la papelera de reciclaje, de dnde se puede recuperar. No la borra fsicamente.2. Purge Borra la tabla fsicamente. No se puede recuperar.

ndicesSon objetos que nos sirven para hacer bsquedas de forma ms rpida, ya que tiene la columna organizada alfabticamente.Para crear un ndice sobre una o varias columnas, stas deben cumplir una serie de requisitos:1. La/s columna/s estn utilizadas en where.2. La/s columna/s no estn afectadas o tengan operadores ni funciones.3. Deben tener muchos valores distintos o muchos nulos.4. Buscar datos concretos de informacin, es decir, que se use un ndice si en las bsquedas devuelve menos del 8%.La sintaxis de los ndices es la siguiente:create index nb_indice on tabla ( col1 [ , col2 ] ) ;Ejemplo:create index ape_idx on employees ( last_name ) ;Para crear un ndice nico, la sintaxis sera:create unique index nb_indice on tabla ( col1 [ , col2 ] ) ;Tambin podemos hacer una reorganizacin o reestructuracin del ndice. Sirve para actualizarlo cuando ha sufrido muchos cambios o cuando queremos moverlo de localizacin.Para reconstruirlo la sintaxis sera:alter index nb_indice rebuild ;Para moverlo la sintaxis es la siguiente:tablespace nb_tablespace ;Debemos tener en cuenta que una columna que ya tiene un ndice no puede volver a ser indexada. En cambio, si el ndice es sobre varias columnas, s se puede volver a indexar. Es decir, que si ya tengo un ndice sobre la columna A, no podremos hacer otro ndice sobre esa misma columna, pero en cambio s que podermos hacer un ndice sobre la columna A, B y C.Tambin debemos tener en cuenta que las restricciones de Primary Key y Unique crean un ndice automticamente de sus columnas.Para borrar un ndice la sintaxis sera:drop index nb_indice ;

VistasEs una tabla lgica basada en el resultado de una consulta. Es decir, es una tabla que no est almacenada fsicamente en la Base de Datos sino que lo que se almacena es el texto de la bsqueda.Las vistas no tienen el comando Alter.Su sintaxis:create [ or replace ] [ force | no force ] view nb_vista [ ( col1, col2, , colN ) ] as subconsulta with check option ;Para crear o reemplazar una vista:create or replace view nb_vista [ ( col1, col2, , colN ) ] ;Ejemplo: Para crear la vista:create view vista_emple_salarios as select employee_id, first_name, salary, department_id from employees ; Para ejecutarla:select salary from vista_emple_salarios ;Para forzar la creacin de una vista a pesar de los errores:create force view nb_vista [ ( col1, col2, , colN ) ] as subconsulta ;Por defecto, si no ponemos nada, la vista ser Noforce. Para no forzar la creacin de una vista cuando da error:create no force view nb_vista [ ( col1, col2, , colN ) ] as subconsulta ;create view nb_vista [ ( col1, col2, , colN ) ] as subconsulta ;Tambin podemos especificar las columnas que vamos a tener. Si no ponemos nada, cogemos las columnas (y sus nombres) de la seleccin. Su sintaxis sera:create view nb_vista [ ( col1, col2, , colN ) ] as subconsulta ;Las vistas sirven para ahorrar tiempo y por seguridad. Con ellas controlamos a qu datos tienen acceso los usuarios.Adems de consultas podemos insertar ( insert ), modificar ( update ) y borrar ( delete ) los datos de la tabla.

Cualquier operacin que hagamos sobre una vista, lo que har ser insertar, modificar o borrar los datos de la tabla a los que accede la vista. Para poder realizar estas operaciones debemos tener en cuenta determinadas reglas para cada operacin:1. Insert Para que se pueda insertar datos en la tabla desde las columnas de la vista debe tener todas las columnas como Not Null.Esto es porque cuando insertamos en la vista, todas las columnas que no estn en la vista entran con un valor Not Null.2. Update Tiene que cumplir 2 condiciones:A. Que ninguna de las columnas de la Select est modificada por operadores o funciones.B. Que el resultado de la Select no est agrupado.3. No force La vista slo est definida sobre una tabla. Tambin tiene que cumplir las mismas condiciones que Update:A. Que ninguna de las columnas de la Select est modificada por operadores o funciones.B. Que el resultado de la Select no est agrupado.Si queremos comprobar que los datos que vamos a modificar cumplen con las reglas, la sintaxis sera:create view nb_vista [ ( col1, col2, , colN ) ] as subconsulta with check option ;Para borrar una lista:drop view nb_vista ;

SecuenciasUna secuencia es un generador de nmeros enteros secuenciales. Es lo nico que hace. Lo que nosotros hagamos con estos nmeros que nos da, ya es cosa nuestra.Es muy buena opcin para sustituir los cdigos de la columna Primary Key, porque nunca se repetirn.Su sintaxis es:create sequence [esquema.]nb_ secuencia[ start with num_entero ][ increment by num_entero ][ maxvalue num_entero | nomaxvalue ][ minvalue num_entero | nominvalue ][ cycle | nocycle ][ cache num_entero | nocache ] ;Para decirle desde qu nmero debe comenzar:create sequence [esquema.]nb_ secuencia start with numero_entero ;Para decirle cul debe ser su incremento:create sequence [esquema.]nb_ secuencia increment by num_entero ;Para decirle que tiene un nmero como mximo o mnimo:create sequence [esquema.]nb_ secuencia maxvalue | minvalue num_entero ;Para decirle que no tiene un nmero como mximo o mnimo:create sequence [esquema.]nb_ secuencia nomaxvalue | nominvalue ;Para decirle que cuando llegue al valor mximo vuelva a empezar:create sequence [esquema.]nb_ secuencia cycle ;Para decirle que cuando llegue al valor mximo no vuelva a empezar:create sequence [esquema.]nb_ secuencia nocycle ;Para cuando insertamos muchos datos a la vez podemos hacerlo en bloques, por ejemplo, de 50. Para ello:create sequence [esquema.]nb_ secuencia cache num_entero ;Cuando insertamos muchos datos a la vez pero no queremos hacerlo en bloques sino que se haga uno a uno:create sequence [esquema.]nb_ secuencia nocache ;Ejemplo:create sequence seql start with 100 incremnet by 5 ;Si lo que queremos es ver el valor por el que vamos:select nb_secuencia.curval ;Si lo que queremos es generar el siguiente valor:select nb_secuencia.nextval ;Para modificar una secuencia ya creada:alter sequence [esquema.]nb_ secuencia[ start with entero ][ increment by entero ][ maxvalue entero | nomaxvalue ][ minvalue entero | nominvale ][ cycle | nocycle ][ cache num_entero | nocache ] ;Y, por ltimo, para borrar una secuencia usaremos:drop sequence [esquema.]nb_secuencia ;

SinnimosEs un nombre alternativo para un objeto. Se pueden crear sinnimos sobre todos los objetos, excepto sobre los ndices. Tambin se pueden crear sobre funciones y procedimientos.Su sintaxis:create [ public ] synonym nb_sinonimo for esquema.objeto ;Hay dos tipos de sinnimos:1. Privados Slo tiene acceso a l quien lo ha creado. Su sintaxis es:create synonym nb_sinonimo for esquema.objeto ;2. Publicos Todos los usuarios tienen acceso a ellos. Su sintaxis es:create public synonym nb_sinonimo for esquema.objeto ;Pueden convivir 2 sinnimos privados iguales. Tambin si coinciden un privado y un pblico. Pero no 2 pblicos iguales.El sinnimo es slo un nombre alternativo, no un objeto por lo que para realizar cualquier cambio en un objeto necesitamos tener permisos para realizarlos.No existe Alter en los sinnimos, pero s se puede usar Replace para cambiarlo:create or replace sinonym nb_sinonimo for esquema.objeto ;Para borrar un sinnimo pblico:drop public sinonym nb_sinonimo ;Para borrar un sinnimo privado:drop sinonym nb_sinonimo ;

Comandos para Modificar Objetos

RenameSirve para renombrar un objeto. Su sintaxis:rename nb_antiguo to nb_nuevo ;

TruncateSirve para vaciar una tabla, es decir, para borrar slo los datos de una tabla, hay que tener en cuenta las restricciones de los datos y que conlleva el comando Commit, es decir, que no se puede recuperar.Su sintaxis es:truncate table nb_tabla [ drop storage ] [ reuse storage ] ;Si queremos que adems borre el espacio de memoria que usaba:truncate table nb_tabla drop storage ;Si queremos que reutilice el mismo espacio de memoria que estaba usando:truncate table nb_tabla reuse storage ;

Diccionario de VistasA. Tablas:1. Select * from user_tables, Esta vista da informacin sobre todas las tablas que pertenecen al usuario.2. Select * from all_tables, Da informacin de todas la tablas a las que el usuario tenga acceso, sea o no usuario.Da la misma informacin que user_tables, pero adems aade una columna para indicar quin es el propietario.3. Select * from dba_tables, Da informacin de todas las tablas que hay en el sistema, pero slo puede ejecutarse como Administrador.4. Select * from user_tab_colums, Da informacin sobre las columnas que pertenecen al usuario.5. Select * from all_tab_colums, Da informacin sobre las columnas a las que el usuario tiene visibilidad.6. Select * from dba_tab_colums, Da informacin sobre todas las columnas que existen pero slo puede ejecutarlo el Administrador.7. Select * from user_constraints, Da informacin sobre todas las restricciones de las tablas de las que es propietario el usuario.8. Select * from all_constraints, Da informacin sobre todas las restricciones de las tablas sobre las que el usuario tiene visibilidad.9. Select * from user_cons_colums, Da informacin de las columnas que usan las restricciones que pertenecen al usuario.10. Select * from all_cons_colums, Da informacin de las columnas que usan las restricciones de las tablas que el usuario puede ver.11. Select * from dba_cons_colums, Da informacin de las columnas que usan las restricciones de todas las tablas. Slo puede ejecutarlo el Administrador.B. ndices:1. Select * from user_indexes, 2. Select * from all_indexes, 3. Select * from dba_indexes, C. Vistas:1. Select * from user_views, 2. Select * from all_ views, 3. Select * from dba_ views, D. Secuencias:1. Select * from user_sequences, 2. Select * from all_ sequences, 3. Select * from dba_ sequences, E. Sinnimos:1. Select * from user_synonyms, 2. Select * from all_ synonyms, 3. Select * from dba_ synonyms,

Tema 03 - DML

El Lenguaje de Manipulacin de Datos (DML) se encarga de la recuperacin (Select), insercin (Insert), eliminacin (Delete), modificacin (Update) e insercin y/o modificacin de la informacin (Merge).

Para conocer la estructura de una tabla podemos usar dos comandos: Describe nombre_tabla o Desc nombre_tabla.

Select[footnoteRef:5] [5: Proyeccin Columnas; Select Filas.]

Se encarga de la recuperacin de la informacin.

Su sintaxis general es:Select lista_columnas | * from lista_tablas [Where busqueda] [group by columnas] [having busqueda] [order by columnas]

En donde:Select lista_columnas Si queremos ver una o varias columnas. Select * Si queremos ver todas las columnas.Select nb_columna nb_sinonimo Si queremos que el nombre de una columna salga como un sinnimo.Si queremos que salga exactamente igual que nosotros lo escribimos en vez de todo en maysculas, hay que meter nb_sinonimo entre comillas.from nb_tabla Si queremos ver las columnas de una tabla o vista que pertenece al usuario. from esquema.nb_tabla Si queremos ver las columnas de una tabla o vista que pertenece a otro usuario.from nb.sinonimo Si la tabla tiene un sinnimo y queremos usarlo en vez del nombre.Where condicion_de_busqueda Es un filtrado de datos. Para poder hacerlo la condicion_de_busqueda siempre tiene que ser o verdadero (devuelve la fila) o falso (no devuelve la fila).group by lista_columnas Sirve para agrupar los datos devueltos del Where, para resumirlos.Por ejemplo, de mayor a menor salario, o cuntos empleados hay en cada uno de los departamentos. having condicion_de_busqueda Hace un filtrado de datos de los datos ya agrupados.Por ejemplo, que nos devuelva slo los departamentos que tengan ms de 5 empleados. order by lista_columnas Sirve para establecer el orden por nombre de columna, por alias o por el orden de columnas del Select.Por defecto, el orden es ascendente. Si queremos que sea descendente hay que aadir desc al final. El procesamiento de una Select consiste en el filtrado de filas con Where, la agrupacin con Group By, el filtrado de filas agrupadas con Having y la ordenacin de la informacin con Order By. Estos comandos tienen que ir siempre en este orden, ya que es el orden en el que Java trata los Select. Operadores SQLHay 2 tipos de operadores:1. Unarios Interactan slo con un elemento. Slo dan el signo del elemento ( + o - ).2. Binarios Interactan con varios elementos. Son operadores aritmticos normales ( + , - , / o * ).Cualquiera de los 2 puede ir en un Select y en un Where siempre y cuando utilice datos numricos.En los Unarios el operador por defecto es +. El operador de Divisin ( / ) nos devuelve el resultado con decimales, al igual que el de Multiplicacin ( * ).

Operador de ConcatenacinEl Operador de Concatenacin ( || ) se utiliza para unir cadenas de caracteres. Se pueden concatenar todo lo que queramos. Por ejemplo, la columna del nombre, un literal (en este caso un espacio) y la columna del apellido:Select first_name || ` || last_nameAl concatenar debemos tener en cuenta el tipo de dato, es decir, que los nmeros, por ejemplo, sern tratados como caracteres y no como nmeros, as que no se podr realizar operaciones o funciones matemticas con ellos.

Operador de ComparacinEl Operador de Comparacin lo usaremos en Where. Se usan para comparar resultados. Sus operadores son:1. 2. = Igual3. > Mayor4. < Menor5. >= Mayor o igual6. = all (7500,4500,16000)Estos operadores comparan operaciones simples.

Condiciones LgicasLas Condiciones Lgicas las utilizaremos para comparar operaciones ms complicadas. Estas condiciones lo que harn ser tratar las operaciones complicadas como si fueran varias operaciones simples unidas. Sus operadores son:5. Not Es la Negacin Lgica. Devuelve el valor contrario de la expresin.Si la condicin es verdadera (t) devuelve falso (f). Si la condicin es falso (f) devuelve verdadera (t).Condicion1NotTFFT6. And Es el Conectivo. Evala 2 condiciones.Devuelve un valor de verdad (t) slo si ambas condiciones son ciertas.Condicion1AndCondicion2TTTTFFSlo devuelve verdadero si las 2 condiciones son verdaderas.FFTFFF7. Or Es el Conector Lgico. Evala 2 condiciones.Devuelve un valor de verdad (t) si al menos una de las 2 condiciones es cierta.Condicion1OrCondicion2TTTTTFSlo devuelve falso si las 2 condiciones son falsas.FTTFFFA igualdad de condiciones dentro del Where (por ejemplo, que todos sean And), se evalan en orden.La condicin lgica Or es lo mismo que el operador de comparacin Any. Lo mismo pasa con el operador de comparacin All y la condicin lgica and.

Operador de PertenenciaLos Operadores de Pertenencia son de 2 tipos:1. In Se usa para definir que el valor a comparar se encuentra dentro de un grupo especificado en In.Devuelve verdadero (t) cuando se cumple exactamente esa condicin. Es la igualdad estricta.Es lo mismo que el operador de comparacin = Any.2. Not In Desigualdad estricta. Es lo contrario a In.Es lo mismo que el operador de comparacin ! = Any.

Operador de Rango de ValoresLos Operadores de Rango de Valores son de 2 tipos:1. Between x and y Se usa para especificar un intervalo de valores. Se incluyen los valores de x e y.2. Not between x and y Se usa para especificar un intervalo de valores. No se incluyen los valores de x e y.Este tipo de operadores se corresponden a los operadores de comparacin > = x and < = y en el caso de Between x and y. En el caso de Not between x and y se corresponden a los operadores de comparacin < x or > y.El Rango de Valores tambin sirve para cadenas de caracteres. Su orden ser alfabtico.

Operador LikeUtilizaremos este operador para establecer patrones de bsqueda. Segn lo que queramos buscar usaremos 2 smbolos:1. % Para cualquier Cadena de Caracteres.2. _ Para cualquier Caracter.Por ejemplo, queremos buscar todas las palabras que empiecen por S y acaben por K, para lo que escribiramos:Select job_id, salary from employees Where job_id like ` S % K Nos podra devolver tanto SK, como SeeK, como SH_CleRK.Si queremos que devuelva slo las que tienen 3 caracteres sera:Select job_id, first_name, salary from employees Where job_id like ` S _ K Se tienen en cuenta las maysculas y minsculas en las letras que nosotros damos, pero no para la cadena de caracteres o el carcter que vaya dentro de ellas.Operador NullPara el tratamiento de valores nulos usaremos el Operador Null. Debemos recordar que el 0 es un nmero, que no es lo mismo que Null. Puede ser de 2 tipos:1. Is null Devuelve todos los valores de la columna que sean nulos.Select commission_pct, salary from employees Where commission_pct is null2. Is not null Devuelve todos los valores de la columna que no sean nulos.Select commission_pct, salary from employees Where commission_pct is not null

Operador Set o de ConjuntosLos Operadores Set son los ms difciles. Trabajaremos con varios conjuntos. Cada conjunto ser un Select distinto.Para utilizar estos operadores hay que cumplir 2 normas:1. Las consultas a unir deben tener el mismo nmero de campos y, adems, estos campos deben de ser del mismo tipo.2. Slo puede haber una nica clusula Order By al final de la sentencia Select.

Hay 4 tipos de estos operadores:1. Union Devuelve la suma de 2 o ms conjuntos de resultados. Este resultado tiene la misma estructura que los conjuntos originales, y se ordena igual que la primera columna original dada. Su sintaxis sera:Select x from y Union Select p from q2. Union all Es igual que Union pero no quita los duplicados ni los ordena. Su sintaxis sera:Select x from y Union all Select p from q3. Intersect Slo devuelven las filas que estn en los 2 conjuntos a la vez. Su sintaxis sera:Select x from y Intersect Select p from qDevuelve los datos ordenados y quita los duplicados, es decir, que slo devuelve el dato en comn una vez en total, no una por cada columna en la que est.4. Minus Es la resta de conjuntos. No es transitiva, es decir, que A-B es distinto a B-A.Esta operacin devuelve los datos que estn en el primer conjunto y no estn en el segundo. Su sintaxis sera:Select x from y Minus Select p from q

Operador ExistsEl Operador Exists examina si un operador existe dentro de una subconsulta. Su sintaxis sera:Select * from department d where exists (Select * from employees ewhere e.department_id = d.department_id)Lo que hace es comparar la subconsulta de dentro con la consulta de fuera. Si existe la devuelve. Debemos tener en cuenta que este operador tarda en ejecutarse ya que la subconsulta se ejecuta para cada fila, as que si la subconsulta tarda un minuto y tenemos 80 filas en la tabla, tardar 80 minutos.

Funciones Programadas

Funciones de Fila SimplePor cada operacin devuelve un valor: entrada ( 1 valor ) funcion f( x ) salida ( 1 valor ) .Todas las funciones que vamos a ver se pueden utilizar en Select, Where, Having y en Order By.Se puede dividir en 5 tipos segn el tipo de datos de los argumentos de entrada: Funciones Numricas, Funciones de Caracteres, Funciones de Fechas, Funciones de Conversin y Otros.

Funciones NumricasSon funciones que aceptan como entrada nmeros y que tambin tienen como salida nmeros. Se subdividen en 5 grupos:

1. Operaciones Aritmticas 1. ABS ( num ) Valor absoluto de un nmero. Es el nmero sin signo.Select ABS ( 25 ), ABS ( -25 ) from dual;2. Mod ( m , n ) Devuelve el resto.Select Mod ( 25 , 25 ), Mod ( 28 , 5 ) from dual;3. Power ( m , n ) Potencia. Es m elevado a n.Select Power ( 3 , 2 ), Power ( 9 , 3 ) from dual;4. Sqrt ( num ) Es el cuadrado.Select Sqrt ( 81 ), Sqrt ( 70 ) from dual;5. Exp ( num ) Devuelve el nmero e elevado a num.Select Exp ( 25 ) from dual;6. Ln ( num ) Logaritmo niperiano en base a num.Select Ln (5) from dual;7. Log ( m , n ) Logaritmo de m elevado a n.Select Log ( 25 , 2 ) from dual;8. Sign ( num ) Devuelve el signo de un nmero. Puede devolver 3 valores: Si el nmero es negativo devuelve -1. Si el nmero es positivo devuelve 1. Si el nmero es 0 (ni positivo ni negativo) devuelve 0.Select Sign ( 500 ), Sign ( 0 ), Sign ( -500 ) from dual;2. Operaciones Trigonomtricas 1. Sin ( num ) Seno. Devuelve el seno trigonomtrico del ngulo dado, en radianes, en una expresinfloatnumrica aproximada.Select sin ( 25 ) from dual;2. Cos ( num ) Coseno. Funcin matemtica que devuelve el coseno trigonomtrico del ngulo especificado, expresado en radianes, en la expresin dada. Es unaexpresinde tipofloat.Select cos ( 10 ) from dual;3. Tan ( num ) Tangente. Devuelve la tangente de la expresin de entrada. Es unaexpresinde tipofloato de un tipo que puede convertirse implcitamente afloat, interpretado como un nmero de radianes.Select tan ( 20 ) from dual;4. Asin ( num ) Arco seno. Devuelve el ngulo, expresado en radianes, cuyo seno es la expresin float especificada.Es una expresin del tipo float o de un tipo que puede convertirse implcitamente a float, con un valor comprendido entre -1 y 1.Con valores fuera de este intervalo se devuelve null y se notifica un error del dominio.Select asin ( 81 ) from dual;5. Acos ( num ) Arco coseno. Devuelve el ngulo, expresado en radianes, cuyo seno es la expresin float especificada.Es una expresin del tipo float o de un tipo que puede convertirse implcitamente a float, con un valor comprendido entre -1 y 1.Con valores fuera de este intervalo se devuelve null y se notifica un error del dominio.Select acos ( 25 ) from dual;6. Atan ( num ) Arcotangente. Devuelve el ngulo en radianes cuya tangente es una expresin tipo float especificada.Es una expresin de tipo float o de un tipo que se puede convertir a float de manera implcita.Select atan ( 5 ) from dual;

3. Operaciones de Redondeo1. Ceil ( num ) Redondea a entero, hacia arriba, el argumento num, es decir, que devuelve el entero ms grande que sea mayor o igual que la expresin numrica especificada.Select Ceil ( 50.88 ), Ceil ( 52.21 ) from dual;2. Floor ( num ) Redondea a entero, hacia abajo, el argumento num, es decir, que devuelve el entero ms grande que sea menor o igual que la expresin numrica especificada.Select Floor ( 25 , 25 ), Floor ( 28 , 5 ) from dual;3. Round ( m [,n] ) Devuelve un valor numrico m, redondeado a n decimales. n indica la posicin en la que redondeamos.Si n se omite o tiene el valor 0 (predeterminado),m se redondea.Si se especifica un valor distinto de 0,m se trunca.Select Round ( 45.223 , 2 ) from dual;4. Trunc ( m [,n] ) Trunca un nmero m a la cantidad de decimales especificada por el segundo argumento n. Redondea unnmero dado de forma normal, sin decimales. n indica la posicin en la que redondeamos.Si n se omite o tiene el valor 0 (predeterminado),m se redondea.Si se especifica un valor distinto de 0,m se trunca.Select Trunc ( 45.223 , 2 ) from dual;

Cadena de CaracteresSon conjuntos de caracteres que pueden devolver caracteres o nmeros. Slo devuelven nmeros Length y Instr. Todas estas funciones se pueden anidar. Se subdividen en 13 grupos:1. concat ( cad1 , cad2 ) Concatena 2 cadenas de palabras.Select concat ( hola , buenos das ) from dual;2. substr ( cad , m [ , n ] ) Devuelve una subcadena empezando por el carcter indicado con M, devolviendo N caracteres.Si no se indica N, se devuelven todos los caracteres hasta el final.Select substr ( buenos das , e , a ) from dual;3. upper ( cad ) Pasa todos los caracteres a maysculas.Select upper ( probar lo que hace ) from dual;4. lower ( cad ) Pasa todos los caracteres a minsculas.Select lower (probar lo que hace ) from dual;5. initcap ( cad ) Pone la inicial de cada palabra en maysculas y el resto en minsculas.Select initcap (probar lo que hace ) from dual;6. replace ( cad , c1 , c2 ) Devuelve la cadena reemplazando todas las apariciones de c1 por c2.Select replace ( probar x que lo hace , x , por ) from dual;7. lpad ( cad1 , num [ , cad2 ] ) Sirve para decir que cad1 debe tener un nmero de caracteres determinado en Num.Si faltan caracteres, se rellenan con espacios en blanco aadidos a la izquierda de los caracteres ya existentes. Cad2 nos indica los caracteres de relleno si no queremos que sean espacios.Select lpad ( probar lo que hace , 16 , * ) from dual;8. rpad ( cad1 , num [ , cad2 ] ) Es lo mismo que lpad, pero los caracteres se aaden a la derecha.Select rpad ( probar lo que hace , 16 , * ) from dual;9. ltrim ( cad1 , muestra ) Borra caracteres de cad1 por la izquierda hasta que deja de encontrar el carcter de muestra.Select ltrim ( probar lo que hace , a ) from dual;10. rtrim ( cad1 , muestra ) Borra caracteres de cad1 por la derecha hasta que deja de encontrar el carcter de muestra.Select rtrim ( probar lo que hace , a ) from dual;11. trim ( cad1 , muestra ) Borra caracteres de cad1 por ambos lados hasta que deja de encontrar el carcter de muestra.Select trim ( probar lo que hace , a ) from dual;12. length ( cad ) Devuelve un nmero. Devuelve el nmero de caracteres total.Select length ( probar lo que hace ) from dual;13. instr ( cad1 , muestra ) Devuelve un nmero. Devuelve la posicin de la primera aparicin de muestra en la cadena.Select instr ( probar lo que hace , q ) from dual;

Funciones de Fecha y HoraLas funciones que no llevan parmetros trabaja en la tabla Dual, porque son funciones de la Base de Datos. Se subdividen en 16 grupos:1. sysdate Devuelve la fecha actual del servidor. Devuelve un tipo date.2. current_date Devuelve la fecha actual del cliente. Devuelve un tipo date.3. systimestamp Devuelve fecha y hora del servidor.4. current_timestamp Devuelve fecha y hora del cliente con la zona horaria.5. localtimestamp Devuelve fecha y hora del cliente sin la zona horaria.6. sessiontimezone Devuelve la zona horaria del cliente.7. dbtimezone Devuelve la zona horaria del servidor.8. tz_offset ( zona ) Devuelve la zona horaria de la zona geogrfica dada en zona.9. from_tz ( timestamp valor_timestamp , zona ) Nosotros le damos una fecha y hora, con valor_timestamp, y una zona geogrfica con zona, y nos devuelve fecha y hora con la zona geogrfica incluida.10. extract year | | second from fecha Para buscar el valor de un campo de fecha / hora especificado en la expresin.11. add_months ( fecha , num ) Suma el nmero de meses ( num ) a la fecha especificada ( fecha ).12. months_between ( fecha1 , fecha2 ) Devuelve el nmero de meses entre Fecha1 y Fecha2.Si fecha1 es posterior a fecha2 entonces el resultado es positivo; si no ser negativo.13. Last_day ( fecha ) Devuelve el ltimo da del mes introducido en fecha.14. next_day ( fecha , cadena ) Devuelve la fecha del primer da de la semana indicado mediante cadena posterior a fecha.Cadena debe contener un da de la semana en el lenguaje de la sesin en la que nos encontremos, es decir, de nuestra Base de Datos.15. round ( fecha , formato ) Devuelve la fecha redondeada al formato especificado con formato.El valor devuelto es siempre de tipo Date, es decir, devuelve la fecha pero nunca la hora.Si se omite formato la fecha se redondea al da ms cercano.16. trunc ( fecha , formato ) Devuelve la fecha truncada segn lo que se especifique mediante formato.Por defecto, si no se especifica formato se truca al da ms cercano.

Funciones de ConversinSe subdividen en 9 grupos:1. Cast ( expr | (subquery) AS Tipo ) Convierte la expresin al tipo de datos indicado.Select ename, cast ( hiredate as char ) from emp;2. Rowidtochar ( Rowid ) Convierte el rowid dado a tipo varchar2 cuya longitud es siempre 18.Select rowid from scott.empwhere rowidtochar ( rowid ) like %saab% ;3. Chartorowid ( cadena ) Convierte el valor dado en cadena de tipo char, varchar2, nchar o Nvarchar2 a un valor de tipo rowid.Select ename where rowid = chartorowid ( AAAiPQAHoAAAAk3AAA ) , from scott.emp;4. To_char ( fecha , formato ) Convierte un nmero o una fecha dado en Fecha a una cadena de caracteres varchar2 usando elformato pasado como parmetro.Por defecto, todas las fechas se visualizan utilizando el formato por defecto especificado en la configuracin en la Base de Datos (normalmente dd-mm-aa).El usuario puede cambiar la forma en que se visualizan las fechas, haciendo uso de la to_char y especificando un formato concreto.El formato debe ser especificado entre comillas simples y es sensible a maysculas.Para eliminar los espacios en blanco o los ceros a la izquierda se puede utilizar el elemento de formato fm.Select to_char ( sysdate , dd-mm-aa ) from dual;5. To_char ( nmero , formato ) Convierte un nmero o una fecha dado en nmero a una cadena de caracteres varchar2 usando el usando el formato pasado como parmetro.La conversin de number a varchar2 haciendo uso del to_char se suele utilizar cuando se quiere concatenar un valor numrico en un formato determinado con una cadena de caracteres.Oracle visualiza una cadena de caracteres compuesta por el carcter # cuando el valor a representar es mayor que el nmero de dgitos del formato especificado.Select to_char ( sysdate , dd-mm-aa ) from dual;6. To_date ( cadena , formato ) Convierte una cadena de caracteres en una fecha con el formato que le hemos indicado (dd-mm-aa).Los elementos de formato sern los mismos que los presentados en la funcin to_char.Select to_date ( 20020522 , yyyymmdd ) from dual;7. To_number ( cadena , formato ) Convierte una cadena de caracteres en un nmero.Select to_number ( 34434 ) from dual;8. To_timestamp ( cadena , formato ) Convierte una cadena de tipo de datos char, varchar2, nchar o nvarchar2 a un valor del tipode datos timestamp.El formato puede o no especificarse. Dice el tipo de char que queremos. Si lo omitimos, la cadena debe estar en el formato por defecto del tipo de datos timestamp.Select to_timestamp ( 2000-12-01 11:00:00 , yyyy-mm-dd hh:mm:ss ) from dual;9. To_yminterval ( cadena ) Convierte una cadena de tipo de datos char, varchar2, nchar o nvarchar2 a un valor del tipo dedatos interval year to month, el cual almacena un periodo de tiempo mediante los campos de fecha y hora.Select hiredate , hiredate + to_yminterval ( -02-04 ) as hire_date_yminterval from scott.emp where depno=20;10. To_dsinterval ( cadena ) Convierte una cadena de tipo de datos char, varchar2, nchar o nvarchar2 a un valor del tipo deInterval day to second.Select empno, ename from scott.emp where hiredate + to_dsinterval ( 100 10:00:00 ) Mayor que.3. > = Mayor o igual que.4. < Menos que.5. < = Menor o igual que.6. < > Distinto.

B. Subconsultas de Fila Mltiple.Tiene 3 tipos de comparadores:1. in Igual o algn miembro de la lista.2. any Condicin con alguno de los valores.3. all Condicin con todos los valores.Las subconsultas anidadas son aquellas Subconsultas Hijas que constan de varias Select unidas y que juntas conformarn el filtro para la Subconsulta Padre.Ver ejercicio 05. Hospital. Consultas. Hoja 6.

Ver ejercicio 06. Hospital. Consultas. Hoja 7.

Ver ejercicio 07. Hospital. Consultas. Hoja 9.

Sentencia InsertCambia los datos de la tabla. Lo que hace es aadir filas a una tabla. Inserta la fila entera siempre. Lo que no queramos aadir, lo pondremos como null.Estas filas que vamos a insertar deben respetar todas las restricciones de la tabla.Esta sentencia se puede escribir de 2 formas:1. El orden en el que se asignen los valores en la clusula values tiene que coincidir con el orden en que se definieron las columnas en la creacin del objeto tabla, dado que los valores se asignan por posicionamiento relativo.insert into nb_tablasvalues ( serie_de_valores );Ejemplo:insert into departmentsvalues ( 56, I + D + i + d + i , 121, 1700 );2. En este caso los valores se asignarn a cada una de las columnas mencionadas por posicionamiento relativo.Es necesario que por lo menos se asignen valores a todas aquellas columnas que no admiten valores nulos en la tabla ( not null).insert into nb_tabla ( columna1 , columna2 , , columnaN )values ( valor1 , valor2 , , valorN );Ejemplo:insert into departments ( departmen_id , department_name )values ( 70, I + D + mark );

Sentencia Insert MultitablaPara insertar un subconjunto de filas de una tabla en otra se escribe una sentencia Insert con una Subselect interna.

Tiene 2 formatos posibles:1. El primer formato asigna a las columnas los valores recuperados en la sentencia select. Inserta en la tabla todas las filas que se recuperen en la select.insert into nb_tabla ( columna1 , columna2 , , columnaN )values ( [ sentencia select ] );2. En el segundo formato, las estructuras de las tablas tienen que ser iguales.insert into nb_tabla from *from nb_tabla_fuente;

Existen 4 tipos de insert multitabla:1. Insert Incondicional El resultado de la Select se inserta en todas las tablas sin tener en cuenta las condiciones.Su sintaxis sera:insert all columnas, case columnainto nb_tabla1 values ( alias1 , alias2 , , aliasN )into nb_tabla2 values ( alias1 , alias2 , , aliasN ) into nb_tablaN values ( alias1 , alias2 , , aliasN )select nb_columna_original1 alias1, nb_columna_original2 alias2, , nb_columna_originalN aliasNfrom nb_tabla_fuente

where condicion_de_busqueda group by lista_columnas having condicion_de_busqueda order by lista_columnas;Subconsulta

2. Insert All Condicional Se insertarn los datos slo en las tablas que cumplen la condicin.Para cada Into ponemos una condicin.Las condiciones que pongamos no tienen por qu ser excluyentes, es decir, que para cada tabla pueden ser distintas.Su sintaxis sera:insert all columnas, case columnawhen condicion1 then into nb_tabla1 values ( col1 , col2 , , colN )when condicion2 then into nb_tabla2 values ( col1 , col2 , , colN )when condicion1, condicion2 then into nb_tabla3 values ( col1 , col2 , , colN )select col1 , col2 , , colNfrom nb_tabla_fuente;

3. Insert First Condicional La fila recuperada por la Select slo se inserta en la primera tabla encontrada en la condicin.Es lo que ms se parece a condiciones excluyentes.insert first when condicion1 then into nb_tabla1 values ( col1 , col2 , , colN )when condicion2 then into nb_tabla2 values ( col1 , col2 , , colN )else into nb_tabla3 values ( col1 , col2 , , colN )select col1 , col2 , , colNfrom nb_tabla_fuente;

4. Pivoting Insert Se utiliza para insertar en una tabla relacional valores que no son relacionales.El pivoting es una operacin en la que se debe crear una transformacin tal que cada registro de cualquier flujo de entrada como, por ejemplo, una tabla de base de datos no relacional, se debe convertir en varios registros para un entorno de tablas de base de datos ms relacional.insert all into nb_tabla values ( col1 , col2 , col3 )into nb_tabla values ( col1 , col2 , col3 )into nb_tabla values ( col1 , col2 , col3 ) select col1 , col2 , , colN | *from nb_tabla_fuente;

Sentencia UpdateActualiza valores de una o ms columnas para un subconjunto de filas de una tabla.Para guardar los cambios hay que ejecutar commit.Para cancelar la modificacin podemos hacer rollback.Actualiza los campos correspondientes junto con los valores que se le asignen, en el subconjunto de filas que cumplan la condicin de seleccin. Su sintaxis es:update nb.tabla set columna = valor [ , columna2 = valor ] [ where condicion ];Sintaxis Nueva

update nb.tabla set columna = ( select columna from nb_tabla where condicion );Sintaxis Antigua

Si no se pone condicin de seleccin, la actualizacin se da en todas las filas de la tabla.Si se desea actualizar nulos, se asignar el valor null.

Sentencia DeleteBorra una o ms filas de una tabla, dependiendo de la condicinWhere. Para guardar cambios hay que ejecutarCommit.Para cancelar el borrado podemos hacerRollback.La sintaxis es la siguiente:delete from nb_de_tabla [ where condicion ];Cuidado

Si no se pone condicin de seleccin, borra todas las filas de la tabla.

Por ejemplo, si ejecutamos: delete from pedidos; se borrar toda la tabla.Por ejemplo, si ejecutamos: delete from pedidos where cod_pedido = 15; se borrar slo un registro.

Sentencia MergeOracle soporta la sentencia Merge para operaciones Insert, Update y Delete. Mediante esta sentencia, puede actualizar, insertar o suprimir una fila condicionalmente en una tabla, con lo que se evitan varias sentencias DML. La decisin de actualizar, insertar o suprimir en la tabla destino se basa en una condicin de la clusula On.Si la fila no existe, insertar la fila, y si existe, la actualizar o la borrar.Hay que tener privilegios de objeto Insert y Update en la tabla destino y el privilegio de objeto Select en la tabla origen. Para especificar la clusula Delete de la clusula Merge_Update_Clause, tambin debe tener el privilegio de objeto Delete en la tabla destino.La sentencia Merge es determinista. No se puede actualizar varias veces la misma fila de la tabla destino en la misma sentencia Merge. Un enfoque alternativo es utilizar bucles PL/SQL y varias sentencias DML. La sentencia Merge, sin embargo, es fcil de utilizar y se expresa de forma ms sencilla como una nica sentencia SQL.La sentencia Merge es adecuada en diferentes aplicaciones de almacn de datos. Por ejemplo, en una aplicacin de almacn de datos, es posible que necesite trabajar con datos procedentes de varios orgenes, algunos de los cuales pueden estar duplicados. Con la sentencia Merge, puede agregar o modificar filas condicionalmente.

Fusin de FilasPuede actualizar filas existentes e insertar nuevas filas condicionalmente mediante la sentencia Merge. En la sintaxis:Clusula Into especifica la tabla destino que se va a actualizar o en la que se va a insertar.Clusula Using identifica el origen de los datos que se van a actualizar o insertar; puede ser una tabla, una vista o una subconsulta.Clusula On condicin segn la cual la operacin Merge actualiza o inserta When Matched | indica al servidor cmo responder a los resultados de la condicin de unin When Not Matched.Su sintaxis:merge nb_de_tabla alias_tabla using ( tabla | vista | subconsulta alias )on ( condicion_de_join )when matched thenupdate setcol1 = valor1,col2 = valor2when no matched theninsert to ( lista_columnas ) values ( valores ) ;

Veamos un ejemplo:merge salarios sal using ( select employee_id, salary, department_idfrom employeeswhere department_id between 10 and 80 ) empon ( sal.employee_id = emp.employee_id )when matched thenupdate set sal.salary = sal.salary * 2when no matched theninsert values ( emp.employee_id, emp.salary ) ;

Sentencias TransaccionalesTodos los cambios en la Base de Datos los manejamos bajo el trmino transaccin. Una transaccin es un proceso que se ejecuta completo o no se ejecuta. Esto es as para poder garantizar la consistencia de datos.Una transaccin Oracle consta de varias sentencias DML o una sentencia DDL o una sentencia DCL.La transaccin debe tener consistencia de datos, es decir, que se garantice que los datos no son modificados por varios usuarios a la vez, pudiendo generar prdidas de informacin. Para evitar esto, la consistencia de datos utiliza Bloqueos que, bsicamente, consisten en que el primero que accede a los datos se que con ellos (Oracle los bloquea) hasta que los suelte (Oracle los desbloquea). Si un segundo usuario intenta acceder a ellos mientras el primer usuario an los est actualizando, se queda en la cola de espera y hasta que el primer usuario suelte los datos, no se podr realizar los cambios que haya mandado.Tenemos una opcin para que cuando realizamos una Select, se bloqueen las filas que nos devuelve para que no se puedan cambiar los datos hasta que se acabemos de escribir todos los cambios que vamos a realizar. Su sintaxis sera como la de una Select normal, pero aadiendo For Update al final:select datos_de_la_select for update ;Se puede controlar la lgica de transacciones con el uso de las sentencias Commit, Savepoint y Rollback.Cuando una transaccin es interrumpida por que el sistema falla, la transaccin entera es automticamente deshecha. Esto previene errores por causas no deseadas en el cambio de los datos y regresa las tablas de su estado al estado del ltimo commit. De esta manera, el servidor de Oracle protege la integridad de las tablas. Con SQL*Plus, una salida normal es lograda escribiendo el comando Exit en la lnea de comandos. Cerrar la ventana es interpretado como una salida anormal.

Sentencia CommitFinaliza la transaccin actual haciendo permanentes todos los cambios pendientes. Cada dato que cambia durante la transaccin es temporal hasta que la transaccin es cometida (commit). El estado de los datos antes de usar las sentencias Commit o Rollback es: 1. Las operaciones de manipulacin de datos afectan en primera instancia el buffer de la base de datos. Por lo tanto, el estado previo de los datos se puede recuperar. 2. Se puede revisar los resultados de las operaciones de manipulacin de datos para consultar las tablas con el uso de la sentencia Select.3. Otros usuarios no pueden ver los resultados de las operaciones de manipulacin de datos hechas por el usuario actual. El servidor de Oracle establece la consistencia para asegurar que cada usuario vea los datos como existieron desde el ltimo Commit.4. Las filas afectadas son bloqueadas, es decir, otros usuarios no pueden cambiar los datos de las filas afectadas. 5. Se hacen permanentes todos los cambios pendientes con el uso de la sentencia Commit. Despus de una sentencia Commit:1. Los cambios de datos son escritos en la Base de Datos.2. El estado previo de los datos es perdido permanentemente.3. Todos los usuarios pueden ver los resultados de la transaccin.4. Los bloqueos en las filas afectadas son liberados. Todas las filas estn ahora disponibles para que otros usuarios realicen cambios.5. Todos los Savepoints son borrados.Oracle utiliza un Commit implcito antes y despus de cualquier sentencia DDL. As, incluso si la sentencia DDL no se ejecuta correctamente, no se puede deshacer la sentencia previa puesto que el servidor a usado un Commit.Su sintaxis: comit ;Sentencia RollbackFinaliza la transaccin actual descartando todos los cambios pendientes.La parte de una transaccin puede ser excluida con un Rollback implcito si en la ejecucin de una sentencia es detectado un error. Si una sola sentencia DML falla durante la ejecucin en una transaccin, su efecto es deshacer por medio de una sentencia de nivel Rollback, pero los cambios hechos por las anteriores sentencias DML en la transaccin no son deshechos. Estos cambios pueden ser cometidos o deshechos explcitamente por el usuario.Termine sus transacciones explcitamente con la ejecucin de sentencias Commit y Rollback.Despus de una sentencia Rollback: 1. Los cambios a los datos son deshechos.2. El estado previo de los datos es restablecido.3. Los bloqueos de las filas afectadas son liberados.Su sintaxis: rollback ;

Sentencia SavepointMarca un punto de la transaccin actual. Es como guardar puntos de restauracin para luego poder volver a ellos y no borrarlo todo. Deshace todos los cambios pendientes con el uso de la sentencia Rollback. Para crear un punto de restauracin la sintaxis es:savepoint nb_punto_restauracion ;Para volver hasta un punto de restauracin: rollback to nb_punto_restauracion ;

Ejercicios

Ejercicios

01. Creacin de TablasVamos a crear una tabla nueva. Para ello debemos tener permisos.Crearemos una tabla dentro de con.hr Tables que se llamar Productos, especificando el tipo de datos, el nmero de columnas, la restriccin y un valor por defecto. Para ello escribimos el cdigo:Create table Productos (id_producto number (4),nombre varchar2 (100),precio_unidad number (4,2),tamanio[footnoteRef:6] varchar2 (25)[footnoteRef:7] [6: Los nombres de los objetos no pueden llevar la letra . Los datos s pueden.] [7: La ltima fila nunca lleva coma ( , ) al final.]

)Acabamos de crear una tabla vaca. Para ejecutarla pinchamos sobre Play o sobre Play_con_Escobilla. Si se ha creado bien, debajo de las conexiones debe salir el mensaje Create Table Statement Processed.Para crear una tabla temporal, slo habra que cambiar la primera lnea del cdigo anterior y aadir otra lnea detrs del bloque:Create global temporary table productos_aux (id_producto number (4),nombre varchar2 (100),precio_unidad number (4,2),taman