Beruflich Dokumente
Kultur Dokumente
Iniciacin a
Oracle SQL
Tabla de Contenidos
TEMA 1 - EL MODELO RELACIONAL-------------------------------------------------------------------3
TEMA 2 - EL LENGUAJE S.Q.L.---------------------------------------------------------------------------5
TEMA 3 - FUNCIONES S.Q.L.---------------------------------------------------------------------------10
TEMA 4 - FUNCIONES DE GRUPO--------------------------------------------------------------------14
TEMA 5 - JOIN----------------------------------------------------------------------------------------------17
TEMA 6 - SUBCONSULTAS------------------------------------------------------------------------------19
TEMA 7 - D.M.L.-------------------------------------------------------------------------------------------21
TEMA 8 - D.D.L.-------------------------------------------------------------------------------------------23
TEMA 9 - VISTAS------------------------------------------------------------------------------------------26
TEMA 10 - ENTORNO SQL*PLUS----------------------------------------------------------------------28
TEMA 11 - PL/SQL-----------------------------------------------------------------------------------------33
TEMA 12 - GENERALIDADES DE PL/SQL------------------------------------------------------------38
TEMA 13 - CURSORES-----------------------------------------------------------------------------------45
TEMA 14 - EXCEPCIONES-------------------------------------------------------------------------------50
TEMA 15 - FUNCIONES PL/SQL------------------------------------------------------------------------53
2 | Pgina
Constituye la base para el sistema manejador de b.d. Relacionales (RDBMS).
El modelo de datos E-R se basa en una percepcin de un mundo real que consiste en:
o Una coleccin de objetos bsicos ENTIDADES
o Relaciones entre estos objetos RELACIONES
o Restricciones de los datos Cardinalidad de Asignacin
Una entidad se compone de Atributos.
Diagrama E-R
3 | Pgina
Relaciones entre tablas
Oracle RDBMS
4 | Pgina
Structured Query Language
Establecido como el lenguaje de base de datos relacional estndar.
Existen numerosos productos que soportan SQL, cada uno de ellos con pequeas
diferencias sin apenas importancia (p.ej. Oracle).
El SQL estndar es el publicado por ANSI e ISO.
Caractersticas de S.Q.L.
Ejemplos:
o SELECT empno, ename FROM emp;
o SELECT * FROM emp;
5 | Pgina
Justificacin de etiquetas y datos por defecto:
o Izquierda Fechas y caracteres
o Derecha Datos numricos
Etiquetas y datos, por defecto, se muestran en maysculas.
Posibilidad del uso de alias de columnas.
SQL> SELECT ename AS nombre, sal salario, sal*12 AS Salario Anual FROM emp;
Resultado del ejemplo de Uso de Alias de columna
Operadores:
o Suma (+)
o Resta (-)
o Multiplicacin (*)
o Divisin (/)
Cualquier sentencia SQL
Precedencia de operadores: * / + -
Operadores misma prioridad se evalan de izq. a derecha.
Parntesis sobreescriben reglas de precedencia.
6 | Pgina
S.Q.L. - Filas duplicadas
Las consultas, por defecto, muestran todas las filas, incluyendo las duplicadas.
Las duplicadas se eliminan usando DISTINCT en la clusula SELECT:
Ejemplo de uso de DISTINCT para eliminar filas duplicadas
7 | Pgina
o <= Menor que o igual a
o <> Distinto
o BETWEEN m AND n Entre m y n (inclusive)
o IN (lista) Se encuentra en la lista
o LIKE Se ajusta a un patrn
o IS NULL Es valor nulo
SQL> SELECT ename, saL FROM emp WHERE sal BETWEEN 1000 AND 1500;
SQL> SELECT empno, ename, sal, mgr FROM EMP WHERE mgr IN (7902, 7566, 7788);
SQL> SELECT ename FROM emp WHERE ename LIKE _A%;
Sintaxis de LIKE:
o % representa cero o varios caracteres
o _ representa un solo carcter
SQL> SELECT ename, mgr FROM emp WHERE mgr IS NULL;
SQL> SELECT empno, ename, job, sal FROM emp WHERE sal >= 1100 AND job = CLERK;
SQL> SELECT empno, ename, job, sal FROM emp WHERE sal >= 2000 OR job = MANAGER;
SQL> SELECT ename, job FROM emp WHERE job NOT IN (CLERK, MANAGER, ANALYST);
8 | Pgina
S.Q.L. - Sintaxis de ORDER BY
9 | Pgina
o Nmero
o Fecha
o Conversin
Funciones a nivel de grupo. Tipos:
o Manipulan grupos de filas y devuelven un resultado por cada uno de ellos.
10 | P g i n a
o Devuelve el resto de la divisin de m por n.
SQL> SELECT ROUND(45.923, 2), ROUND(45.923, 0), ROUND(45.923, -1) FROM SYS.DUAL;
o Resultado : 45.92 46 50
SQL> SELECT TRUNC(45.923, 2), TRUNC(45,923), TRUNC(45.923, -1) FROM SYS.DUAL;
o Resultado : 45.92 45 40
Sumar o restar un nmero a/o de una fecha da por resultado una fecha.
Restar dos fechas para encontrar la cantidad de das entre esas fechas.
Sumar horas a una fecha dividiendo la cantidad de horas por 24.
LAST_DAY (fecha)
o Devuelve la fecha del ltimo da del mes que contiene fecha.
ROUND (fecha [,fmt])
o Cuando no se especifica ningn formato, devuelve la fecha del primer da del
mes contenido en fecha. Si fmt=YEAR, encuentra el primer da del ao.
TRUNC (fecha [,fmt])
o Devuelve la fecha con la porcin del da truncado en la unidad especificada
por el modelo de formato fmt. Si se omite el formato, la fecha se trunca en el
da ms prximo.
11 | P g i n a
NEXT_DAY (01-SEP-95, FRIDAY) 08-SEP-95
LAST_DAY (01-SEP-95) 30-SEP-95
ROUND (25-JUL-95, MONTH) 01-AUG-95
ROUND (25-JUL-95, YEAR) 01-JAN-96
TRUNC (25-JUL-95, MONTH) 01-JUL-95
TRUNC (25-JUL-95, YEAR) 01-JAN-95
YYYY / YEAR
o Ao completo en nmero / Ao en letras
MM / MONTH
o N del mes con dos dgitos / Nombre completo del mes
DY / DAY
o Da de la semana en tres letras / Nombre completo del da
fm (fill mode)
o Elimina los espacios en blanco de relleno o suprime ceros a la izquierda
Obtencin de la hora:
o HH / HH12 / HH24
Hora del da / Hora (1-12) / Hora (1-24)
o MI / SS / SSSS
Minutos / Segundos / Segundos despus de medianoche
o AM o PM
Indicador del Meridiano
o Sufijo SP / SPTH o THSP
Deletreo del nmero / Deletreo nmeros ordinales
o Se permiten literales
12 | P g i n a
0 : Fuerza a que se muestra el cero
$ : Signo de dlar
L : Usa el signo de moneda local
. : Imprime el punto decimal
; : Imprime el indicador de millar
Para fechas, los fmt anteriores.
TO_NUMBER (char)
o Convierte una cadena de caracteres con dgitos en un nmero.
TO_DATE (char [,fmt])
o Convierte una cadena de caracteres representando una fecha en un valor de
fecha segn el fmt especificado. Si se omite el fmt, el formato es DD-MON-YY.
NVL (expr1, expr2)
o Convierte un nulo (expr1) a un valor de tipo fecha, cadena o nmero (expr2).
La Funcin DECODE
o Hace las veces de sentencia CASE o IF-THEN-ELSE, para facilitar consultas
condicionales.
Descifra una expresin despus de compararla con cada valor de
bsqueda. Si la expresin es la misma que la bsqueda, se devuelve el
resultado. Si se omite el valor por defecto, se devolver un valor nulo
donde una bsqueda no coincida con ninguno de los valores
resultantes.
SQL> SELECT job, sal, DECODE (job, ANALYST, sal*1.1, CLERK, sal*1.15, MANAGER, sal*1.20,
sal) AS Nuevo salario FROM emp;
Si job = ANALYST Entonces el salario se incrementa en un 10%
Si job = CLERK Entonces se incrementa en un 15%
Si jog = MANAGER Entonces se incrementa en un 20%
Para otro caso, entones no hay incremento de salario
13 | P g i n a
o Cantidad de filas con expr no nulo. Con * se cuentan todas las filas incluyendo
duplicadas y valores nulos.
MAX ([DISTINCT | ALL] expr)
o Valor mximo de expr.
MIN ([DISTINCT | ALL] expr)
o Valor mnimo de expr., ignorando los valores nulos.
Esta media no es correcta porque se han ignorado las filas cuya comisin es nula.
Solucin: Uso de la funcin NVL para forzar a las funciones de grupo que admitan los
valores nulos.
14 | P g i n a
Crea grupo de datos, por lo tanto, se pueden usar funciones de grupo para devolver
informacin resumida para cada grupo.
Cualquier columna o expresin en la SELECT que no sea una funcin agregada, tiene
que ser especificada en la clusula GROUP BY
o SQL> SELECT deptno, COUNT(ename) FROM emp;
No puede usar una clusula WHERE para restringir grupos. Utilice la clusula HAVING
para restringir grupos.
o SQL> SELECT deptno, AVG(sal) FROM emp WHERE AVG(sal) > 2000 GROUP BY deptno;
15 | P g i n a
TEMA 5 - JOIN
S.Q.L. - Concepto de JOIN
16 | P g i n a
La condicin de JOIN se escribe en la clusula WHERE.
Si existen columnas con el mismo nombre en las tablas seleccionadas, se debern
nombrar los campos
Ejemplo de JOIN
Ya que la columna DEPTNO es igual en ambas tablas, sta debe ir prefijada por el
nombre de la tabla para evitar la ambigedad.
En este ejemplo se han usado alias de tablas (e para la tabla emp y s para la tabla
salgrade).
17 | P g i n a
En este ejemplo la clusula WHERE contiene la combinacin "dnde un jefe de un
trabajador coincide con el nmero de empleado para el jefe".
TEMA 6 - SUBCONSULTAS
S.Q.L. - Cundo subconsultas?
18 | P g i n a
S.Q.L. - Sintaxis de una subconsulta
Devuelven ms de un registro
19 | P g i n a
Se utilizan comparadores multiregistro:
o IN TRUE si se encuentra en la lista.
o ANY (y sinnimo SOME) TRUE si la condicin se cumple con algn
registro de la lista devuelta por la subconsulta.
o ALL TRUE si la condicin se cumple con todos los registros
de la lista devuelta por la subconsulta.
El operador NOT puede ser utilizado con los operadores IN, ANY y ALL.
Puede utilizar una subconsulta en una clusula FROM de una sentencia SELECT:
TEMA 7 - D.M.L.
S.Q.L. - Manipulacin de Datos (DML)
20 | P g i n a
Estas sentencias se completan con los comandos de control de transaccin (DCL), las
cuales aseguran la consistencia de los datos.
o COMMIT Finaliza la transaccin actual haciendo que todos los cambios
pendientes pasen a ser permanentes.
o ROLLBACK Finaliza la transaccin en curso descartando todos los
cambios pendientes.
o SAVEPOINT Establece una "marca" dentro de la transaccin en curso,
usada por COMMIT o ROLLBACK.
Mtodo Explcito: Especificar NULL o el string vaco (), para cadenas y fechas, en la
lista de VALUES:
21 | P g i n a
S.Q.L. - La Sentencia UPDATE
P.ej.: Modificar el oficio y departamento del empleado 7698, con los valores
correspondientes actualmente al empleado 7499:
22 | P g i n a
TEMA 8 - D.D.L.
S.Q.L. - Definicin de Datos (DDL)
23 | P g i n a
Necesario tener privilegio CREATE TABLE.
Ha de especificar:
o Nombre de tabla
o Para las columnas: nombre, tipo de dato y tamao.
Se puede crear una tabla e insertar filas combinando el comando CREATE TABLE con
la opcin AS subconsulta.
Es necesario hacer coincidir la cantidad de columnas especificadas con las de la
subconsulta.
Si no se indican nombres de columnas, stas sern los mismos que los de la
subconsulta.
24 | P g i n a
Ejemplo de creacin de tabla por subconsulta
Puede cambiar el tipo de datos de una columna, su tamao y valor por defecto
Si cambia el valor por defecto, afectar slo a sucesivas inserciones en la tabla.
25 | P g i n a
Permite cambiar el nombre de una tabla, vista, secuencia o sinnimo.
Debe ser el propietario del objeto.
TEMA 9 - VISTAS
S.Q.L. - Concepto de Vista
Una vista es una tabla lgica basada en una tabla u otra vista.
No contiene datos en s misma, pero es como una ventana a travs de la cual se
pueden ver o cambiar los datos de las tablas.
Podemos representar con ellas subconjuntos lgicos o combinaciones de datos.
Las tablas sobre las cuales se basa una vista se llaman tablas base.
Se almacenan en el Diccionario de Datos, USER_VIEWS.
26 | P g i n a
Para realizar consultas complejas de manera fcil.
Para obtener una independencia de los datos
Para presentar diferentes vistas de los mismos datos.
FORCE: Crea la vista sin importar que la tabla base exista o no.
WITH CHECK OPTION: Especifica que solamente las filas accesibles a la vista pueden
ser insertadas o actualizadas.
CONSTRAINT: Nombre asignado a la restriccin CHECK OPTION.
WITH READ ONLY: Asegura que ninguna operacin DML pueda realizarse sobre esta
vista.
Al borrar una vista no perder los datos, porque la vista est basada en tablas
subyacentes de la B.D.
nicamente el creador o un usuario con el privilegio DROP ANY VIEW puede eliminar
una vista.
27 | P g i n a
No es posible modificar datos en la vista si contiene cualquiera de las condiciones
anteriores, columnas definidas por expresiones o la pseudocolumna ROWNUM
No se puede agregar datos si la vista contiene cualquiera de las condiciones
anteriores o cualquier columna NOT NULL no incluida por la vista (tabla base).
Simplifican el acceso a los objetos al crear otro nombre para un objeto (sinnimo).
Hacen referencia a una tabla propia o de otro usuario.
Permite acortar la longitud de los nombres de los objetos a la vez que elimina la
necesidad de cualificar el objeto con un esquema.
El DBA puede crear un sinnimo pblico accesible a todos los usuarios.
28 | P g i n a
Desde la lnea de comandos: sqlplus [username[/password[@database]]]
A[PPEND] texto
C[HANGE] /antiguo /nuevo
C[HANGE] /texto /
CL[EAR] BUFF[ER]
DEL [n] [m]
I[INPUT] [texto]
L[IST] [n] [m]
R[UN]
n [texto]
0 texto
Use una variable precedida con un ampersand (&) para pedir un valor al usuario:
29 | P g i n a
Si la variable no existe, SQL*PLUS le solicita al usuario un valor. SQL*PLUS no
descarta la nueva variable una vez que esta es usada.
30 | P g i n a
SQL*PLUS - Comando ACCEPT
Verifique los valores que tiene definidos por medio del comando SHOW.
ARRAY[SIZE] { 20 | n }
COLSEP { _ | texto }
FEED[BACK] { 6 | n | ON | OFF]
HEA[DING] { OFF | ON }
LIN[ESIZE] {80 | n }
LONG { 80 | n }
PAGES[IZE] { 24 | n }
PAU[SE] { OFF | ON | text }
TERM[OUT] { OFF | ON }
COL[UMN] [opcin_de_columna]
BRE[AK] [ON elemento_del_informe]
TTI[TLE] [texto | OFF | ON]
BTI[TLE] [texto | OFF | ON]
31 | P g i n a
FOR[MAT] formato Cambia la visualizacin de la columna segn un modelo de
formato.
HEA[DING] texto Define la cabecera para una columna
JUS[TIFY] {alineacin} Alinea la cabecera de una columna a la izqda., centro
o derecha.
PRI[NT] / NOPRI[NT] Muestra / Oculta la columna.
NUL[L] texto Especifica el texto a visualizar en caso de valores nulos.
WRA[PPED] Contina escribiendo en las lneas siguientes.
32 | P g i n a
TEMA 11 - PL/SQL
PL/SQL - Qu es PL/SQL?
[DECLARE]
Define objetos PL/SQL que sern utilizados
dentro del mismo bloque
BEGIN
33 | P g i n a
Sentencias Ejecutables
[EXCEPTION]
Qu hacer si la accin ejecutada causa error
END;
PROCEDURE nombre IS
Seccin Declarativa
BEGIN
Seccin Ejecutable
[EXCEPTION]
Seccin de Excepciones
END;
Asignacin:
Inicializacin:
34 | P g i n a
Por defecto, todas las variables se inicializan a NULL.
ESCALARES
BOOLEANAS
COMPUESTAS
LOB
DE ENLACE (BIND)
VARCHAR2 (longitud_mxima)
NUMBER [(precisin, escala)]
DATE
CHAR [(longitud_mxima)]
LONG
LONG RAW
BOOLEAN
BINARY_INTEGER
A una variable Boolean slo se le pueden asignar los valores: TRUE, FALSE o NULL.
Estas variables estn conectadas por los operadores lgicos AND, OR y NOT.
Tipos:
o REGISTROS PL/SQL
o TABLAS PL/SQL
Contienen componentes internos
Sintaxis:
35 | P g i n a
Donde declaracin campo significa:
El nmero y los tipos de datos de las columnas de la tabla pueden no ser conocidos.
Simplifica la programacin al no tener que definir explcitamente los campos y tipos
del registro.
Es til para realizar recuperaciones de filas con la sentencia SELECT:
36 | P g i n a
PL/SQL - Tablas PL/SQL
Sintaxis:
Ejemplo:
37 | P g i n a
Permiten almacenar bloques de datos no estructurados, como pantallas de texto,
imgenes grficas, vdeo clips, y sonido, de hasta 4 Gb. de tamao.
S.Q.L. Ejercicios
Basados en las tablas emp y dept del usuario Scott de la base de datos de Oracle.
38 | P g i n a
Mostrar el n de empleado, job, nombre, as como la comisin. Si no tiene comisin,
poner el texto Sin Comisin. La informacin debe de salir ordenada por n de
empleado en descendente.
N de empleado con el salario mas alto.
Nombre de deptno y Nombre de empleado que mas tarde entr en la empresa, para
cada uno de los departamentos.
Incrementar un 20% el salario de todos los empleados que no son de Bostn.
Borrar los empleados cuyo nombre no comienza por A , que no son Analistas y que
trabajan en New York.
Nombre de empleado, suma de salario y comisin para los empleados cuyo salario es
superior a la media de su departamento.
Comentarios en PL/SQL:
o Anteponga a los comentarios de una sola lnea dos guiones (--) a modo de
prefijo.
o Coloque comentarios de varias lneas entre /* y */.
Operadores de PL/SQL:
39 | P g i n a
BETWEEN, IN
AND Conjuncin
OR Inclusin
Cuando trabaje con valores nulos puede evitar algunos de los errores ms habituales
si recuerda las siguientes reglas:
o Las comparaciones en las que se incluyen valores nulos siempre resultan
NULL.
o Si se aplica el operador lgico NOT a un valor nulo resulta NULL.
o En las sentencias de control condicionales, si la condicin resulta NULL, no se
ejecutarn las sentencias asociadas.
40 | P g i n a
SELECT recupera exactamente UNA fila.
INSERT aade una fila.
UPDATE modifica una o ms filas existentes.
DELETE suprime una o ms filas existentes.
COMMIT hace permanentes todas las modificaciones pendientes.
ROLLBACK elimina todas las modificaciones pendientes.
SAVEPOINT marca un punto intermedio en el procesamiento de las transacciones.
Sintaxis:
Recuerde, slo se debe de recuperar una fila. Ms de una fila provocar errores.
41 | P g i n a
PL/SQL - Actualizacin de Datos
Aumente el salario de todos los empleados de la tabla emp que son Analistas:
42 | P g i n a
PL/SQL - Control Flujo de Ejecucin
PL/SQL - Sentencia IF
Sintaxis:
43 | P g i n a
PL/SQL - Flujo de IF-THEN-ELSIF
Sintaxis:
44 | P g i n a
Donde condicin es una expresin o variable booleana (TRUE, FALSE o NULL).
Sintaxis:
Sintaxis:
Ejemplo:
45 | P g i n a
S.Q.L. - Ejercicios Bloques Annimos
Basados en las tablas Emp & Dept del esquema del usuario Scott de Oracle
Actualizar los vendedores con una comisin mayor que 350$ con un incremento del
15% de su salario. Si la operacin afecta a mas de tres empleados, deshacer la
transaccin, en cualquier otro caso validar la transaccin. Informar por pantalla de la
operacin realizada.
Insertar en la tabla TEMP 100 filas. En la primera columna se insertar un ndice
secuencial (1, 2, 3...) y en la segunda columna un comentario indicando si el nmero
generado es par o impar.
Actualizar el trabajo a DIRECTOR a todos aquellos empleados cuyo salario sea mayor
que 2000$. Almacenar el nmero de empleados actualizados por la operacin en la
tabla TEMP. Si los afectados son mas de cinco personas, borrar los empleados cuyo
salario sea mayor que 3000$, insertar en la tabla TEMP el nmero de empleados
borrados y validar la transaccin.
Calcular por medio de un bloque PL/SQL 9i annimo el total de ganancias de los
empleados (salario y comisin) y cuntos de stos tienen un salario superior a 2000$
para todos los departamentos de la empresa.
46 | P g i n a
TEMA 13 - CURSORES
PL/SQL - Definicin de Cursor
Sintaxis:
Sintaxis:
47 | P g i n a
Para los cursores declarados con la clusula FOR UPDATE, la sentencia OPEN bloquea
estas filas.
Sintaxis:
Sintaxis:
48 | P g i n a
PL/SQL - Atributos %NOTFOUND, %ROWCOUNT
Ejemplo:
Sintaxis:
Sintaxis:
49 | P g i n a
Permite abrir un cursor varias veces con un juego activo distinto cada vez.
Cada parmetro formal de la declaracin del cursor debe tener un parmetro real
correspondiente en la sentencia OPEN.
La sintaxis de los parmetros es:
Sintaxis:
Sintaxis:
Incluya la clusula FOR UPDATE en la definicin del cursor para bloquear las filas.
Especifique WHERE CURRENT OF en la sentencia UPDATE o DELETE para referirse a la
fila actual del cursor.
50 | P g i n a
S.Q.L. - Ejercicios Cursores
TEMA 14 - EXCEPCIONES
51 | P g i n a
PL/SQL - Concepto de Excepcin
Sintaxis:
52 | P g i n a
PL/SQL - Excepciones de Usuario
Ejemplo:
PL/SQL - RAISE_APPLICATION_ERROR
53 | P g i n a
Sintaxis:
PL/SQL - RAISE_APPLICATION_ERROR
54 | P g i n a
TEMA 15 - FUNCIONES PL/SQL
PL/SQL - Definicin de Funcin
55 | P g i n a
No se permiten comandos INSERT, UPDATE o DELETE.
La funcin no puede llamar a otro subprograma que rompa una de las restricciones
arriba indicadas.
Para quitar una funcin de la parte del servidor, utilizando SQL*Plus, ejecutar el
comando DROP FUNCTION.
Sintaxis:
Crear la funcin ALTA_DEPT con tres argumentos: nmero, nombre y localidad del
departamento. Este
procedimiento debe comprobar que los nmeros de departamento son mltiplos de
10, si no es as dara un error.
Crear la funcin BAJA_DEPT con un argumento. Dado un nmero de departamento,
borrarlo.
Crear la funcin MOD_DEPT con dos argumentos. Dado un nmero de departamento,
actualizar la localidad
al destino indicado en el parmetro. Informar con un booleano si se ha realizado
correctamente la operacin.
http://www.mundoracle.com/vistas.html?Pg=sql_plsql_9.htm
https://sites.google.com/site/tecceilpiii/home/7---sql---structured-query-lenguaje
56 | P g i n a
http://www.friccio.com/articulos.php
57 | P g i n a