Sql-Oracle 10G
Sql-Oracle 10G
Sql-Oracle 10G
Lenguaje SQL
Autor: CLEFormación S.L
Localidad y año de impresión: Madrid, 2010
Copyright: CLEFormación
Oracle Designer, Oracle Reports, PL/SQL, SQL*Plus,Oracle Enterprise Manager son marcas
registradas por Oracle Corporation
Windows, Visual Basic son marcas registradas por Microsoft Corporation.
Índice 1
Introducción ....................................................................................................................2-1
Sentencia SELECT..........................................................................................................2-1
Selección de todos los datos de una tabla ......................................................................... 2-1
Selección de ciertas columnas de una tabla ...................................................................... 2-2
Cláusula FROM .................................................................................................................. 2-2
Cláusula WHERE ............................................................................................................... 2-3
Cláusula ORDER BY .......................................................................................................... 2-3
Cláusula GROUP BY.......................................................................................................... 2-4
Operadores SQL. ............................................................................................................2-5
Operadores aritméticos ...................................................................................................... 2-5
Operadores concatenación ................................................................................................ 2-5
Operadores de conjuntos ................................................................................................... 2-6
Condiciones SQL. ...........................................................................................................2-8
Condiciones de comparación ............................................................................................. 2-8
Condiciones lógicas............................................................................................................ 2-9
Condiciones de pertenencia. .............................................................................................. 2-9
Condiciones de rango de valores. .................................................................................... 2-10
Condición NULL. .............................................................................................................. 2-10
Condición EXISTS. ........................................................................................................... 2-11
Condición LIKE. ................................................................................................................ 2-11
2 Índice
Funciones. .....................................................................................................................3-12
Funciones Numéricas ....................................................................................................... 2-12
Funciones de cadena de caracteres que devuelven caracteres ...................................... 2-12
Funciones de cadena de caracteres que devuelven números......................................... 2-13
Funciones de fecha y hora ............................................................................................... 2-13
Funciones de conversión.................................................................................................. 2-13
Máscaras de formato. Formatos numéricos ..................................................................... 2-13
Máscaras de formato. Formatos tipo fecha. ..................................................................... 2-14
Otras funciones. ............................................................................................................... 2-16
Variables de entorno. ....................................................................................................... 2-16
Funciones de grupo. La cláusula GROUP BY ................................................................. 2-17
Funciones de grupo. La cláusula HAVING....................................................................... 2-19
Combinaciones de Tablas en versiones anteriores a la 9i .......................................2-20
EQUI JOIN ........................................................................................................................ 2-20
OUTER JOIN .................................................................................................................... 2-21
Uniones de SQL: 1999 ..................................................................................................2-23
Uniones cruzadas ............................................................................................................. 2-23
Uniones naturales ............................................................................................................. 2-23
Uniones de igualdad y la cláusula USING. ...................................................................... 2-24
Predicados de Unión y la Cláusula ON ............................................................................ 2-24
OUTER JOIN. Uniones externas. ..................................................................................... 2-25
La expresión CASE.......................................................................................................2-26
CASE simple..................................................................................................................... 2-26
CASE buscada ................................................................................................................. 2-26
NULLIF ............................................................................................................................. 2-27
COALESCE ...................................................................................................................... 2-27
SUBCONSULTAS ..........................................................................................................2-27
Recuperación jerárquica ..............................................................................................2-30
DML. Lenguaje de manipulación de datos .................................................................2-32
INSERT............................................................................................................................. 2-32
UPDATE ........................................................................................................................... 2-33
DELETE ............................................................................................................................ 2-34
MERGE............................................................................................................................. 2-35
Sentencias Transaccionales........................................................................................2-36
COMMIT ........................................................................................................................... 2-37
SAVEPOINT ..................................................................................................................... 2-37
ROLLBACK....................................................................................................................... 2-38
Índice 3
Introducción ....................................................................................................................3-1
Comandos DDL ...............................................................................................................3-1
CREATE TABLE ..............................................................................................................3-1
Sintaxis CREATE TABLE ................................................................................................... 3-1
Integridad de Datos ........................................................................................................3-3
Reglas de Negocio ............................................................................................................. 3-3
Integridad de Entidades...................................................................................................... 3-3
Integridad Referencial ........................................................................................................ 3-4
Nombres de las Restricciones ............................................................................................ 3-5
Cómo Definir Una Restricción ............................................................................................ 3-6
Restricciones: características. ............................................................................................ 3-7
Comprobación de restricciones aplazada .......................................................................... 3-7
Restricciones obligatorias................................................................................................... 3-8
Restricción UNIQUE o PRIMARY KEY utilizando un índice no único. .............................. 3-9
CREATE INDEX .............................................................................................................3-10
Tablas tipo índice ............................................................................................................. 3-10
CREATE SYNONYM ......................................................................................................3-12
CREATE VIEW ...............................................................................................................3-12
CREATE SEQUENCE ....................................................................................................3-13
ALTER TABLE ...............................................................................................................3-14
Añadir Restricciones ......................................................................................................... 3-15
Desactivar Restricciones .................................................................................................. 3-15
Activar Restricciones ........................................................................................................ 3-16
Excepciones Activando Restricciones .............................................................................. 3-16
Borrar Restricciones ......................................................................................................... 3-18
Borrar Columnas .............................................................................................................. 3-18
El Comando ALTER SEQUENCE.................................................................................3-19
DROP TABLE ................................................................................................................3-19
DROP INDEX .................................................................................................................3-19
DROP VIEW ...................................................................................................................3-20
DROP SYNONYM ..........................................................................................................3-20
DROP SEQUENCE ........................................................................................................3-20
RENAME ........................................................................................................................3-20
El Comando TRUNCATE ..............................................................................................3-21
4 Índice
ANEXO D. Funciones
Introducción a SQL
TABLA DE CONTENIDOS
OBJETOS DE UN ESQUEMA
Un esquema es una colección de estructuras lógicas de datos. Los esquemas son
propiedad de usuarios de base de datos.
El nombre del esquema de base de datos coincide con el nombre de los usuarios.
Todo esquema de base de datos debe de pertenecer a un usuario, pero pueden existir
usuarios de base de datos que no tengan su propio esquema.
Los objetos son los siguientes:
Clusters Restricciones
Enlaces de base de datos Disparadores
Tablas Vistas
Sinónimos Procedimientos almacenados
Funciones almacenadas
Paquetes Secuencias
Dimensiones Librerías de procedimientos
Tablas organizadas como índices Índices
Clases Java Recurso Java
Fuente Java Vistas materializadas
Logs de vistas materializadas Objetos tabla
Objetos Objetos vista
Contextos Directorios
Fichero de parámetros SPFILE Perfiles
Roles Segmentos UNDO o Rollback
Tablespaces Usuarios
1-4 Introducción a SQL
• La longitud del nombre del objeto debe de estar comprendida entre 1 carácter y
30. Las excepciones son:
El nombre de la base de datos como máximo puede tener 8 caracteres.
Los enlaces de base de datos pueden tener hasta 128 caracteres.
• Si el nombre dado al objeto es entrecomillado puede ser una palabra reservada,
en el caso contrario no puede ser una palabra reservada. No es recomendable
utilizar palabras reservadas para nombrar objetos de base de datos.
• El nombre del objeto debe de comenzar por un carácter alfabético en el caso de
los no entrecomillados.
• Los nombres no entrecomillados pueden empezar por cualquier carácter.
• Los nombres de los objetos deben de ser únicos en el esquema al que pertenecen.
Por ejemplo: dos tablas pueden llamarse igual si pertenecen a distintos esquemas.
• El nombre de las columnas de una tabla debe de ser único en la tabla, pero tablas
distintas pueden tener los mismos nombres de columnas.
Dónde:
•
Esquema Nombre del esquema que contiene el objeto. Propietario del objeto.
•
Nombre_objeto nombre del objeto
•
Parte objeto Parte del objeto. En el caso de un tabla o vista una columna. No
todos los objetos de base de datos tienen partes.
• Enlace de base de datos nombre del enlace de base de datos en el que reside
el objeto que se quiere referenciar.
Ejemplo:
CONNECT usuario1/contraseña
SELECT * FROM employees;
Introducción a SQL 1-5
CONNECT usuario1/contraseña
SELECT * FROM usuario2.employees;
Además se pueden utilizar alias tanto para el nombre de las tablas referenciadas en la
consulta, como para el nombre de las columnas.
Introducción .......................................................................................................................1
Sentencia SELECT.............................................................................................................1
Selección de todos los datos de una tabla ............................................................................ 1
Selección de ciertas columnas de una tabla ......................................................................... 2
Cláusula FROM ..................................................................................................................... 2
Cláusula WHERE .................................................................................................................. 3
Cláusula ORDER BY ............................................................................................................. 3
Cláusula GROUP BY............................................................................................................. 4
Operadores SQL. ...............................................................................................................5
Operadores aritméticos ......................................................................................................... 5
Operadores concatenación ................................................................................................... 5
Operadores de conjuntos ...................................................................................................... 6
Operador UNION .............................................................................................................. 6
Operador UNION ALL ...................................................................................................... 6
Operador INTERSECT ..................................................................................................... 6
Operador MINUS .............................................................................................................. 6
Condiciones SQL. ..............................................................................................................8
Condiciones de comparación ................................................................................................ 8
Condiciones lógicas............................................................................................................... 9
Condiciones de pertenencia. ................................................................................................. 9
Condiciones de rango de valores. ....................................................................................... 10
Condición NULL. ................................................................................................................. 10
Condición EXISTS. .............................................................................................................. 11
Condición LIKE. ................................................................................................................... 11
Funciones. ........................................................................................................................12
Funciones Numéricas .......................................................................................................... 12
Funciones de cadena de caracteres que devuelven caracteres ......................................... 12
Funciones de cadena de caracteres que devuelven números............................................ 13
Funciones de fecha y hora .................................................................................................. 13
Funciones de conversión..................................................................................................... 13
Máscaras de formato. Formatos numéricos ........................................................................ 13
Máscaras de formato. Formatos tipo fecha. ........................................................................ 14
Otras funciones. .................................................................................................................. 16
Variables de entorno. .......................................................................................................... 16
Funciones de grupo. La cláusula GROUP BY .................................................................... 17
Funciones de grupo. La cláusula HAVING.......................................................................... 19
Combinaciones de Tablas en versiones anteriores a la 9i .......................................... 20
EQUI JOIN ........................................................................................................................... 20
OUTER JOIN ....................................................................................................................... 21
Uniones de SQL: 1999 .....................................................................................................23
Uniones cruzadas ................................................................................................................ 23
Uniones naturales ................................................................................................................ 23
Uniones de igualdad y la cláusula USING. ......................................................................... 24
Predicados de Unión y la Cláusula ON ............................................................................... 24
OUTER JOIN. Uniones externas. ........................................................................................ 25
LEFT OUTER JOIN: ....................................................................................................... 25
RIGHT OUTER JOIN: .................................................................................................... 25
FULL OUTER JOIN: ....................................................................................................... 25
La expresión CASE..........................................................................................................26
CASE simple........................................................................................................................ 26
CASE buscada .................................................................................................................... 26
NULLIF ................................................................................................................................ 27
COALESCE ......................................................................................................................... 27
SUBCONSULTAS .............................................................................................................27
Recuperación jerárquica ................................................................................................. 30
DML. Lenguaje de manipulación de datos .................................................................... 32
INSERT................................................................................................................................ 32
UPDATE .............................................................................................................................. 33
DELETE ............................................................................................................................... 34
MERGE................................................................................................................................ 35
Sentencias Transaccionales........................................................................................... 36
COMMIT .............................................................................................................................. 37
SAVEPOINT ........................................................................................................................ 37
ROLLBACK.......................................................................................................................... 38
Lenguaje de manipulación de datos. DML 2-1
INTRODUCCIÓN
SENTENCIA SELECT.
La recuperación de información (consulta), se realiza mediante la sentencia SELECT.
Básicamente, SELECT se encarga de recoger datos de una o varias tablas. Ahora bien,
podemos estar interesados en todos los datos de unas columnas concretas de las tablas,
en datos que cumplan una cierta condición... para ello, debemos conocer muy bien su
sintaxis que, básicamente, es la siguiente:
JOB_ID JOB_TITLE
---------- -----------------------------------
AD_PRES President
AD_VP Administration Vice President
(...)
CLÁUSULA FROM
La información que muestra la sentencia SELECT se extrae de una o varias tablas o
vistas.
Los nombres de la tabla(s) a las que pertenecen las columnas de la sentencia SELECT
deben de aparecer en las tablas especificadas en la cláusula FROM.
El usuario conectado a la base de datos puede consultar datos pertenecientes a tablas de
su propio esquema o a tablas de otros esquemas. En este caso es necesario anteponer el
propietario de la tabla en la cláusula FROM.
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
(…)
Lenguaje de manipulación de datos. DML 2-3
Se pueden utilizar alias para los nombres de las tablas, de tal manera que se especifica el
nombre del alias en vez del nombre de la tabla en la lista de columnas de la sentencia
SELECT.
CLÁUSULA WHERE
Es en la cláusula WHERE donde se especifican las condiciones que debe cumplir lo que se
está buscando.
Los predicados utilizados en la condición de búsqueda son los encargados de filtrar los
datos antes de mostrarlos al usuario. Estos predicados pueden ser simples o complejos y
se pueden utilizar operadores y funciones en ellos.
Ejemplo seleccionar la información de la tabla countries cuyo código sea ‘AR’
CO COUNTRY_NAME REGION_ID
-- ---------------------------------------- ----------
AR Argentina 2
CLÁUSULA ORDER BY
El resultado de la consulta, por defecto, puede aparecer en cualquier orden.
La cláusula ORDER BY se utiliza para determinar el orden en el que se muestra el
resultado.
Permite ordenar por más de una columna y se admite la ordenación por posición.
La ordenación por defecto es ascendente, pero se puede cambiar utilizando DESC.
El conjunto de caracteres de ordenación está basado en el parámetro NLS_SORT que si
no se especifica toma los valores de NLS_LANGUAGE.
Ejemplo Seleccionar todos los empleados ordenando el resultado por nombre y
salario.
CLÁUSULA GROUP BY
Los resultados obtenidos de la sentencia SELECT se pueden agrupar y devolver una sola
fila resumen de la información solicitada.
Las expresiones en la cláusula GROUP BY pueden contener cualquier columna
perteneciente a las tablas o vistas especificadas en la cláusula FROM.
Ejemplo Obtener el salario mínimo y el máximo para el tipo de trabajo ‘ST_MAN’
agrupado por departamento.
En la cláusula GROUP BY se utilizan funciones de grupo para obtener informes con totales
y subtotales para las columnas.
Lenguaje de manipulación de datos. DML 2-5
OPERADORES SQL.
Los operadores SQL se utilizan para manipular los datos de manera individual y devolver
el valor resultante de la operación.
Los operadores o argumentos suelen estar representados por palabras claves o
caracteres especiales (EXISTS, >=).
Genéricamente los operadores se pueden dividir en:
• Unarios Solamente opera con un operando.
• Binarios Utilizan dos o más operandos para realizar la operación.
Cuando en una misma expresión aparecen más de un operador, Oracle evalúa los
operadores siguiendo un orden de preferencia de mayor a menor, y en el caso de los
operadores con la misma preferencia los evalúa de izquierda a derecha.
OPERADORES ARITMÉTICOS
Los operadores aritméticos se utilizan para sumar, restar, multiplicar, dividir o negar
valores numéricos.
El resultado de la operación siempre es un número.
UNARIOS
BINARIOS
OPERADORES CONCATENACIÓN
El operador || concatena cadenas de caracteres y tipos de datos CLOB.
El resultado es una cadena de caracteres.
El tipo de datos resultante depende del tipo de datos de los operandos, pudiendo
combinar tipos de datos CHAR, VARCHAR2 y CLOB en la concatenación.
Ejemplo
'PAÍS:'||COUNTRY_NAME
----------------------------------------------
País: Argentina
País: Australia
País: Belgium
País: Brazil
2-6 Lenguaje de manipulación de datos. DML
OPERADORES DE CONJUNTOS
Los operadores de conjuntos combinan los resultados de dos consultas con datos
comunes en un único resultado.
Las restricciones de estos operadores son las siguientes:
• Los operadores de conjuntos no pueden operar con columnas de tipo BLOB,
CLOB, BFILE, VARRAY, o tablas anidadas.
• Los operadores UNION, INTERSECT y MINUS no son válidos con columnas LONG.
• Si la lista de columnas que preceden al operador de columnas contiene alguna
expresión, hay que calificarla con un alias.
• No está permitido la cláusula FOR UPDATE.
• No se puede utilizar la cláusula ORDER BY en la subconsulta de los operadores de
conjuntos.
OPERADOR UNION
Devuelve todas las filas distintas seleccionadas por ambas consultas.
OPERADOR INTERSECT
Devuelve todas las filas comunes a ambas consultas eliminando los duplicados.
OPERADOR MINUS
Devuelve todas las filas seleccionadas por la primera consulta que no estén recuperadas
en la primera consulta.
Ejemplos:
CONDICIONES SQL.
Las condiciones son combinaciones de operadores lógicos y expresiones que devuelven
un resultado. El resultado puede ser VERDADERO, FALSO o DESCONOCIDO.
CONDICIONES DE COMPARACIÓN
Condiciones de comparación
SELECT *
= Comprueba la igualdad FROM employees
WHERE salary = 2500;
!= SELECT *
<> No igualdad, distinto FROM employees
^= WHERE salary != 2500;
SELECT *
> Mayor que FROM employees
WHERE salary > 2500;
SELECT *
< Menor que FROM employees
WHERE salary < 2500;
SELECT *
>= Mayor o igual que FROM employees
WHERE salary >= 2500;
Condiciones de comparación
Condición PROPÓSITO Ejemplo
SELECT * FROM employees
<= Menor o igual que WHERE salary <= 2500;
Compara los valores de la lista devuelta.
Debe de ir precedido de =,!=,<,>,>=,<=. SELECT * FROM employees
El resultado es verdadero si la comparación WHERE salary = ANY
ANY es verdadera para alguno de los valores (SELECT salary
SOME devueltos por la SELECT subordinada, y FROM employees
WHERE department_id =
falso si la SELECT devuelve una tabla vacía,
60);
o si la comparación devuelve falso en todos
los valores de la SELECT subordinada.
Compara los valores de la lista devuelta.
Debe de ir precedido de =,!=,<,>,>=,<=.
El resultado es verdadero si la comparación
es verdadera para todos los valores SELECT * FROM employees
devueltos por la SELECT subordinada, falso WHERE salary >=
ALL ALL ( 2500, 3000);
si para algún valor no nulo se obtiene falso
en la comparación (también puede serlo si
algún valor es nulo), y desconocido si para
todo valor no nulo devuelve cierto la
comparación.
Lenguaje de manipulación de datos. DML 2-9
CONDICIONES LÓGICAS
Las condiciones lógicas combinan el resultado de dos componentes de una condición para
obtener un solo resultado.
Son utilizadas para agrupar condiciones
Condiciones de comparación
Condición PROPÓSITO Ejemplo
Devolver verdadero en el caso de que SELECT *
NOT la condición sea falsa. FROM employees
Verdadero en el caso contrario. WHERE NOT (job_id IS NULL);
SELECT *
Devolver verdadero si los dos
FROM employees
componentes de la condición son WHERE job_id = 'PU_CLERK'
AND
verdaderos. AND department_id = 50;
Falso en caso contrario
Devolver verdadero si uno de los SELECT *
componentes de la condición es FROM employees
OR verdadero. WHERE job_id = 'PU_CLERK'
OR department_id = 50;
Falso en caso de que ambos
componentes sean falsos.
CONDICIONES DE PERTENENCIA.
Las condiciones de pertenencia evalúan si los operandos de la parte izquierda de la
comparación pertenecen o no a la lista de valores o subconsulta situada en la parte
derecha.
CONDICIONES DE PERTENENCIA
Condición PROPÓSITO Ejemplo
SELECT * FROM employees
Averiguar si el resultado de la evaluación de
WHERE salary IN( 2500,
una expresión está incluido en la lista de 3000, 2000;
valores especificado tras la cláusula IN.
Si expresión no es nulo y pertenece a la lista SELECT * FROM employees
IN WHERE salary IN
de valores (o el SELECT), obtendremos
(SELECT salary
verdadero, si no pertenece falso, y si es nulo,
FROM employees
desconocido. WHERE department_id =
Equivalente al operador de comparación ANY 60);
Averiguar si el resultado de la evaluación de SELECT * FROM employees
WHERE salary NOT IN (
una expresión no está incluido en la lista de 2500, 3000, 2000);
valores especificado tras la cláusula NOT IN.
NOT IN Si expresión no es nulo y no pertenece a la SELECT * FROM employees
lista de valores (o el SELECT), obtendremos WHERE salary NOT IN
(SELECT salary
verdadero, si pertenece falso, y si es nulo,
FROM employees
desconocido. WHERE department_id =
Equivalente al operador de comparación !=ALL. 60);
2-10 Lenguaje de manipulación de datos. DML
CONDICIÓN NULL.
La condición NULL evalúa si el operando de la parte izquierda es un valor nulo.
Condición NULL
CONDICIÓN EXISTS.
La condición EXISTS evalúa si el operando existe en el las filas retornadas por la
subconsulta de la parte derecha.
Condición EXITS
CONDICIÓN LIKE.
Con la condición LIKE se establece un patrón de búsqueda para el caso de las columnas
con valores que sean de tipo carácter.
Hay dos caracteres que son especiales, '_' y '%'.
El primero tiene el significado de ser sustituido por un carácter cualquiera, y el segundo
por una subcadena completa.
Condición LIKE
FUNCIONES.
Una función SQL es similar a un operador ya que manipula los datos de entrada y
devuelve un valor.
Las funciones SQL convierten el tipo de dato que reciben como argumento si ese es
distinto al que tiene definido como argumento de entrada.
Las funciones SQL se pueden dividir en dos grandes grupos:
• Funciones de fila simple Son las funciones que devuelven un resultado único
para cada una de las filas sobre las que actúan.
• Funciones de grupo Devuelven un resultado único para un conjunto de filas de
entrada.
En el Anexo D se incluye un gran número de funciones SQL, clasificadas según su
pertenencia a los grupos que a continuación se relacionan.
FUNCIONES NUMÉRICAS
Son funciones de fila simple, aceptan como argumentos de entrada valores numéricos y
devuelven un resultado numérico.
Ejemplo:
LENGTH('HOLAMUNDO')
-------------------
10
FUNCIONES DE CONVERSIÓN
Este tipo de funciones convierten un tipo de datos en otro. El primer tipo de datos se
convierte en el segundo.
Son funciones de fila simple.
Ejemplo:
Hoy
-------------------
Diciembre 11, 2008
MI 9999MI Muestra un "-" después de los valores negativos. Para los valores
positivos muestra un espacio en blanco.
S S9999 Muestra un "+" para los valores positivos y "-" para los negativos en la
posición indicada.
PR 9999PR Muestra los valores negativos entre los signos de menor y mayor <>.
D(*) 99D99 Muestra el carácter decimal en la posición indicada. Separa la parte
entera y fraccionaria de un número.
G(*) 9G999 Muestra el separador de grupo en la posición indicada.
C(*) C9999 Muestra el símbolo ISO de la moneda, en la posición indicada.
L(*) L999 Muestra el símbolo de la moneda local en la posición indicada.
,(coma) 9,999 Muestra una coma en la posición indicada.
.(punto) 99.99 Muestra un punto en la posición indicada y separa la parte entera y la
decimal de un número.
EEEE 9.999EEEE Muestra el valor en notación científica.
RN RN Devuelve en mayúsculas o minúsculas (rn) el valor del número en
romano. El número tiene que ser un entero entre 1 y 3999
• MI y PR solo pueden estar en la última posición de un formato numérico. Y el
formato S sólo en la primera o la última posición.
(*) Los caracteres que devuelven los formatos indicados con un asterisco son
especificados por los siguientes parámetros de inicialización de la Base de Datos.
Elemento Significado
────────────────────────────────────────────────────────────────
SCC ó CC Indica el siglo. Si se indica S en las fechas de antes de Xto.
Aparece el prefijo "-".
YYYY ó SYYYY Visualiza los 4 dígitos del año. S antepone un guión "-" si la
fecha es antes de Xto.
IYYY Los 4 dígitos del año en formato ISO estándar.
YYY ó YY ó Y Los últimos 3, 2 o 1 dígitos del año.
IYY ó IY ó I Los últimos 3, 2 o 1 dígito del año en formato ISO estándar.
Y,YYY El año con una coma en la posición indicada.
Lenguaje de manipulación de datos. DML 2-15
OTRAS FUNCIONES.
Hay multitud de funciones no encuadradas en ninguno de los grupos de funciones
relacionados anteriormente que aportan gran potencia y funcionalidad a las sentencias
SQL. Algunas de ellas son imprescindibles como NVL o aportan gran potencia como
DECODE o permiten el manejo de tipos de datos LOB como EMPTY_[B|C]LOB o
BFILENAME.
También existen funciones de usuario desarrolladas en PL/SQL y almacenadas en el
Servidor de B.D. Se utilizan cuando la funcionalidad que deseamos no está disponible en
SQL y sus funciones. Para crearlas se utiliza CREATE FUNCTION o pueden residir dentro
de un paquete creado con CREATE PACKAGE.
VARIABLES DE ENTORNO.
UID Sintaxis UID
Propósito Devuelve un entero que es el identificador único de el usuario
conectado.
Ejemplo
SELECT UID FROM DUAL
USER
Sintaxis USER
Propósito Devuelve un VARCHAR2 que contiene el nombre del usuario
conectado en la base de datos local.
Ejemplo
USERENV
Sintaxis USERENV (opción)
Propósito Devuelve información en un tipo de dato VARCHAR2 acerca de la
sesión actual. El argumento opción puede tener los valores:
'ENTRYID'. Devuelve un identificador de la sentencia ejecutada para
auditorías.
'LANGUAGE'. Devuelve el lenguaje y el territorio utilizado durante la
sesión en formato:
lenguaje_territorio_juegocaracteres
'SESSIONID'. Devuelve un identificativo de la sesión del usuario para
auditorías.
'TERMINAL'. Devuelve el identificativo del sistema operativo para el
terminal utilizado.
Ejemplo
ALL: Esta opción provoca que la función de grupo considere todos los valores
recuperados, incluyendo duplicados. Es la opción por defecto.
• Todas las funciones de grupos excepto COUNT(*) ignoran los valores nulos.
• A continuación se muestran algunas de las funciones de grupo más utilizadas:
VARIANCE
Sintaxis VARIANCE([DISTINCT|ALL] x)
Propósito Devuelve la varianza de x. Un número.
Ejemplo
Por ejemplo, visualizar el máximo y el mínimo de los salario de employees cuyo trabajo
sea el de empleado ('CLERK') para cada departamento y que además su salario mínimo
esté por debajo de $3500.
EQUI JOIN
• Un "join" es una sentencia SELECT que combina filas de dos o más tablas o
vistas. Cada fila mostrada contiene datos de 2 o más tablas. La cláusula WHERE
es la que determina como se realiza la combinación.
• Si la cláusula WHERE es inexistente o inadecuada puede realizarse un producto
cartesiano, que combinará todas las filas de todas las tablas implicadas en la
combinación.
• El producto cartesiano genera un número de filas muy elevado. Por ejemplo, si
combino dos tablas con 100 filas cada una, sin establecer cláusula where, se
generarán 10.000 filas. Por lo tanto, siempre debe incluirse un criterio de
combinación.
• El tipo de combinación más utilizado es el llamado "simple join" o "equi join", que
devuelve filas de dos o más tablas basándose en una condición de igualdad. El
criterio de combinación por lo tanto lo establece el operador "="
• Suponiendo que unimos dos tablas, la sintaxis básica sería la siguiente:
SELECT Columnas de las tablas citadas en la cláusula FROM. Si existen columnas con
el mismo nombre en ambas tablas, es conveniente anteponer
nombre_tabla.nombre_columna o bien, alias_tabla.nombre_columna.
FROM Tablas de las que se extrae información. Por ejemplo: tabla1 alias1, tabla2
alias2
Ejemplo
En ejemplo siguiente muestra cómo recuperar el nombre y el número de departamento
en el que trabaja cada empleado.
SELECT e.first_name,e.department_id,d.department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id;
OUTER JOIN
El outer join o combinación externa amplifica el resultado de una combinación simple.
Una combinación externa recupera TODAS las filas de la de la combinación externa y
también aquellas que no encuentren su correspondiente fila pareja de una tabla a otra.
Ejemplo:
Seleccionar el número de departamento, el nombre de departamento y el salario
mensual para cada departamento sin utilizar combinación externa:
90 Executive 58000
100 Finance 51600
110 Accounting 20300
11 filas seleccionadas.
27 filas seleccionadas.
Lenguaje de manipulación de datos. DML 2-23
Sintaxis:
SELECT col1, col2, .... coln
FROM tabla1, tabla2, ...
WHERE tabla1.col1 = tabla2.col1(+)
El símbolo (+) debe situarse en el predicado de combinación al lado de la columna o
columnas pertenecientes a la tabla en la que hay ausencia de valor. En el ejemplo el
departamento 40 (OPERATIONS) existe, pero no tiene empleados.
UNIONES CRUZADAS
Son equivalentes al producto cartesiano de dos tablas. La sintaxis a utilizar es CROSS
JOIN.
UNIONES NATURALES
La unión natural es una unión de igualdad basada en todas las columnas que tienen el
mismo nombre. Los tipos de datos que contienen deben ser compatibles. No es posible
utilizar un prefijo de alias para una columna de unión.
La sintaxis a utilizar es NATURAL JOIN.
Si se recuperan todas las columnas mediante la sintaxis SELECT *, las columnas
comunes aparecerán una sola vez en los resultados. Por tanto, no es necesario utilizar
alias de tabla para cualificar las columnas en las consultas de unión natural, de hecho, si
se emplea dará un error.
LA EXPRESIÓN CASE
En el SQL: 1999 existen cuatro tipos de expresiones CASE:
• CASE simple.
• CASE buscada.
• NULLIF.
• COALESCE.
CASE SIMPLE
La expresión CASE simple es similar a la función DECODE. Es empleada para buscar y
reemplazar valores resultantes según una expresión predefinida. Se puede especificar un
valor devuelto por cada valor buscado. No se pueden emplear operadores de
comparación.
SELECT employee_id,
DECODE(department_id,10,'Diez',20,'Veinte',30,'Treinta', 'Otro')
"Departamento"
FROM employees;
CASE BUSCADA
La CASE buscada (searched CASE) es similar al IF..THEN..ELSE, permite buscar y
reemplazar valores condicionalmente.
Cada cláusula WHEN puede ser diferente y los operadores lógicos pueden ser usados
para combinar condiciones múltiples. Está permitido el uso de los operadores de
comparación.
SELECT employee_id,
CASE
WHEN salary >=20000 THEN 'High'
WHEN salary < 10000 THEN 'Low'
ELSE 'Medium'
END "Salary"
FROM employees;
Lenguaje de manipulación de datos. DML 2-27
NULLIF
Devuelve NULL si el primer argumento es igual al segundo; en caso contrario, se
devuelve el valor del primer argumento.
SELECT employee_id,
NULLIF (commission_pct,.1) "new commission"
FROM employees;
COALESCE
Devuelve el primer argumento (comenzando por la izquierda) que sea NOT NULL. Es
similar a la función NVL, pero puede tener múltiples valores alternativos. Se acepta
cualquier cantidad de argumentos.
Si la evaluación de todas las expresiones es NULL, la función COALESCE devuelve un
valor NULL.
SELECT employee_id,
COALESCE(to_char(commission_pct),'none') commission
FROM employees;
SUBCONSULTAS
Las subconsultas son sentencias SELECT que se encuentran anidadas dentro de una
CONSULTA PADRE. A las subconsultas a veces se las denomina CONSULTAS ANIDADAS. La
sentencia que contiene una subconsulta es denominada CONSULTA PADRE. Las filas que
devuelve la subconsulta son utilizadas por la consulta padre; de esta forma se consigue
establecer condiciones sin conocer previamente los valores que las determinan.
La sintaxis básica en la sentencia SELECT es la siguiente:
SELECT Lista_Columnas_o_Expresiones|*
FROM Lista_Tablas
WHERE expresión operador (SELECT Lista_Columnas_o_Expresiones|*
FROM Lista_Tablas
WHERE .....)
El uso de las subconsultas va más allá de su uso en la sentencia SELECT. Se utiliza para:
• Definir el conjunto de filas que se desea insertar en la tabla destino en una
sentencia INSERT o CREATE TABLE.
• Definir el conjunto de filas que se desea incluir la vista en una sentencia CREATE
VIEW.
• Definir uno o más valores a asignar en las filas existentes en una sentencia
UPDATE .... SET.
• Proporcionar valores para condiciones en las cláusulas WHERE y HAVING de las
sentencias SELECT, UPDATE y DELETE.
SELECT last_name
FROM employees
WHERE salary >
(SELECT salary
FROM employees
WHERE last_name = 'Abel');
En la siguiente sentencia se produce un error al ser devueltas más de una fila por la
subconsulta y no ser adecuado el operador para el tratamiento de más de una fila.
ERROR at line 4:
ORA-01427: single-row subquery returns more than one row
Esta sentencia, teniendo en cuenta el contenido de las tablas, sería equivalente a la siguiente:
SELECT emp.last_name
FROM employees emp
WHERE emp.employee_id IN (SELECT mgr.manager_id FROM employees mgr);
Siempre que haya valores nulos entre los valores devueltos por una subconsulta no emplear
el operador NOT IN pues es equivalente a <>ALL.
SELECT emp.last_name
FROM employees emp
WHERE emp.employee_id NOT IN
(SELECT mgr.manager_id
FROM employees mgr);
2-30 Lenguaje de manipulación de datos. DML
RECUPERACIÓN JERÁRQUICA
Utilizando recuperaciones jerárquicas se pueden recuperar datos basados en relaciones
jerárquicas entre las filas de una tabla.
En el caso de la tabla EMPLOYEES, la relación existente entre los jefes y sus empleados se
establece a través de la columna MANAGER_ID y EMPLOYEE_ID. Un jefe tiene varios
empleados, y éstos a su vez pueden ser jefes de otros empleados.
Sintaxis:
ORG_CHART
King
King
__Kochhar
____Greenber g
______Faviet
______Chen
______Sciarr a
______Urman
______Popp
____Whalen
____Mavris
2-32 Lenguaje de manipulación de datos. DML
INSERT
• El propósito de la sentencia INSERT es añadir filas a una tabla o vista.
• Como requisitos para añadir filas en una tabla, la tabla debe ser propiedad del
usuario que intenta realizar la inserción o bien tener privilegio de INSERT sobre
ella.
Sintaxis:
Ejemplos de INSERT:
Insertar una fila.
UPDATE
• El propósito de la sentencia UPDATE es modificar los valores existentes en una
tabla o vista.
• Como requisitos para actualizar filas de una tabla, la tabla debe ser propiedad del
usuario que intenta realizar la actualización o bien tener privilegio de UPDATE
sobre ella.
Sintaxis:
UPDATE tabla
SET columna = value [, column = valor, ...]
[WHERE condición];
UPDATE table
SET column =
(SELECT columna
FROM tabla
WHERE condición)
[, column =
(SELECT columna
FROM tabla
WHERE condición)]
[WHERE condición];
UPDATE employees
SET department_id = 70
WHERE employee_id = 113;
UPDATE employees
SET job_id = (SELECT job_id
FROM employees
WHERE employee_id = 205),
salary = (SELECT salary
FROM employees
WHERE employee_id = 205)
WHERE employee_id = 114;
DELETE
• El propósito de esta sentencia, es borrar filas de una tabla o vista.
• Como requisitos para borrar filas de una tabla, la tabla debe ser propiedad del
usuario que intenta realizar el borrado o bien, tener privilegio de DELETE sobre
ella.
Sintaxis:
MERGE
El lenguaje SQL ha sido ampliado para incluir la sentencia MERGE. Utilizando esta
sentencia es posible actualizar o insertar una fila condicionalmente. La decisión de
actualizar o insertar la fila está basada en una condición especificada en la cláusula ON.
• Realiza un UPDATE si la fila existe y un INSERT si es una nueva fila:
Evita UPDATES separados.
Aumenta su funcionalidad y es fácil de usar.
Es útil para aplicaciones de data warehousing.
Sintaxis:
SENTENCIAS TRANSACCIONALES
• Oracle Server asegura la consistencia de los datos basándose en transacciones.
Las transacciones permiten flexibilidad y control durante los cambios de los datos,
y aseguran la consistencia en el caso de que algún proceso de usuario o del
sistema falle.
• Una transacción de base de datos está provocada por una o varias sentencias tipo
DML, por sólo una tipo DDL o DCL.
• CONSISTENCIA EN LECTURA: los usuarios acceden a la base de datos de dos
formas: con operaciones de lectura (SELECT) o de escritura (DML). En función de
estos tipos de operaciones y teniendo en cuenta la concurrencia de sesiones que
acceden a los mismas tablas es necesario garantizar la consistencia de los datos
ante las siguientes consideraciones:
Las lecturas y escrituras en la base de datos deben asegurar una vista
consistente de los datos.
Las lecturas de una sesión no deben ver datos que estén en proceso de cambio
en otra sesión diferente.
Las escrituras tienen que tener asegurado que los cambios que realicen sobre
la base de datos se llevan a cabo sobre datos consistentes.
Los cambios hechos por una operación de escritura no debe entrar en conflicto
con cambios no consolidados llevados a cabo desde otra sesión.
El objeto de la consistencia en lectura es asegurar que antes de que se ejecute
una sentencia DML en la sesión, cada usuario ve los datos consistentes, es
decir, como quedaron desde el último COMMIT que los validó en la base de
datos.
• BLOQUEO: los bloqueos son mecanismos que previenen una interacción
destructiva entre transacciones accediendo a un mismo recurso.
• Oracle implementa el bloqueo de forma automática sin requerir una acción por
parte del usuario. Este bloqueo se lleva a cabo para todas las sentencias SQL en
las que sea necesario de forma automática, excepto para la SELECT, que
requerirá de un bloqueo explícito por parte del usuario (… for update of column ).
• Una transacción comienza cuando la primera sentencia SQL DML es ejecutada
durante una sesión y finaliza cuando se produce alguno de estos eventos:
Se ejecuta una sentencia transaccional COMMIT o ROLLBACK.
Se ejecuta una sentencia DDL o DCL (se produce un COMMIT implícito).
La sesión del usuario finaliza de manera anormal (fallo de sistema) o de forma
voluntaria (salida de la herramienta).
• Durante una sesión de usuario únicamente una transacción puede estar en vigor.
• Las sentencias transaccionales son:
COMMIT
ROLLBACK
SAVEPOINT
Lenguaje de manipulación de datos. DML 2-37
COMMIT
Finaliza la transacción actual, valida todos los cambios de datos haciéndolos permanentes.
Sintaxis:
COMMIT [WORK];
SAVEPOINT
• Los puntos de salvaguarda son marcas lógicas que va poniendo el usuario durante
la transacción actual.
• Estas marcas permiten deshacer los cambios por partes en vez de deshacer toda
la transacción.
• Al ser marcas lógicas no es posible listar los puntos de salvagurarda creados.
SAVEPOINT <punto de salvaguarda>;
ROLLBACK
Finaliza la transacción actual y deshace todos los cambios de datos pendientes.
Sintaxis:
COMMIT
DELETE
SAVEPOINT A
INSERT
UPDATE
SAVEPOINT B
INSERT
Introducción .......................................................................................................................1
Comandos DDL ..................................................................................................................1
CREATE TABLE .................................................................................................................1
Sintaxis CREATE TABLE ...................................................................................................... 1
Integridad de Datos ...........................................................................................................3
Reglas de Negocio ................................................................................................................ 3
Integridad de Entidades......................................................................................................... 3
Integridad Referencial ........................................................................................................... 4
Nombres de las Restricciones ............................................................................................... 5
Cómo Definir Una Restricción ............................................................................................... 6
Restricciones: características. ............................................................................................... 7
Comprobación de restricciones aplazada ............................................................................. 7
Restricciones obligatorias...................................................................................................... 8
Restricción UNIQUE o PRIMARY KEY utilizando un índice no único. ................................. 9
CREATE INDEX ................................................................................................................10
Tablas tipo índice ................................................................................................................ 10
CREATE SYNONYM .........................................................................................................12
CREATE VIEW ..................................................................................................................12
CREATE SEQUENCE .......................................................................................................13
ALTER TABLE ..................................................................................................................14
Añadir Restricciones ............................................................................................................ 15
Desactivar Restricciones ..................................................................................................... 15
Activar Restricciones ........................................................................................................... 16
Excepciones Activando Restricciones ................................................................................. 16
Borrar Restricciones ............................................................................................................ 18
Borrar Columnas ................................................................................................................. 18
El Comando ALTER SEQUENCE.................................................................................... 19
DROP TABLE ...................................................................................................................19
DROP INDEX ....................................................................................................................19
DROP VIEW ......................................................................................................................20
DROP SYNONYM .............................................................................................................20
DROP SEQUENCE ...........................................................................................................20
RENAME ...........................................................................................................................20
El Comando TRUNCATE ................................................................................................. 21
Lenguaje de Definición de Datos. DDL 3-1
INTRODUCCIÓN
El lenguaje DDL pertenece al lenguaje SQL y nos permite crear, modificar, renombrar y
borrar objetos dentro de la Base de Datos. Hasta ahora solo habíamos manipulado
objetos ya creados previamente.
Para poder ejecutar los comandos que veremos a continuación es necesario tener una
serie de privilegios, que el administrador de la Base de Datos ha debido concedernos
previamente.
Llevan implícito la validación o COMMIT.
COMANDOS DDL
CREATE El comando CREATE permite al usuario que lo ejecuta crear un objeto
(Tablas, índices, vistas, sinónimos, secuencias, etc.)
ALTER El comando ALTER permite al usuario que lo ejecuta modificar la estructura
de un objeto previamente creado.
DROP El comando DROP permite al usuario que lo ejecuta eliminar un objeto (no
sólo las columnas) de la Base de Datos.
RENAME Permite al usuario que lo ejecuta modificar el nombre de un objeto.
TRUNCATE Permite al usuario que lo ejecuta borrar TODAS las filas de una tabla o
índice. Tiene ciertas diferencias con DELETE o DROP que veremos
próximamente.
CREATE TABLE
Permite crear una tabla, que es la estructura básica de una base de datos.
En el momento de la creación de la tabla se puede especificar la siguiente información:
• Definiciones de columnas. (tipos de datos y longitud).
• Restricciones de Integridad.
• Características de Almacenamiento del objeto.
• Si la tabla se forma partiendo de una sentencia SELECT.
SINTAXIS CREATE TABLE
El siguiente ejemplo muestra la creación de una tabla sin indicar ningún tipo de
restricción o cláusula de almacenamiento. Solamente se indican los nombres de las
columnas, a qué tipos de dato pertenecen y la longitud de las columnas.
El siguiente ejemplo muestra la creación de una tabla basada en una sentencia SELECT
Los tipos de datos que podemos definir en las columnas de nuestras tablas son:
Tipo Dato Descripción
VARCHAR2(tam) Cadena de caracteres de longitud variable. Tamaño máximo es 4000
bytes y el mínimo uno. Es obligatorio especificar precisión.
NVARCHAR2(tam) Cadena de caracteres de longitud variable teniendo un máximo de
longitud expresado en caracteres o bytes, depende del juego de
caracteres nacional indicado. El tamaño máximo se determina por el
número de bytes requerido para almacenar cada carácter. El límite
superior es 4000 bytes. Es obligatorio especificar precisión.
NUMBER (n,d) Numero de tamaño 'n' (hasta 38) conteniendo 'd' decimales (de -84 a
127)
LONG Cadena de caracteres de longitud variable. Tamaño hasta 2 Giga
bytes. Solo puede haber uno por tabla. No pueden tener restricciones
de integridad. No pueden utilizarse en cláusulas WHERE, GROUP BY,
CONNECT BY, DISTINCT, ni consultas anidadas ni operadores de
conjuntos.
DATE Fecha mostrada con la máscara 'DD-MES-AA”. Depende variables
"NLS". Siete bytes numéricos.' Rangos válidos son desde 1 de Enero
de 4712 Después de Cristo a 31 de Diciembre de 4712 Antes de
Cristo.
RAW(tam) Dato binario de longitud variable. Tamaño máximo 2000 bytes. Se
debe indicar precisión.
LONG RAW Cadena binaria de longitud variable de hasta 2 Gigabytes.
ROWID Cadena hexadecimal que representa la dirección única de una fila en
una tabla. Este tipo de dato se utiliza para almacenar los valores
devueltos par la pseudocolumna ROWID.
CHAR(tam) Cadena alfanumérica de longitud fija. Tamaño máximo 2000 bytes. Si
no se indica precisión el valor mínimo y valor por defecto es 1 byte.
NCHAR(tam) Cadena alfanumérica de longitud fija. Teniendo un máximo de
longitud expresado en caracteres o bytes, depende del juego de
caracteres nacional indicado. El tamaño máximo se determina por el
número de bytes requerido para almacenar cada carácter. El límite
superior es 2000 bytes. Si no se indica precisión el valor mínimo y
valor por defecto es 1 byte.
MLSLABEL Formato binario y etiquetado bajo el sistema operativo. Ese tipo de
dato aparece por compatibilidad hacia trastas en “Oracle Trusted”.
CLOB Objeto grande tipo carácter conteniendo caracteres de byte simple.
No se soportan juegos de caracteres de tamaño variable. Máximo 4
gigabytes.
NCLOB Objeto grande tipo carácter conteniendo caracteres multibyte de
tamaño fijo. No se soportan juegos de caracteres de tamaño variable.
Máximo 4 gigabytes
BLOB Un objeto grande binario. Tamaño máximo 4 Gigabytes.
BFILE Contiene un localizador a un fichero binario almacenado fuera de la
base de datos. Tamaño máximo 4 gigabytes.
BINARY_FLOAT Este tipo de datos existe a partir de Oracle 10g, almacenan datos
numéricos de coma flotante en formato IEEE 754 de 32 bits de
precisión.
BINARY_DOUBLE Este tipo de datos existe a partir de Oracle 10g, almacenan datos
numéricos de coma flotante en formato IEEE 754 de 64 bits de
precisión.
La información acerca de las tablas y columnas en el diccionario de datos, se encuentra
en las siguientes vistas del diccionario accesibles para cualquier usuario:
Lenguaje de Definición de Datos. DDL 3-3
• USER_TABLES y ALL_TABLES
• USER_TAB_COLUMNS y ALL_TAB_COLUMNS
INTEGRIDAD DE DATOS
Antes de definir una tabla debemos tener en cuenta ciertos aspectos acerca de la
información a almacenar que nos evitan tener que programar de forma redundante
ciertas comprobaciones.
La declaración de restricciones de integridad nos ayuda a definir ciertas características de
la tabla. Por ejemplo, si una columna puede estar vacía o no, si puede contener valores
duplicados, si está relacionada con alguna columna de otra tabla, etc.
La integridad de datos por lo tanto es:
• Asegurarse que los datos en las tablas se ajustan a una serie de reglas
predefinidas.
• Las condiciones se cumplen en todas las transacciones y desde todas las
herramientas y programas.
• Se definen una sola vez y no necesitan mantenimiento especial.
Conceptos de integridad que se pueden definir:
• Reglas negocio.
• Integridad de entidades.
• Integridad referencial.
REGLAS DE NEGOCIO
Específica cada área de negocio. Por ejemplo: Sólo cuando se venden 10 productos o
más hay derecho a descuento.
INTEGRIDAD DE ENTIDADES
Reglas a las que deben ajustarse las columnas de mis tablas. Pueden definirse las
siguientes:
• NOT NULL. La columna a la que se aplique esta restricción debe contener
valores. Por ejemplo: la columna número de Identificación fiscal de la tabla
facturas.
• PRIMARY KEY. Identificador único de una fila en una tabla. Solo puede haber
una por tabla, pero puede estar compuesto por más de una columna. Se utiliza de
forma habitual para ser referenciada desde otra tabla. Al definir una columna
como clave primaria de forma implícita, se crea un índice asociado y la columna
quedará definida como única y obligatoria si no se crea desactivado. Lleva
incluida la restricción NOT NULL.
Por ejemplo, el código de un producto es su identificativo en la tabla de los
productos y además le ayuda a relacionarse con la tabla que contiene los precios
de los productos o con la de almacén que contiene la cantidad de un producto que
nos queda en stock.
• UNIQUE. No puede haber más de dos filas con el mismo valor en aquella
columna/s que tenga dicha restricción. Puede ser simple o compuesta de varias
columnas. A diferencia de la clave primaria, no es obligatoria y además puede
haber más de una por tabla. Si se quiere trabajar bajo normativa ANSI/ISO la
columna que lleve esta restricción deberá tener adicionalmente la restricción NOT
NULL.
Por ejemplo, una restricción de unicidad sobre el código de una película y el
número de copia en la tabla prestamos_videos.
3-4 Lenguaje de Definición de Datos. DDL
• CHECK. Restricción que realiza un filtro sobre las filas que no cumplan la
condición impuesta. Es similar a la cláusula WHERE pero se implementa en la
definición del objeto. No puede incluir subconsultas ni variables o
pseudocolumnas (USER, SYSDATE, etc).
INTEGRIDAD REFERENCIAL
Es la que determina las relaciones existentes entre los objetos. Por ejemplo existe una
relación entre las tablas Locations y Countries.
• PRIMARY KEY (Clave primaria). Identificador único de una fila en una tabla.
Hemos visto anteriormente que este concepto pertenece a la integridad de
entidades.
• FOREIGN KEY. Columna normalmente asociada a una clave primaria o única de
otra tabla o de la misma tabla (denominado auto-referencia). Puede haber tantas
como se desee por tabla. Su valor puede ser nulo o el valor de la clave
referenciada. Garantiza consistencia de relaciones entre los datos.
Por ejemplo: Toda línea de factura debe tener su cabecera, o lo que es lo mismo,
debe pertenecer a una línea de factura.
Estableciendo estas relaciones entre claves ajenas y primarias logramos:
• Evitar borrados, inserciones o actualizaciones no deseadas: Por ejemplo, no se
puede borrar una factura que tiene líneas. No se puede dar de alta una línea de
factura sin su correspondiente cabecera. No se puede actualizar el identificativo
de una línea de factura.
Propagar Modificaciones. Lo contrario a lo anterior. Se pueden definir acciones de
borrado en cascada. Por ejemplo, si se borra una cabecera de factura que se borren las
correspondientes líneas usando ON DELETE CASCADE. ON DELETE SET NULL coloca nulos
todas las claves secundarias relacionadas con la borrada.
Lenguaje de Definición de Datos. DDL 3-5
La sintaxis es la siguiente:
Codigorestricción_nombretabla_nombrecolumna
• Definir una restricción "No en línea" significa que la restricción/es va/n antes o
después de empezar a definir las columnas. En este caso es obligatorio preceder
la restricción con la palabra clave CONSTRAINT para que el gestor distinga entre
lo que es la definición de la columna o la declaración de la restricción. En este
caso la sintaxis varía, y se define de este modo:
CONSTRAINT nombre_restricción TIPO_RESTRICCIÓN (col1 [,…,coln])
Al definir una restricción NO EN LINEA, hay que indicar a qué columna/s de la tabla se
aplica la restricción, puesto que no esta a continuación de la definición. En ciertos casos,
como cuando una clave primaria esta compuesta de varias columnas, o cuando una
restricción se añade a posteriori, es obligatorio definirlas como NO EN LINEA.
A continuación se muestra un ejemplo de restricción NO EN LINEA:
RESTRICCIONES: CARACTERÍSTICAS.
• La comprobación de restricciones puede aplazarse hasta el final de cada
transacción, permitiendo violaciones temporales de las restricciones.
• Cuando una restricción es diferida, el sistema comprueba si satisface la condición
en tiempo de validación (commit). Si se viola la restricción la validación causa
que la transacción entera se deshaga.
• Cuando una restricción es inmediata, se comprueba para cada sentencia. Si la
restricción se viola, la sentencia se deshace.
• Las restricciones pueden forzarse instantáneamente. Los usuarios pueden leer y
modificar datos mientras se activa la comprobación de la restricción.
• Aunque una restricción esté activada o desactivada, las restricciones pueden
activarse, desactivarse o forzarse. Una restricción forzada se comporta como si la
restricción estuviera activa, pero no garantiza que todos los antiguos datos
cumplan la restricción.
• Una restricción activa está comprobada y validada.
• Las claves primarias y únicas pueden implementarse con índices no únicos. Las
comprobaciones se comprueban al final de cada sentencia o de cada transacción.
La columna clave primaria o única debe ser la parte conductora del índice.
RESTRICCIONES OBLIGATORIAS
•
•
•
•
CREATE INDEX
Los índices se utilizan para acceder más rápidamente en lectura a un dato. Para que una
columna se indexe debe cumplir ciertos requisitos:
• Ser consultada con frecuencia
• No sufrir alteraciones de operadores o funciones cuando se consulta
• Contener un volumen importante de información.
• Tener muchos valores diferentes....
Los índices pueden ser simples o compuestos de varias columnas.
Los índices pueden ser únicos o no. Si un índice se define como único, significa que no
puede tener valores repetidos.
Las restricciones UNIQUE y PRIMARY KEY llevan implícita la creación del índice si no se
crean desactivadas y que en ambos casos es único.
La sintaxis es la siguiente:
Las tablas del diccionario de datos con información acerca de índices accesibles para el
usuario son:
• USER_INDEXES y ALL_INDEXES
• USER_IND_COLUMNS y ALL_IND_COLUMNS
ROWID +
Datos
de las
columnas
indexadas Datos por clave
primaria
Datos
• Esta organización es muy eficiente con la mayor parte de los datos, pero tiene
algunas desventajas.
Oracle debe leer primero el bloque de índices y después los datos.
Los valores claves se almacenan en ambos sitios (tabla e índice). Esto es
especialmente costoso en sistemas con gran cantidad de índices concatenados,
donde los valores clave son grandes.
• Las aplicaciones que utilizan datos complejos tienen diferentes requerimientos de
índices.
• Empleando tablas tipo índice:
Guarda todos los bloques en una estructura en árbol B. No hay bloques de
datos separados, sólo de índices.
Este tipo de tablas se utiliza en aplicaciones que acceden y manipulan datos
complejos. Aplicaciones informativas, aplicaciones espaciales, y aplicaciones
que realizan procesos analíticos.
Sintaxis:
• Para crear una tabla tipo índice solamente es necesario añadir la clave
ORGANIZATION INDEX a la sentencia CREATE TABLE. La opción por defecto es
ORGANIZATION HEAP. (Apilada).
• La tabla está indexada, y después los datos se ordenan por la columna que se
haya definido como clave primaria.
Nota: No es la sintaxis completa de CREATE TABLE. La opción EXTERNAL hace referencia
a la creación de una tabla de solo lectura ubicada fuera de la base de datos.
Ejemplo:
NOTA: Existen otras restricciones sobre estas tablas que afectan al administrador de B.D.
al realizar un ajuste de la misma, o que pertenecen a otras opciones de compra
adicionales al Gestor Oracle.
CREATE SYNONYM
Un sinónimo es un nombre alternativo a una tabla, vista o procedimiento almacenado. A
diferencia del alias, el sinónimo no es temporal y permanece hasta que es borrado.
Independientemente de la creación del sinónimo es necesario tener acceso al objeto
sobre el que se desea crear dicho sinónimo, o bien ser su propietario.
Existen dos tipos de sinónimos: públicos y privados. Los públicos están accesibles por
cualquier usuario de la Base de Datos y para crearlos se necesita el privilegio CREATE
PUBLIC SYNONYM. Los privados son accesibles sólo para aquel usuario que lo crea y se
necesita el privilegio CREATE SYNONYM.
La sintaxis es la siguiente:
Las tablas del diccionario de datos con información acerca de índices accesibles para el
usuario son USER_SYNONYMS y ALL_SYNONYMS
CREATE VIEW
Una vista es una tabla lógica basada en una o varias tablas. La tabla no se crea
físicamente sino que lo que se almacena es la SELECT de creación de la vista.
Cuando se recuperan filas de una vista, ocurre que se accede a la sentencia SELECT que
la compone y que se encuentra almacenada, y se ejecuta.
La sintaxis es la siguiente:
Para que una vista sea actualizable (permita UPDATE), NINGUNA de las columnas que
forman la vista puede estar modificada por una expresión. P.e. Substr(first_name, 1,3).
Para que la vista permita inserciones (INSERT INTO vista), la vista en su definición debe
contener TODAS las columnas obligatorias de la tabla que la forma.
Para que la vista permita borrado de filas (DELETE FROM vista), la vista debe estar
creada sobre UNA sola tabla (no admite join). No puede incorporar cláusulas DISTINCT ni
GROUP BY. No puede ser definida con funciones de grupo ni pseudocolumnas (SUM(sal) o
ROWID).
Las tablas del diccionario de datos con información acerca de índices accesibles para el
usuario son USER_VIEWS y ALL_VIEWS
CREATE SEQUENCE
Una secuencia es un objeto que permite generar números secuenciales enteros y únicos.
Esto puede ser muy útil, por ejemplo, para conseguir claves primarias de forma
automática. Además y dado que es un objeto como otro cualquiera de la Base de Datos,
puede ser utilizado por múltiples usuarios. Para poder crear una secuencia, se debe
poseer un privilegio denominado CREATE SEQUENCE.
La sintaxis es la siguiente:
Una vez que se ha creado la secuencia puede ser accedida utilizando dos
pseudocolumnas:
• CURRVAL devuelve el valor actual de la consulta
• NEXTVAL incrementa el valor de la secuencia
3-14 Lenguaje de Definición de Datos. DDL
Las tablas del diccionario de datos con información acerca de índices accesibles para el
usuario son USER_SEQUENCES y ALL_SEQUENCES
ALTER TABLE
El comando ALTER TABLE permite modificar la estructura de una tabla para:
• Añadir columnas a una tabla ya creada
• Modificar el tipo de dato o la precisión de una columna.
• Añadir, activar o desactivar temporalmente y borrar restricciones de integridad
referencial sobre la tabla.
• Borrar columnas de una tabla.
La sintaxis es la siguiente:
Para realizar esta operación debo asegurarme de que la columna ename no tiene valores
nulos. Si lo estuviera el comando ALTER TABLE devuelve un error.
Eliminar una restricción de unicidad llamada UQ_DNAME sobre la columna DNAME
mediante dos variaciones del comando ALTER TABLE.
AÑADIR RESTRICCIONES
Se pueden añadir restricciones de integridad referencial a posteriori. En el momento que
se añade, se bloquea toda la tabla y se produce la comprobación de la restricción que se
desea incorporar. Si alguna fila no la cumple, la restricción no se añade.
Mediante el siguiente ejemplo añadir una restricción a la tabla DEPT. La situación de los
departamentos (LOC) debe ser única.
La sintaxis para añadir restricciones una vez creada la tabla es similar a la de las
restricciones "No en línea". Esto significa que se debe de indicar tras el comando ALTER
TABLE la palabra clave CONSTRAINT seguida de un nombre (obligatorio) luego el tipo de
restricción a aplicar, y por último sobre qué columna de la tabla se desea aplicar dicha
restricción.
Añadir una restricción en la tabla línea de facturas. Cada vez que se borre una cabecera
de factura se borran las líneas asociadas en cascada. Nótese que la restricción no se
Aplica en la tabla maestra (en este caso la de cabeceras de facturas) sino en la DETALLE
(en este caso la de líneas)
Cuando se borre una factura, (DELETE FROM facturas WHERE idfactura=2344) se visualiza
el mensaje "N rows deleted" que se refiere a las cabeceras, aunque se hayan borrado
una cabecera y sus siete líneas.
Cuando se define una clave ajena se puede hacer referencia explícita a la tabla
referenciada REFERENCES tabla (col), o implícita REFERENCES tabla. En el caso del
borrado en cascada la sintaxis sólo permite referencia implícita.
DESACTIVAR RESTRICCIONES
El desactivar una restricción permite que dicha restricción no se compruebe
temporalmente. NO ES IGUAL que borrar la restricción.
Es la forma de incrementar la velocidad en cargas de datos masivas.
Loader (la herramienta de carga ORACLE), deshabilita automáticamente con su método
directo «direct path».
Cuando se intenta desactivar una clave ajena o clave única (que pueden ser
referenciadas), primero habrá que desactivar las claves ajenas que le referencian o
utilizar DISABLE CASCADE.
Al desactivar una clave primaria o única también se destruyen los índices asociados.
3-16 Lenguaje de Definición de Datos. DDL
La sintaxis es la siguiente:
►►─── ALTER TABLE ───┬────────────┬─ tabla ─── DISABLE ────────►
└─ esquema. ─┘
┌───── , ────┐
►──┬── UNIQUE ( ─▼── columna ─┴─ ) ─┬──┬────────────┬─────────►◄
├── PRIMARY KEY ─────────────────┤ └─ CASCADE ──┘
└── CONSTRAINT restricción ──────┘ ▲
│
│
│
┌──────┴────────────┐
│ DESACTIVA TODAS │
│ LAS DEPENDENCIAS │
│ ASOCIADAS │
└───────────────────┘
ACTIVAR RESTRICCIONES
Activa la comprobación de la restricción. En el momento de la creación de una restricción
se activa a no ser que se indique la cláusula DISABLE.
Cuando se activa posteriormente:
• Bloquea la tabla completa hasta que se termine la comprobación.
• Comprueba una a una las filas.
• Si alguna de las filas no cumple la restricción, no podrá llegar a activarse.
Al habilitar una clave primaria o única se vuelven a construir los índices asociados.
La sintaxis es la siguiente:
►►─── ALTER TABLE ───┬────────────┬─ tabla ─── ENABLE ────────►
└─ esquema. ─┘
┌───── , ────┐
►──┬── UNIQUE ( ─▼── columna ─┴─ ) ─┬─────────────────────────►◄
├── PRIMARY KEY ─────────────────┤
└── CONSTRAINT restricción ──────┘
►───┬────────────────────────────────────────────────────────┬─►
│ │
└── USING INDEX ──┬──────────────────────────────────────┘
├─ INITTRANS entero
├─ MAXTRANS entero
├─ TABLESPACE tablespace
├─ STORAGE almacenamiento
├─ PCTFREE entero
└─ PCTUSED entero
La tabla sobre la cual se han definido las restricciones y no pueden activarse, puede
actualizarse a partir de los resultados almacenados en la tabla EXCEPTIONS.
Mediante el siguiente ejemplo, es posible averiguar qué filas están duplicadas en la tabla
borrando todas las filas duplicadas de la tabla préstamos.
A continuación debemos borrar los duplicados de la tabla préstamo. Si las dos filas son
EXACTAMENTE iguales, la única forma de eliminar duplicados es utilizar el ROWID de la
fila en la tabla.
BORRAR RESTRICCIONES
La sintaxis es la siguiente:
►►─── ALTER TABLE ─┬─────────────┬───── tabla ─── DROP ───────►
└─ esquema. ──┘
┌─── , ─────────┐
►───────┬─── UNIQUE (─▼ columna ──) ──┴──────┬────────────────►◄
├─── PRIMARY KEY ───────────────────┤
└─── CONSTRAINT nombre_restricción ──┘
►───────┬─────────────┬───────────────────────────────────────►◄
└── CASCADE ──┘
Véase el siguiente ejemplo:
BORRAR COLUMNAS
La sintaxis es la siguiente:
►►─── ALTER TABLE ─┬─────────────┬───── tabla ─── DROP COLUMN ───────►
└─ esquema. ──┘
Borra una columna de una tabla. La columna no puede contener CONSTRAINT PRIMARY
KEY o FOREIGN KEY.
DROP TABLE
Permite borrar una tabla. La sintaxis es la siguiente:
►───── DROP TABLE ──┬────────────────┬───── tabla ──────────►
│ │
└── esquema. ────┘
►────────┬───────────────────────────┬──────────────────────►◄
│ │
└─── CASCADE CONSTRAINTS ───┘
Mediante el siguiente ejemplo, es posible eliminar la tabla PRODUCTOS con todas sus
filas y las claves ajenas que apunten a cualquier columna de PRODUCTOS.
DROP INDEX
Se puede eliminar un índice de una tabla utilizando el siguiente comando:
Para borrar un índice se debe ser el propietario de la tabla en la que están los índices o
tener un privilegio llamado DROP ANY INDEX.
3-20 Lenguaje de Definición de Datos. DDL
DROP VIEW
Se puede eliminar un índice de una tabla utilizando el siguiente comando:
DROP SYNONYM
Se puede borrar un sinónimo sobre una tabla, procedimiento, vista, etc. utilizando el
siguiente comando.
DROP SEQUENCE
El comando DROP SEQUENCE sirve para eliminar una secuencia de la BD. El comando a
utilizar es:
Suele ser el método utilizado para resetear una secuencia. Se borra y luego se vuelve a
crear con los valores deseados. Véase el siguiente ejemplo:
RENAME
El comando RENAME cambia el nombre de un objeto (tabla, procedimiento, vista, etc.)
por otro de forma permanente, de la siguiente forma:
EL COMANDO TRUNCATE
El comando TRUNCATE borra filas de una tabla o índice sin eliminar la estructura del
objeto. Es similar a DELETE, pero no hay posibilidad de deshacer la transacción
(ROLLBACK), ni de hacer un borrado restrictivo (cláusula WHERE).
• Para truncar un objeto, se debe ser propietario del mismo o tener el privilegio
DELETE ANY TABLE.
• La opción DROP STORAGE libera el espacio que el objeto ha tomado a la base de
datos, opción por defecto.
• La opción REUSE STORAGE mantiene reservado el espacio previamente adquirido
para dicho objeto.
• Al truncar una tabla se truncan de forma implícita los índices de dicha tabla
A
Introducción .......................................................................................................................1
El Editor de SQL*PLUS .....................................................................................................2
COMANDOS DE EDICION ................................................................................................... 2
El Comando SPOOL ............................................................................................................. 4
El Comando SAVE ................................................................................................................ 4
El Comando START .............................................................................................................. 4
El Comando GET .................................................................................................................. 5
El Comando EDIT .................................................................................................................. 5
El Comando DESCRIBE ....................................................................................................... 5
El Comando HOST ................................................................................................................ 5
Parámetros de Sustitución ............................................................................................... 6
Mejoras en SQL*Plus en Oracle 10g ................................................................................ 7
Mejoras en el comando DESCRIBE ...................................................................................... 7
Mejoras en el comando SPOOL ............................................................................................ 7
Configuración de Sesión ....................................................................................................... 7
Nuevas variables DEFINE ..................................................................................................... 8
Variables de Sustitución en PROMPT .................................................................................. 9
Compatibilidad SQL*Plus ...................................................................................................... 9
ANEXO A. El interfaz de usuario SQL*PLUS A-1
INTRODUCCIÓN
• SQL*Plus es una de las herramientas desde las que se ejecutan comandos SQL.
• Desde ciertas herramientas, solo están permitidos los comandos DML
(Manipulación), en Plus, en cambio también se permiten como hemos visto,
comandos DDL (definición).
• Desde SQL*PLUS se permite:
Trabajar con SQL.
Disponer de ayuda para comandos. Por ejemplo HELP SELECT.
Los comandos se ejecutan de forma inmediata, o bien, pueden ser
almacenados en un buffer o en un fichero del S.O. y ser ejecutados a
posteriori.
También se considera a PLUS una herramienta para generar informes sencillos
y tabulares. Permite realización de cálculos y de rupturas.
Utilizar el editor propio de la herramienta (que es un editor de línea), o
trabajar desde PLUS con el editor del sistema operativo.
• Para entrar en la herramienta SQL*PLUS ya hemos visto antes que hay que
introducir el siguiente comando desde el indicador de Sistema operativo (en
UNIX):
$ sqlplus [usuario/password]
$ sqlplus
Enter user-name:
Enter password:
A-2 ANEXO A. El interfaz de usuario SQL*PLUS
EL EDITOR DE SQL*PLUS
• SQL*Plus dispone de editor de líneas. Este editor permite modificar, examinar, o
reejecutar un comando SQL, sin tener que reescribirlo:
• Los comandos SQL*Plus deben introducirse después del prompt "SQL>" y SIN
punto y coma al final.
COMANDOS DE EDICION
Ejemplos:
• Visualizar la línea uno del buffer:
SQL> list 1
1* SELECT dptno, dname
SQL> C/dptno/deptno
• Reejecutar el comando
SQL> RUN
1 SELECT deptno, dname
2 FROM DEPT
3* WHERE deptno=10
SQL> LIST 3
3* WHERE deptno=10
SQL> I
4* order by deptno (por ejemplo)
SQL> LIST
1 SELECT deptno, dname
2 FROM DEPT
3 WHERE deptno=10
4* order by deptno
SQL> L 4
4* order by deptno
SQL> AP desc
4* order by deptno des
A-4 ANEXO A. El interfaz de usuario SQL*PLUS
EL COMANDO SPOOL
• El comando SPOOL se utiliza para almacenar el RESULTADO de la ejecución de
una select en un fichero:
SQL> SPOOL nombre_fichero
SQL> run
SQL> SPOOL OFF;
• Esto genera un fichero con una extensión por defecto .lst en la que esta el
resultado de la select ejecutada.
• Enviar a la impresora:
SQL> SPOOL on
SQL> run
SQL> SPOOL Out;
EL COMANDO SAVE
El comando SAVE guarda en un fichero el CONTENIDO de la sentencia SQL (solo una)
actualmente en el buffer:
Esto crea un fichero de sistema operativo llamado departamentos.sql con la select escrita
anteriormente.
EL COMANDO START
Ejecuta el fichero de sistema operativo que se indique:
EL COMANDO GET
• El comando GET, lleva al buffer SQL el fichero indicado, por ejemplo, para
modificarlo. Si la extensión del nombre del fichero a editar no es SQL hay que
indicar el nombre completo.
SQL> get departamentos[.extension]
SQL> select * from dept;
SQL> i
2* order by dname
SQL> SAVE departamentos [REPLACE]
• La opción REPLACE del comando SAVE reemplaza el fichero antiguo por el nuevo.
EL COMANDO EDIT
• Llama al editor activo del sistema operativo. Se puede elegir el editor deseado
utilizando:
SQL> define_editor= vi
EL COMANDO DESCRIBE
• El comando DESCRIBE o DESC muestra la estructura de una tabla:
SQL> DESC dept
EL COMANDO HOST
• El comando HOST permite ejecutar un comando de sistema operativo sin salir de
la sesión de SQL*Plus. En algunos sistemas operativos su equivalente es el signo
de cerrar admiración (UNIX), y en otros el símbolo del dólar (NT). Veamos un
ejemplo a continuación utilizando las tres posibilidades.
SQL> HOST ls -l
SQL> ! ls -l
SQL> $ DIR /s
PARÁMETROS DE SUSTITUCIÓN
• Se pueden incluir variables de sustitución en un programa en SQL*Plus:
Por ejemplo:
DESC[RIBE] {[esquema.]objeto[@connect]}
Es posible generar un fichero HTML válido utilizando uno o varios comandos SPOOL
APPEND, construyendo manualmente las cabeceras y pies de página.
SPOOL fichero.htm
PROMPT <HTML><BODY>
SET MARKUP HTML ON
SELECT * FROM departments;
SET MARKUP HTML ENTMAP OFF
PROMPT </BODY></HTML>
SPOOL OFF
CONFIGURACIÓN DE SESIÓN
Es posible utilizar ficheros de perfiles para controlar el entorno SQL*Plus:
• El fichero de sistema GLOGIN.SQL permite definir un entorno común a todos los
usuarios de una base de datos particular.
• El fichero de usuario LOGIN.SQL permite personalizar una sesión específica.
En Oracle 10g, el fichero de perfil de sistema se ejecuta tras cada conexión satisfactoria,
ya sea mediante SQLPLUS o mediante el comando CONNECT. El fichero de usuario se
ejecuta tras el fichero de sistema.
El fichero de perfil del sistema contiene fundamentalmente asignaciones de variables de
entorno, mientras que el fichero de configuración de usuario puede contener comandos
SQL*Plus, comandos SQL o incluso bloques PL/SQL.
A-8 ANEXO A. El interfaz de usuario SQL*PLUS
01/01/2004>DEFINE _DATE=''
19/12/2008>
Pueden ser consultadas y modificadas al igual que cualquier otra variable DEFINE, y
pueden utilizarse en TTITLE, como variables de sustitución ‘&’ o como prompt de línea de
comandos SQL*Plus. Pueden utilizarse, por ejemplo, para modificar el SQLPROMPT en los
ficheros de inicialización GLOGIN.SQL y LOGIN.SQL.
ANEXO A. El interfaz de usuario SQL*PLUS A-9
• No Predefinidas
SQL>DEFINE con=PEDRO
SQL>SET SQLPROMPT ‘con>’
PEDRO>
COMPATIBILIDAD SQL*PLUS
SQL*Plus tiene una nueva opción de línea de comandos, llamada COMPATIBILITY. Esta
opción nueva permite establecer la variable de sistema SQLPLUSCOMPATIBILITY a una
versión de SQL*Plus especificada a continuación, mediante la sintaxis:
El ejemplo siguiente muestra cómo se evalúan las variables de sustitución en función del
valor de la variable de sistema SQLPLUSCOMPATIBILITY.
UTLIZACIÓN DE ISQL*PLUS
INTRODUCCIÓN A ISQL*PLUS
El botón Clear a nivel de página limpia tanto el área de entrada como el área de salida, y
también cancela la ejecución de un script. El botón Cancel cancela la ejecución de un
script sin limpiar los contenidos del área de entrada.
Por defecto, la salida se muestra en el área de salida debajo del script. Es posible
guardar la salida a un fichero HTML, o generar una salida de impresión en la misma
ventana del navegador o en una nueva ventana.
El botón Preferences permite modificar las propiedades del interfaz iSQL*Plus, las
propiedades del sistema y la contraseña del usuario.
VISUALIZACIÓN DE RESULTADOS
Para proporcionar más control sobre la cantidad de datos mostrados en el área de salida
del navegador, iSQL*Plus Oracle Database 10g introduce la nueva funcionalidad Conjunto
siguiente de Resultados. Es posible especificar el número de líneas de datos a mostrar
mediante el comando SET PAGESIZE.
CONFIGURACIÓN DE SISTEMA
La pantalla de Configuración de Sistema reemplaza a la pantalla de Variables de Sistema
de Isql*PLUS 9.2.0. Contiene subcategorías para configurar formatos de salida, ejecución
de scripts y administración de la base de datos.
CAMBIO DE CONTRASEÑAS
Esta pantalla permite gestionar las contraseñas del usuario conectado. Los usuarios con
privilegios podrán cambiar también las contraseñas de otros usuarios.
CAMBIOS EN COMANDOS
El comando ACCEPT en iSQL*Plus muestra el promp por defecto “Enter value for
<variable>”, mientras que en SQL*Plus es una cadena vacía. Es posible utilizar la opción
PROMPT para personalizar un mensaje. iSQL*Plus ignora la opción NOPROMPT.
El comando CONNECT no necesita el identificador completo usuario/pwd. Si se especifica
usuario y contraseña, el campo password no muestra el contenido.
El comando PASSWORD se comporta como si fuese en modo comando, o sea mostrando
tres campos individuales: usuario, contraseña y confirmación de contraseña. Puede
utilizar la pantalla Change Password para modificar la contraseña en modo gráfico.
El comando RECOVER ya no requiere que la opción SET AUTORECOVERY está definida a
ON. iSQL*Plus solicita los logs de archivado offline y muestra las opciones Continue o
Cancel para aplicar los cambios de dichos logs.
Aunque iSQL*Plus soporta el comando RECOVER, no es recomendable su uso en este
entorno, debido a que el navegador podría mostrar mensajes de timout mientras la base
de datos está procesando un archivo de redo log offline. Un dba debe considerar,
igualmente, cuestiones de seguridad antes de acceder a la base de datos mediante
iSQL*Plus.
iSQL*Plus muestra un mensaje por cada variable de sustitución según las encuentra
dentro del script. Este es un cambio considerable frente a versiones anteriores.
Varios comandos no están disponibles, o no son útiles en iSQL*Plus cuando se ejecutan
en un script. Por ejemplo, los comandos de edición de buffer como CHANGE. Los scripts
que necesiten ser ejecutados en ambos entornos SQL*Plus e iSQL* Plus deberían utilizar
comandos disponibles en ambos entornos.
C
ANEXO C. Nuevas Funcionalidades
Oracle10g.
TABLA DE CONTENIDOS
Introducción .......................................................................................................................1
Nuevos Tipos de Datos .....................................................................................................1
Operadores de Comparación ................................................................................................ 3
Nuevas Funciones ................................................................................................................. 4
Restricciones en Columnas de Coma Flotante ..................................................................... 4
Expresiones Regulares .....................................................................................................5
Mecanismo de Búsqueda ...................................................................................................... 5
Meta Caracteres .................................................................................................................... 6
Funciones .............................................................................................................................. 7
Expresiones Regulares en DDL ............................................................................................ 8
Restricciones .................................................................................................................... 8
Índices .............................................................................................................................. 8
Vistas ................................................................................................................................ 9
Nuevos Métodos de Ordenación ...................................................................................... 9
Parámetros de Configuración ................................................................................................ 9
Impacto en Sentencias SQL ................................................................................................ 10
Ejemplo NLS_SORT............................................................................................................ 10
Función NLSSORT .............................................................................................................. 11
Cálculos Inter-Filas en SQL ............................................................................................ 11
Beneficios ............................................................................................................................ 12
Cláusula SPREADSHEET ................................................................................................... 12
Terminología ........................................................................................................................ 12
Referencias.......................................................................................................................... 14
Referencias a Celdas ..................................................................................................... 14
Referencias a Rangos .................................................................................................... 14
Función CURRENTV() ........................................................................................................ 15
Bucles Cualificados Incrementales ..................................................................................... 16
Bucles de Subconsulta Cualificados ................................................................................... 17
Valores Nulos y No Encontrados......................................................................................... 17
Opción UPDATE .................................................................................................................. 19
Orden de Evaluación de Reglas .......................................................................................... 20
Mejoras SQL Data WareHouse ....................................................................................... 20
Extensiones a la sentencia MERGE ................................................................................... 20
Cláusulas INSERT o UPDATE opcionales .................................................................... 21
Cláusulas UPDATE condicionales ................................................................................. 21
Condiciones ON Especiales ........................................................................................... 21
INSERT Condicionales ................................................................................................... 21
Cláusula DELETE Opcional ........................................................................................... 22
Mejoras en CONNECT BY .................................................................................................. 22
CONNECT BY ROOT .................................................................................................... 22
CONNECT BY ISLEAF .................................................................................................. 22
CONNECT BY ISCYCLE ............................................................................................... 23
ANEXO C. Nuevas Funcionalidades Oracle10g. C-1
INTRODUCCIÓN
El motor SQL de Oracle es la base subyacente de todas las aplicaciones de base de datos
Oracle. El lenguaje SQL de Oracle evoluciona continuamente para alcanzar las demandas
crecientes de las aplicaciones cada vez más complejas.
Oracle Database 10g incorpora nuevas capacidades SQL, convirtiendo a Oracle en la
mejor implementación de uno de los estándares más populares y duraderos en
informática.
A continuación se profundizará en las siguientes mejoras de SQL proporcionadas por
Oracle Database 10g:
• Los nuevos tipos de datos de coma flotante, basados en el estándar IEEE 754,
incorporados a Oracle Database 10g mejoran el rendimiento de operaciones de
coma flotante comunes en Java y XML, a la vez que reducen las necesidades de
espacio de almacenamiento.
• El soporte nativo en SQL de expresiones regulares revolucionará las búsquedas y
manipulaciones de texto dentro de la base de datos.
• Las consultas SQL pueden incluir una nueva sintaxis de cálculos analíticos
complejos sobre arrays de filas, proporcionando a SQL capacidades de cálculo
cercanas a las Hojas de Cálculo.
• Mejoras en la sentencia MERGE.
• Mejoras en nuevas cláusulas para consultas jerárquicas
OPERADORES DE COMPARACIÓN
Los operadores de comparación son:
• Igual a / Distinto a
• Mayor que / Mayor o Igual que
• Menor que / Menor o Igual que
• Desordenado
Las comparaciones son siempre exactas, siguiendo las reglas siguientes:
• Una comparación retorna un valor TRUE, FALSE o NULL.
• Es posible comparar valores NaN.
NaN = NaN devuelve TRUE
NaN = 3.0f devuelve FALSE
NaN != NaN devuelve FALSE
NaN != 3.0f devuelve TRUE
NaN > 3.0f devuelve TRUE
SQL> SELECT CASE
2 WHEN binary_float_NaN > 3.0f THEN 'cierto'
3 ELSE 'falso' END valor
4* FROM dual
VALOR
------
cierto
NUEVAS FUNCIONES
Oracle proporciona las siguientes funciones nuevas que ofrecen soporte a los nuevos
tipos de datos:
• TO_BINARY_FLOAT: Convierte un valor BINARY_DOUBLE, NUMBER, VARCHAR2 o
CHAR a BINARY_FLOAT.
• TO_BINARY_DOUBLE: Convierte un valor BINARY_FLOAT, NUMBER, VARCHAR2 o
CHAR a BINARY_DOUBLE.
• IS NAN/ IS NOT NAN: Determina si un valor es o no NaN.
• IS INFINITE/ IS NOT INFINITE: Determina si un valor es o no infinito positivo o
negativo.
• NANVL: Traduce un NaN a un valor especificado. Si el valor a traducir no es NaN,
devuelve dicho valor.
SQL> SELECT CASE
2 WHEN f IS INFINITE
3 THEN 'enorme'
4 ELSE TO_CHAR(f) END valor
5* FROM mitabla
VALOR
----------------------------------
2,0E+000
3,0E+000
enorme
EXPRESIONES REGULARES
La manipulación y búsquedas de cadenas de texto generan un gran porcentaje de la
lógica en las aplicaciones web. Las expresiones regulares son un método de describir
patrones simples o complejos de búsqueda y manipulación.
El estándar POSIX (Portable Operating System for UNIX) es un estándar IEEE que define
dos versiones diferentes de sintaxis de las expresiones regulares: Básica y Extendida. La
sintaxis extendida es un superconjunto de la sintaxis básica que ofrece mejores
funcionalidades de búsqueda al incluir operadores adicionales.
En Oracle 10g es posible utilizar el soporte de expresiones regulares tanto en SQL como
en PL/SQL. El NLSRTL (National Language Support RunTime Library) proporciona todos
los elementos lingüísticos para implementar dicho soporte.
MECANISMO DE BÚSQUEDA
La búsqueda de coincidencias comienza a principio de la cadena, en el primer carácter. Si
el carácter no coincide, el proceso comienza de nuevo con el siguiente carácter de la
cadena. Si el carácter coincide, se examina el carácter siguiente a buscar y se almacena
cualquier alternativa que pudiera haber resultado en la búsqueda. Este proceso continúa
hasta que falle la búsqueda de un carácter. Entonces, se recupera la última alternativa
almacenada en la posición donde se encontró la coincidencia.
Véase el siguiente ejemplo:
a a b c d
^ Búsqueda de ‘a’ y acierta Coincidencia
^ Búsqueda de ‘a’ y falla No coincide
^ Búsqueda de ‘b’ y falla No coincide
^ Búsqueda de ‘c’ y falla, inicializa y avanza No coincide
^ Búsqueda de ‘a’ y acierta Coincidencia
^ Búsqueda de ‘b’ y acierta. Almacena ‘c’ como alternativa Coincidencia
^ Búsqueda de ‘d’ y falla No coincide
^ Búsqueda de ‘c’ como última alternativa almacenada y No coincide
falla, inicializa y avanza
^ Búsqueda de ‘a’ y falla, inicializa y avanza No coincide
^ Búsqueda de ‘a’ y falla, inicializa y avanza No coincide
^ Búsqueda de ‘a’ y falla, inicializa y avanza No coincide
C-6 ANEXO C. Nuevas Funcionalidades Oracle10g.
META CARACTERES
Los meta caracteres son caracteres especiales que poseen un significado especial, como
por ejemplo, caracteres comodín, caracteres repetitivos, caracteres no coincidentes o
rangos de caracteres.
La tabla siguiente muestra algunos de los meta caracteres disponibles:
Sintaxis Descripción Clasificación
. Busca cualquier carácter Punto
a? Busca ‘a’ cero o una veces Cuantificador
a* Busca ‘a’ cero o varias veces Cuantificador
a+ Busca ‘a’ una o más veces Cuantificador
a|b Busca o bien ‘a’ o bien ‘b’ Alternativa
a{m} Busca ‘a’ exactamente m veces Cuantificador
a{m,} Busca ‘a’ al menos m veces Cuantificador
a{m,n} Busca ‘a’ entre m y n veces Cuantificador
[abc] Busca o bien ‘a’ o bien ‘b’ o bien ‘c’ Corchetes
(...) Agrupa una expresión Subexpresión
\n Busca la enésima subexpresión Referencia hacia atrás
[:cc:] Busca la clase de caracteres entre corchetes Clase de Caracteres
[.ce.] Busca el elemento de colación entre corchetes Elemento de Colación
[=ec=] Busca la clase de equivalencia entre corchetes Clase de Equivalencia
Los ejemplos siguientes ilustran la utilización de meta caracteres.
• Búsqueda simple. Busca la expresión ‘abc’ en una cadena
Expresión: ‘abc’
Coincidencia: ‘abc’
No coincide: ‘def’
• Busca un carácter ‘a’ seguido de cualquier carácter, y seguido del carácter ‘c’.
Expresión: ‘a.c’
Coincidencia: ‘abc’
Coincidencia: ‘adc’
Coincidencia: ‘alc’
Coincidencia: ‘a&c’
No coincide: ‘abb’
Expresión: ‘a+’
Coincidencia: ‘a’
Coincidencia: ‘aa’
Coincidencia: ‘aaa’
No coincide: ‘bbb’
Expresión: ‘[^abc]’
Coincidencia: ‘abcdef’
Coincidencia: ‘ghi’
No coincide: ‘abc’
ANEXO C. Nuevas Funcionalidades Oracle10g. C-7
Expresión: ‘[^a-f]’
Coincidencia: ‘efghi’
Coincidencia: ‘lmn’
No coincide: ‘abc’
FUNCIONES
Oracle Database 10g proporciona un conjunto de funciones que proporcionan toda la
funcionalidad de las expresiones regulares. Todas las funciones soportan tipos de datos
CHAR, VARCHAR2, CLOB, NCHAR, NVARCHAR2 y NCLOB.
Función Descripción
REGEXP_LIKE Determina qué patrón coincide. Similar
al operador LIKE.
REGEXP_SUBSTR Busca un patrón dentro de una
cadena, devolviendo una subcadena.
Similar a la función SUBSTR.
REGEXP_INSTR Busca una subcadena determinada,
devolviendo la posición donde se
encuentra dentro de una cadena.
REGEXP_REPLACE Busca un patrón y lo reemplaza por
una cadena.
•
• REGEXP_LIKE – Devuelve un valor booleano indicando si el patrón coincide con la
cadena dada o no. No proporciona detalles acerca de la coincidencia.
SELECT first_name ||' '|| last_name, salary, EXTRACT(YEAR FROM hire_date)
FROM employees
WHERE REGEXP_LIKE (TO_CHAR(hire_date, 'YYYY'), '199[8-9]$');
• REGEXP_INSTR – Devuelve la posición del carácter tanto del comienzo como del
final de la coincidencia. No es posible trabajar desde el final de la cadena.
SELECT * FROM product
WHERE REGEXP_INSTR(descrip, 'TENNIS', 1, 3) = 0;
REGEXP_REPLAC
-------------
Mi página Web
RESTRICCIONES
Es posible utilizar Expresiones Regulares para filtrar los datos a introducir en una tabla
mediante el uso de restricciones. El ejemplo siguiente muestra cómo configurar una
columna de tipo VARCHAR2 para permitir únicamente caracteres alfabéticos. Esto
impedirá introducir en dicha columna cualquier signo de puntuación, números, espacios
en blanco, etc.
ÍNDICES
Suele ser habitual mejorar el rendimiento de acceso a una tabla mediante la creación de
índices sobre columnas de uso frecuente y fácilmente indexables. Las expresiones
regulares de Oracle no es fácil que hagan uso de los índices pues éstos se basan en
conocer cómo comienza la columna, y no ayudan mucho a las funciones que buscan
patrones complejos sobre la columna.
Es posible, sin embargo, hacer uso de índices basados en funciones en aquellos casos
donde se prevea utilizar la misma expresión sobre una columna en múltiples consultas. El
índice se crea en base a los resultados de la función.
VISTAS
Las vistas son un buen mecanismo para mostrar subconjuntos de una consulta o para
formatear los datos antes de mostrarlos al usuario final. La combinación de vistas y
expresiones regulares facilita la tarea de formatear los datos.
El ejemplo siguiente modifica una dirección de correo para evitar la detección automática
de las mismas, pero manteniéndolas legibles. Una manera de hacerlo sería incluyendo un
espacio entre cada carácter. Mediante REGEXP_REPLACE y referencias hacia atrás, será
posible reemplazar cada letra por sí misma seguida de un espacio en blanco.
PARÁMETROS DE CONFIGURACIÓN
Es posible utilizar el parámetro de sesión NLS_SORT para especificar el nombre de
ordenación lingüística. El valor por defecto se deriva del parámetro NLS_LANGUAGE. Los
valores _AI y _CI se añaden como sufijo al nombre de ordenación para indicar una
ordenación insensible a acentos o una ordenación insensible a mayúsculas.
PARAMETER VALUE
------------------------------ ---------------------------
NLS_LANGUAGE SPANISH
NLS_TERRITORY SPAIN
NLS_CURRENCY €
NLS_ISO_CURRENCY SPAIN
NLS_NUMERIC_CHARACTERS ,.
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD/MM/RR
NLS_DATE_LANGUAGE SPANISH
NLS_SORT SPANISH
NLS_TIME_FORMAT HH24:MI:SSXFF
(…)
C-10 ANEXO C. Nuevas Funcionalidades Oracle10g.
EJEMPLO NLS_SORT
FUNCIÓN NLSSORT
La función NLSSORT extiende el soporte de los nuevos métodos de ordenación a
sentencias SQL concretas. La sintaxis es la siguiente:
La función NLSSORT puede tomar un valor del parámetro NLS_LANG o del parámetro
NLS_LANGUAGE como alternativa.
BENEFICIOS
• Las hojas de cálculo son herramientas de elevada productividad personal,
mediante las cuales se pueden construir complejos modelos de cálculo.
• Sin embargo, adolecen de un gran problema de escalabilidad cuando el número
de fórmulas y/o la cantidad de datos es muy elevada.
• Las hojas de cálculo de sobremesa no tienen acceso a las capacidades de
procesamiento en paralelo de los servidores.
• En un entorno empresarial, donde existen múltiples hojas de cálculo, la
consolidación de los datos es complicada, y puede resultar costoso obtener una
impresión rápida del negocio accediendo a múltiples hojas de cálculo.
Oracle resuelve estos problemas introduciendo cálculos tipo hoja de cálculo en SQL.
CLÁUSULA SPREADSHEET
Oracle Database 10g incorpora a la sintaxis SQL la cláusula SPREADSHEET para integrar
toda la funcionalidad de cálculos inter-filas en el servidor. Esta cláusula supone una
mejora de SQL permitiendo realizar cálculos tipo hoja de cálculo desde SQL dentro del
servidor Oracle.
La cláusula SPREADSHEET permite mostrar las filas seleccionadas como un array
multidimensional así como acceder aleatoriamente a celdas del array, especificando unas
asignaciones de celdas, referidas como reglas, que ejecutan cálculos sobre celdas
individuales o sobre rangos de celdas. Estas reglas operan sobre los resultados de la
consulta y no modifican ninguna tabla de la base de datos.
La cláusula SPREADSHEET ofrece toda la flexibilidad para:
• Direccionamientos simbólicos de celdas.
• Cálculos simbólicos sobre un array.
• UPSERT/ UPDATE por reglas.
• Construcciones bucle.
• Cálculos ordenados.
• Referencia a Hojas de Cálculo.
• Ordenamiento de reglas automático.
• Resolución recursiva de un modelo.
• Soporte de vistas materializadas.
TERMINOLOGÍA
Las columnas de una tabla o subconsulta se clasifican en tres grupos: columnas de
particionamiento, columnas de dimensiones y columna de medidas. Las medidas pueden
ser tratadas como celdas en un array de n dimensiones.
• Una clave de dimensión es una expresión en la cláusula DIMENSION BY.
• Una clave de partición es una expresión en la cláusula PARTITION BY.
• Una medida es una expresión nombrada en la cláusula MEASURES.
• Una referencia puntual es una referencia a una única celda.
El siguiente ejemplo muestra una referencia en una hoja bidimensional a la celda que muestra la suma de
ventas (s) del producto (p) Shorts, para el año (y) 2000
s[p=‘Shorts’, y=2000]
ANEXO C. Nuevas Funcionalidades Oracle10g. C-13
SELECT job_title, d, a, s
FROM emp_dept_job
SPREADSHEET
PARTITION BY (job_title)
DIMENSION BY (department_name d, año a)
MEASURES (suma s)
(s['Purchasing', 2000]=(s['Purchasing', 1997] + s['Purchasing', 1998] +
s['Purchasing', 1999])/3,
s['Sales', 2001]=s['Sales', 2000]);
Donde:
• La cláusula PARTITION provoca el particionado de los resultados por el campo
JOB_TITLE
• Las columnas DIMENSION se identifican como DEPARTMENT_NAME y AÑO
• La clave MEASURES identifica una medida, SALES, para la hoja de cálculo, y tiene
asignado un alias S
• La expresión S[`Purchasing’, 2000] es una referencia a una celda. En ella se hace
referencia al alias del campo MEASURE, y dentro de los corchetes se incluyen los
valores para las dimensiones definidas en la partícula DIMENSION.
• Esta consulta está prediciendo que para cada puesto, los sueldos del año 2000 del
departamento ‘Purchasing’ corresponderán a la media de los 3 años anteriores,
mientras que los sueldos del departamento ‘Sales’ para el año 2001 no variarán
con respecto al año 2000.
• La cláusula SPREADSHEET opera sobre el resultado de la consulta de
agrupamiento asociada a la vista, y no modifica ninguna tabla base.
C-14 ANEXO C. Nuevas Funcionalidades Oracle10g.
REFERENCIAS
REFERENCIAS A CELDAS
Una referencia a una celda debe calificar todas las dimensiones de la partición, listadas
en la cláusula DIMENSION BY.
La referencia puede ser:
• Referencia Simbólica.
Las dimensiones se cualifican mediante una expresión booleana. Deben incluirse dentro de los corchetes
tantas condiciones como dimensiones hayan en la cláusula DIMENSION BY. Cada una de las condiciones
debe cualificas una única dimensión y debe incluir una única columna como predicado.
Es posible utilizar referencias a una o varias celdas. Una referencia a una celda se
cualifica utilizando un predicado de igualdad. Cualquier otra referencia con
predicados distintos a la igualdad implica una referencia múltiple.
S [d=’Sales’, a=2000]
• Referencia Posicional.
Las dimensiones se cualifican mediante su posición en la cláusula DIMENSION BY. Cada valor proporcionado
entre corchetes se asocia a la dimensión en la posición equivalente en la cláusula.
S [’Sales’, 2000]
Las referencias simbólica y posicional gestionan los valores nulos de forma diferente. Con
una referencia simbólica como s[d=NULL, y=2000], esto no cualifica a ninguna celda pues
la igualdad NULL=NULL nunca es cierta. Sin embargo, al utilizar la referencia por posición
s[NULL, 2000] si cualificará a una celda donde d IS NULL y y=2000.
REFERENCIAS A RANGOS
Es posible referenciar a un conjunto de celdas en la parte derecha de una regla, para
aplicar una operación de agrupamiento sobre dicho conjunto. Las referencias a rangos se
localizan a la derecha de la regla y no generan nuevas filas, realizando un bucle que
recorre las filas existentes.
El siguiente ejemplo muestra la suma de sueldos del departamento ‘Sales’ para el año
2000, así como la media de las sumas de sueldos de dicho departamento entre los años
1990 y 1999.
FUNCIÓN CURRENTV()
La función CURRENTV() devuelve el valor actual de una dimensión desde el lado
izquierdo de una asignación. Es posible utilizar esta función para realizar una ordenación
relativa al valor de la dimensión a la izquierda de la regla.
En este ejemplo, las expresiones de la derecha muestran una referencia al valor actual
del departamento en la expresión de la izquierda, que es ‘Sales’. La siguiente expresión
es equivalente:
JOB_TITLE D A S
------------------------- ---------- ---------- ----------
Sales Manager Sales 1996 14000
Sales Manager Sales 1997 25500
Sales Manager Sales 1999 11000
Sales Manager Sales 2000 10500
Sales Manager Sales 2001 21500
(…)
El operador INCREMENT se aplica a todos los tipos de datos que soporten sumas o
restas, o sea tipos de datos numéricos o de fecha.
Es posible utilizar el bucle FOR... INCREMENT con cadenas de texto. La sintaxis es
ligeramente diferente:
En esta regla, la suma de sueldos del departamento ‘Sales’ para cada uno de los
trimestres T1, T2, T3 o T4 del año 2000 será igual a la suma de sueldos para cada uno
de los trimestres del año 1999.
ANEXO C. Nuevas Funcionalidades Oracle10g. C-17
JOB_TITLE D A S Y_DIFF
------------------ ---------------- ---------- ---------- ----------
Accountant Finance 1985 0
Accountant Finance 1986 0
Accountant Finance 1987 0
Accountant Finance 1988 0
Accountant Finance 1989 0
Accountant Finance 1990 0
Accountant Finance 1991 0
Accountant Finance 1992 0
(…)
En la vista EMP_DEPT_JOB pueden no estar presentes algunos años. Sin embargo, todos
los años deben estar presentes en la tabla AÑO (entre 1985 y 2000), que puede ser
utilizada en la subconsulta.
En el ejemplo, la cláusula UPSERT se utiliza para densificar los datos. Esta consulta
calcula la diferencia entre las sumas de sueldos del departamento ‘Finance’ del año actual
y del año anterior, tanto si están como si no están en la vista EMP_DEPT_JOB.
JOB_TITLE D A S
----------------------------------- -------------------- ---------- ----------
Sales Manager Sales 1996 14000
Sales Manager Sales 1997 25500
Sales Manager Sales 1999 11000
Sales Manager Sales 2000 11000
Sales Representative Sales 1996 39500
Sales Representative Sales 1997 74800
Sales Representative Sales 1998 59100
Sales Representative Sales 1999 31200
Sales Representative Sales 2000 31200
La función PRESENTNNV (present and not null) comprueba si la celda existe y no toma
un valor nulo. Si la celda existe se deja como está. Si no existe, se crea la celda y se le
asigna un valor.
Las expresiones IGNORE NAV y KEEP NAV son opciones de la cláusula SPREADSHEET. Si
se especifica la opción IGNORE NAV, los valores nulos y no encontrados se inicializan a:
• 0 para datos numéricos.
• ‘01/01/2000’ para datos de fecha.
• ‘’ para datos tipo carácter.
La opción KEEP NAV es la opción por defecto y retorna un valor NULL para las referencias
de celdas no encontradas o para celdas con valores nulos.
ANEXO C. Nuevas Funcionalidades Oracle10g. C-19
A B
---------- ----------
1 1
2 2
3 0
Puesto que la celda [2] no existía antes del comienzo de la evaluación de las reglas, el
predicado b[2] IS PRESENT se evalúa como FALSE.
OPCIÓN UPDATE
Por defecto, las reglas de la cláusula SPREADSHEET tienen una semántica UPSERT. Esto
quiere decir que si la celda referenciada en el lado izquierdo existe, dicha celda es
modificada. Si no existe, se genera una nueva fila conteniendo dicha celda.
Es posible modificar el comportamiento por defecto mediante la opción UPDATE. En el
ejemplo siguiente, se asigna un valor a las celdas de los departamentos ‘Sales’ o
‘Finance’ del año 2000 como la suma de los valores de los años 1998 y 1999 para el
departamento actual. Si una fila no existe, no se ejecuta ninguna asignación ni creación
de la fila.
JOB_TITLE D A S
----------------------------------- -------------------- ---------- ----------
Accountant Finance 1994 9000
Accountant Finance 1997 15900
Accountant Finance 1998 7800
Accountant Finance 1999 6900
Finance Manager Finance 1994 12000
Sales Manager Sales 1996 14000
Sales Manager Sales 1997 25500
Sales Manager Sales 1999 11000
C-20 ANEXO C. Nuevas Funcionalidades Oracle10g.
JOB_TITLE D A S
----------------------------------- -------------------- ---------- ----------
Sales Manager Sales 1996 14000
Sales Manager Sales 1997 25500
Sales Manager Sales 1998 40000
Sales Manager Sales 1999 50000
Sales Manager Sales 2000 90000
(…)
CONDICIONES ON ESPECIALES
Para insertar todas las filas de la tabla origen en otra tabla sin unir ambas tablas origen y
destino, se puede utilizar el predicado ON constante.
En el siguiente ejemplo, la tabla NEW_PRODUCT será una copia vacía de la tabla
PRODUCTS excepto una columna renombrada.
MERGE INTO new_products np
USING products p
ON (1=0)
WHEN NOT MATCHED THEN
INSERT (np.prod_id, np.prod_new_status)
VALUES (p.prod_id, p.prod_status);
INSERT CONDICIONALES
Es posible añadir una condición WHERE a la sentencia INSERT, que compruebe una
condición cuando se desee no realizar la operación.
MEJORAS EN CONNECT BY
Oracle 10g incluye tres nuevas cláusulas para consultar jerárquicas:
• CONNECT_BY_ROOT
• CONNECT_BY_ISLEAF
• CONNECT_BY_ISCYCLE
CONNECT BY ROOT
A veces puede ser útil deshacer el camino hasta la fila inicial en una jerarquía. El
operador CONNECT_BY_ROOT permite referenciar valores de la fila inicial desde
cualquier fila en la jerarquía.
Uno de los usos de CONNECT_BY_ROOT puede ser identificar todos los productos que
contienen determinado componente (ej.: búsqueda de productos con un componente
defectuoso). Otro de los usos, mostrado en el ejemplo, permite obtener un porcentaje
referido al valor de la fila inicial.
CONNECT BY ISLEAF
La pseudocolumna CONNECT_BY_ISLEAF permite conocer a priori si una fila contiene
filas dependientes, o es una fila “leaf”.
Esto permitiría, por ejemplo, habilitar una jerarquía de tipo drill-down mediante
hiperenlaces web para profundizar en los detalles.
CONNECT BY ISCYCLE
Al consultar datos jerárquicos, es posible encontrar una jerarquía que es circular.
UPDATE employees
SET MANAGER_ID=156
WHERE EMPLOYEE_ID=100;
Introducción .......................................................................................................................1
Funciones Numéricas ............................................................................................................ 1
Funciones de cadena de caracteres que devuelven caracteres ........................................... 4
Funciones de cadena de caracteres que devuelven números.............................................. 7
Funciones de fecha y hora .................................................................................................... 8
Funciones de conversión..................................................................................................... 12
Otras funciones. .................................................................................................................. 16
ANEXO D. Funciones SQL D-1
INTRODUCCIÓN
A continuación se relacionan las funciones SQL más comunes clasificadas según los
grupos siguientes:
• Funciones Numéricas
• Funciones de cadena de caracteres que devuelven caracteres
• Funciones de cadena de caracteres que devuelven números
• Funciones de fecha y hora
• Funciones de conversión
• Otras funciones
FUNCIONES NUMÉRICAS
Sintaxis ABS(n)
Propósito Devuelve el valor absoluto de n.
ABS SQL> SELECT ABS(-25) FROM DUAL;
ABS(-25)
Ejemplo
----------
25
Sintaxis ACOS(n)
Propósito Devuelve el coseno del arco de n.
ACOS SQL> SELECT ACOS(.25) FROM DUAL;
ACOS(.25)
Ejemplo ----------
1,31811607
Sintaxis ASIN(n)
Propósito Devuelve el seno del arco de n.
ASIN SQL> SELECT ASIN (.25) FROM DUAL;
ASIN(.25)
Ejemplo ----------
,252680255
Sintaxis ATAN(n)
Propósito Devuelve la tangente del arco de n.
ATAN SQL> SELECT ATAN(.25) FROM DUAL;
ATAN(.25)
Ejemplo
----------
,244978663
Sintaxis ATAN2(N,M)
Propósito Devuelve la tangente del arco de n y m.
ATAN2 SQL> SELECT ATAN2(.25,.3) FROM DUAL;
ATAN2(.25,.3)
Ejemplo
-------------
,694738276
Sintaxis ATAN2(N,M)
ATAN2
Propósito Devuelve la tangente del arco de n y m.
D-2 ANEXO D. Funciones SQL
Sintaxis CEIL(n)
Propósito Devuelve el entero superior o igual a n.
CEIL SQL> SELECT ceil(12.1) FROM DUAL;
CEIL(12.1)
Ejemplo
----------
13
Sintaxis COS(n)
Propósito Devuelve el coseno de n en radianes.
COS SQL> SELECT cos(180) FROM DUAL;
COS(180)
Ejemplo
----------
-,59846007
Sintaxis COSH(n)
Propósito Devuelve el coseno hiperbólico de n.
COSH SQL> SELECT cosh(0) FROM DUAL;
COSH(0)
Ejemplo
----------
1
Sintaxis EXP(n)
Propósito Devuelve el número e elevado a la potencia de n
EXP SQL> SELECT exp(3) FROM DUAL;
EXP(3)
Ejemplo
----------
20,0855369
Sintaxis FLOOR(n)
Propósito Devuelve el entero inferior o igual a n.
FLOOR SQL> SELECT floor(13.6) FROM DUAL;
FLOOR(13.6)
Ejemplo
-----------
13
Sintaxis LN(n)
Propósito Devuelve el logaritmo neperiano de n.
LN SQL> SELECT ln(27) FROM DUAL;
LN(27)
Ejemplo
----------
3,29583687
Sintaxis Log(M,N)
LOG
Devuelve el logaritmo en base m de n. M y n deben
Propósito
de ser enteros positivos y m!=0 y m!=1
ANEXO D. Funciones SQL D-3
Sintaxis POWER(m,n)
Devuelve m elevado a la potencia n. Si m es
Propósito
POWER negativo, n debe de ser un numero entero.
SQL> SELECT power(10,3) FROM DUAL;
POWER(10,3)
Ejemplo
-----------
1000
Sintaxis ROUND(n,[m])
Devuelve n redondeado a m. Si se omite m por
Propósito
defecto es 0.
ROUND SQL> SELECT round(12.345,2) FROM DUAL;
ROUND(12.345,2)
Ejemplo
---------------
12,35
Sintaxis SIGN(n)
Si n>0 devuelve1. Si n=0 devuelve 0. Si n<0
Propósito
devuelve –1.
SIGN SQL> SELECT sign(-14) FROM DUAL;
SIGN(-14)
Ejemplo
----------
-1
Sintaxis SIN(n)
Propósito Devuelve el seno de n.
SIN SQL> SELECT sin(90) FROM DUAL;
SIN(90)
Ejemplo
----------
,893996664
Sintaxis SINH(n)
Propósito Devuelve el seno hiperbólico de n
SINH SQL> SELECT sinh(1) FROM DUAL;
SINH(1)
Ejemplo
----------
1,17520119
Sintaxis SQRT(n)
Propósito Devuelve la raíz cuadrada de n. n>0
SQL> SELECT sqrt(16) FROM DUAL;
SQRT
SQRT(16)
Ejemplo
----------
4
TAN(n)
TAN Sintaxis
Propósito Devuelve la tangente de n.
D-4 ANEXO D. Funciones SQL
Sintaxis TANH(n)
Propósito Devuelve la tangente hiperbólica de n.
TANH SQL> SELECT tanh(45) FROM DUAL;
TANH(45)
Ejemplo
----------
1
Sintaxis TRUNC(n,[m])
Devuelve n truncado a m decimales. Si se omite m
Propósito
el valor por defecto es 0.
TRUNC SQL> SELECT trunc(12.345,2) FROM DUAL;
TRUNC(12.345,2)
Ejemplo
---------------
12,34
Sintaxis WIDTH_BUCKET ( expr min, max , num )
Utilizado para la construcción de histogramas.
Compara los valores de expresión con los valores
Propósito
mínimo y máximo. En el caso de superar se asigna
el valor num.
SQL> SELECT FIRST_NAME,SALARY,
WIDTH_BUCKET(salary, 100, 10000,30) "Grupo"
WIDTH_BUCK FROM employees where department_id =30
ET order by salary;
FIRST_NAME SALARY Grupo
-------------------- ---------- ----------
Ejemplo Karen 2500 8
Guy 2600 8
Sigal 2800 9
Shelli 2900 9
Alexander 3100 10
Den 11000 31
Sintaxis INITCAP(cadena)
Devuelve la primera letra de cada palabra en
Propósito
INITCAP mayúsculas. Palabras delimitadas por blancos.
SQL> SELECT initcap('el nombre') FROM DUAL;
INITCAP('
Ejemplo
---------
El Nombre
Sintaxis LOWER(cadena)
Devuelve la cadena de caracteres con todas las letras
Propósito
en minúsculas
LOWER SQL> SELECT lower('holA MUNdo') FROM DUAL;
LOWER('HOL
Ejemplo
----------
hola mundo
Sintaxis LPAD(cadena1,n,[cadena2])
Devuelve la cadena1 rellenada con el carácter por la
izquierda indicado en cadena2, hasta la longitud
Propósito
indicada en n. Si se omite la cadena2 se rellena hasta
LPAD la longitud con blancos.
SQL> SELECT lpad('Base',10,'*') FROM DUAL;
LPAD('BASE
Ejemplo
----------
******Base
Sintaxis LTRIM(cadena, muestra)
Borra los caracteres a la izquierda de la cadena de
Propósito caracteres hasta encontrar el primer carácter que no
LTRIM está en la muestra.
SQL> SELECT ltrim('pspspEl perro','ps') FROM DUAL;
LTRIM('P
Ejemplo
--------
El perro
Sintaxis NLS_INITCAP(cadena, parámetros NLS)
Devuelve la cadena de caracteres la primera letra de
Propósito cada palabra en mayúsculas. Dependiente de del
parámetro de ordenación NLS
NLS_INITCAP SQL> SELECT nls_initcap('ijs','NLS_SORT = XDutch')
FROM DUAL;
Ejemplo IJs
SQL> SELECT nls_initcap('ijs') FROM DUAL;
Ijs
Sintaxis NLS_LOWER(cadena, parámetros NLS)
Devuelve la cadena de caracteres en minúsculas.
Propósito
Dependiente de del parámetro de ordenación NLS
NLS_LOWER SQL> SELECT nls_lower('HOla','NLS_SORT = XDutch')
FROM DUAL;
Ejemplo NLS_
----
hola
D-6 ANEXO D. Funciones SQL
Sintaxis SUBSTR(cadena,M,[N])
Devuelve una parte de la cadena, empezando por la
posición indicada en M y tantos caracteres como se
Propósito
indica en N.
SUBSTR Existen las funciones SUBSTRB, SUBSTRC
SQL> SELECT SUBSTR('papagayo',1,4) FROM DUAL;
SUBS
Ejemplo
----
papa
Sintaxis UPEER(cadena)
Devuelve la cadena de caracteres con todas las letras
Propósito
en MAYÚSCULAS
UPPER SQL> SELECT UPPER('holA MUNdo') FROM DUAL;
LOWER('HOL
Ejemplo
----------
HOLA MUNDO
Sintaxis LENGTH(cadena1)
Devuelve la longitud de la cadena, incluyendo los
Propósito
blancos..
SQL> SELECT LENGTH('hola mundo') FROM DUAL;
LENGTH
LENGTH('HOLAMUNDO')
Ejemplo -------------------
10
EXTRACT
( { { AÑO
| MES
| DIA
| HORA
| MINUTOS
| SEGUNDOS
}
| { TIMEZONE_HOUR
Sintaxis
| TIMEZONE_MINUTE
}
| { TIMEZONE_REGION
EXTRACT | TIMEZONE_ABBR
}
}
FROM { expresión de fecha | expresión
interval }
)
Devuelve el valor especificado de una
Propósito
expresión de fecha o intervalo.
SQL> SELECT EXTRACT(YEAR FROM DATE '1995-
04-29') FROM DUAL;
Ejemplo EXTRACT(YEARFROMDATE'1995-04-29')
---------------------------------
1995
FROM_TZ ( timestamp_value ,
Sintaxis
time_zone_value )
Devuelve un valor timestamp conevertidoa a
Propósito
timestamp con TIME_ZONE
SQL> SELECT FROM_TZ(TIMESTAMP '2003-03-28
FROM_TZ 08:00:00', '5:00')
2 FROM DUAL;
Ejemplo FROM_TZ(TIMESTAMP'2003-03-2808:00:00','5:00')
-----------------------------------------------------------
-
28/03/03 08:00:00,000000000 +05:00
Sintaxis LAST_DAY(fecha)
Devuelve el ultimo día del mes que contenga la
Propósito
fecha especificada como argumento.
LAST_DAY SQL> SELECT SYSDATE,LAST_DAY(SYSDATE)
FROM DUAL;
Ejemplo SYSDATE LAST_DAY(SYSDATE)
-------------------- --------------------
13-MAR-2003 10:49:00 31-MAR-2003 10:49:00
Sintaxis LOCALTIMESTAMP(precision)
Devuelve la fecha y la hora actual con TIME
Propósito
ZONE en el formato de TIMESTAMP.
SQL> SELECT CURRENT_TIMESTAMP,
LOCAL LOCALTIMESTAMP FROM DUAL;
TIMESTAMP CURRENT_TIMESTAMP LOCALTIMESTAMP
----------------------------------- --------------
Ejemplo ----------
13/03/03 04:52:34,092000 -05:00 13/03/03
04:52:34,092000
D-10 ANEXO D. Funciones SQL
MONTHS_BETWEEN(fecha1, fecha2)
Sintaxis
Devuelve el número de meses entre las dos
Propósito
MONTHS_ fechas que recibe como argumentos.
SQL> SELECT
BETWEEN MONTHS_BETWEEN(SYSDATE+34,SYSDATE)
FROM DUAL;
Ejemplo
MONTHS_BETWEEN(SYSDATE+34,SYSDATE)
----------------------------------
1,09677419
Sintaxis NEW_TIME ( fecha , zona1 , zona2 )
Devuelve la fecha en la zona horaria
Propósito
especificada en el argumento zona2.
SQL> SELECT SYSDATE, NEW_TIME(SYSDATE,
NEW_TIME 'AST','PST') FROM DUAL;
SYSDATE NEW_TIME(SYSDATE,'AS
Ejemplo -------------------- --------------------
13-MAR-2003 11:16:04 13-MAR-2003
07:16:04
Sintaxis NEXT_DAY ( fecha , char )
Devuelve la fecha del día de la semana indicado
Propósito
en char a partir de la fecha indicada en fecha.
NEXT_DAY SQL> SELECT NEXT_DAY(SYSDATE,'DOMINGO')
FROM DUAL;
Ejemplo NEXT_DAY(SYSDATE,'DO
--------------------
16-MAR-2003 11:20:41
Sintaxis NUMTODSINTERVAL ( n , 'char_expr' )
Convierte el numero n en el tipo literal INTERVAL
Propósito DAY TO SECOND. 'DAY' ,'HOUR' ,'MINUTE' ,
NUMTODSINTER
'SECOND'
VAL SQL> SELECT NUMTODSINTERVAL (4,'DAY') FROM
DUAL;
Ejemplo NUMTODSINTERVAL(4,'DAY')
--------------------------------------------------
+000000004 00:00:00.000000000
Sintaxis NUMTOYMINTERVAL ( n , 'char_expr' )
Convierte el numero n en el tipo literal INTERVAL
Propósito
YEAR TO MONTH. ‘YEAR’ ,’MONTH’
NUMTOYMINTE SQL> SELECT NUMTOYMINTERVAL (4,'YEAR') FROM
RVAL DUAL;
Ejemplo NUMTOYMINTERVAL(4,'YEAR')
-------------------------------------------------
+000000004-00
Sintaxis ROUND ( FECHA [, formato ] )
Devuelve la fecha correspondiente al formato
Propósito especificado. Si se omite se muestra la fecha del
día siguiente.
ROUND SQL> SELECT SYSDATE,ROUND(SYSDATE, 'YEAR')
FROM DUAL;
SYSDATE ROUND(SYSD
Ejemplo ---------- ----------
13-03-2003 01-01-2003
ANEXO D. Funciones SQL D-11
Sintaxis SESSIONTIMEZONE
Devuelve el TIME ZONE (zona horaria) de la
Propósito
SESSIONTIMEZO sesión.
NE SQL> SELECT SESSIONTIMEZONE FROM DUAL;
SESSIONTIMEZONE
Ejemplo
--------------------------------------
-05:00
Sintaxis SYSTIMESTAMP
Devuelve la fecha y la hora del sistema y la zona
Propósito horaria. El tipo de datos devuelto es TIMESTAMP
SYSTIMESTAMP WITH TIME ZONE
SQL> SELECT SYSTIMESTAMP FROM DUAL;
SYSTIMESTAMP
Ejemplo
--------------------------------------
13/03/03 11:49:27,380000 +01:00
Sintaxis TO_DSINTERVAL ( char ['nlsparam'] )
Convierte la cadena de caracteres en el tipo de
Propósito
datos INTERVAL DAY TO SECOND.
TO_DSINTERVA SQL> SELECT TO_DSINTERVAL('100 10:00:00')
L FROM DUAL;
Ejemplo TO_DSINTERVAL('10010:00:00')
----------------------------------------------------
+000000100 10:00:00.000000000
Sintaxis TO_TIMESTAMP ( char [ , fmt ['nlsparam']]
Convierte la cadena de caracteres en el tipo de
Propósito
dato TIMESTAMP.
TO_TIMESTAMP SQL> SELECT TO_TIMESTAMP ('1999-12-01
11:00:00', 'YYYY-MM-DD HH:MI:SS') FROM DUAL;
Ejemplo TO_TIMESTAMP('19990','YYYY-MM-DDHH:MI:SS')
----------------------------------------------------------
01/12/99 11:00:00,000000000
Sintaxis TO_TIMESTAMP_TZ ( char[ ,fmt 'nlsparam']] )
Convierte la cadena de caracteres en el tipo de
Propósito
dato TIMESTAMP WITH TIME ZONE.
TO_TIMESTAMP SQL> SELECT TO_TIMESTAMP_TZ(SYSDATE)
_TZ FROM DUAL;
Ejemplo TO_TIMESTAMP_TZ(SYSDATE)
------------------------------------------------
13/03/20 03:12:26 -05:00
D-12 ANEXO D. Funciones SQL
FUNCIONES DE CONVERSIÓN
Sintaxis ASCIISTR(cadena)
Propósito Convierte la cadena de caracteres en ASCII
ASCIISTR SELECT ASCIISTR('ABÄCDE') FROM DUAL;
ASCIIS
Ejemplo
------
ABDCDE
Sintaxis
BIN_TO_NUM(expr[,expr]...)
Propósito
Convierte una cadena binaria de bits en un número.
BIN_TO_NUM
SQL> SELECT BIN_TO_NUM(1,0,1,1,0) FROM DUAL;
BIN_TO_NUM(1,0,1,1,0)
Ejemplo
---------------------
22
CAST({expr | (subquery)| MULTISET(subquery)}
Sintaxis
AS type_name)
Propósito Convierte un tipo de datos en otro tipo de datos.
SQL> SELECT CAST('22-OCT-1997' AS TIMESTAMP WITH
CAST LOCAL TIME ZONE) FROM DUAL;
CAST('22-OCT-1997'ASTIMESTAMPWITHLOCALTIMEZONE)
Ejemplo
-------------------------------------------------------------
22/10/97 00:00:00,000000
ANEXO D. Funciones SQL D-13
Sintaxis CHARTOROWID(char)
Convierte la cadena de caracteres en tipo de datos
Propósito
ROWID
SQL> SELECT last_name FROM employees
CHARTOROWID WHERE ROWID =
CHARTOROWID('AAAGwDAAEAAAABUAAA');
Ejemplo
LAST_NAME
-------------------------
King
Sintaxis COMPOSE('string')
La cadena de caracteres la convierte en una cadena de
Propósito
caracteres UNICODE.
COMPOSE SQL> SELECT COMPOSE ( 'o' || UNISTR('\0308') ) FROM
DUAL;
Ejemplo C
-
ö
Sintaxis CONVERT(char,dest_char_set[,source_char_set])
Propósito Convierte una cadena en un juego de caracteres a otro.
SQL> SELECT CONVERT('España', 'we8dec','us7ascii') FROM
CONVERT DUAL;
Ejemplo CONVER
------
Espaqa
Sintaxis DECOMPOSE('string' [CANONICAL | COMPATIBILITY])
Valida solo para cadenas de caracteres UNICODE.
Propósito Devuelve la cadena de caracteres de entrada en
DECOMPOSE UNICODE.
SELECT DECOMPOSE ('Châteaux') FROM DUAL;
DECOMPOSE
Ejemplo
---------
Cha^teaux
Sintaxis HEXTORAW ( char )
Convierte una cadena que contiene dígitos en
Propósito
HEXTORAW hexadecimal a un valor raw.
CREATE TABLE test (raw_col RAW(10));
Ejemplo
INSERT INTO test VALUES (HEXTORAW('7E6D'));
Sintaxis RAWTOHEX ( raw )
Convierte un valor raw una cadena que contiene dígitos
Propósito
en hexadecimal.
RAWTOHEX SQL> SELECT RAWTOHEX(raw_col) FROM test;
RAWTOHEX(RAW_COL)
Ejemplo --------------------
7E6D
Sintaxis RAWTONHEX ( raw )
Convierte un valor raw una cadena de juego de
Propósito caracteres nacional que contiene dígitos en
hexadecimal.
SQL> SELECT RAWTNOHEX(raw_col) FROM test;
RAWTONHEX RAWTOHEX(RAW_COL)
--------------------
Ejemplo 7E6D
D-14 ANEXO D. Funciones SQL
Sintaxis ROWIDTOCHAR(rowid)
Convertir un tipo de dato ROWID a VARCHAR2. De la
Propósito conversión resulta siempre una cadena de 18
ROWIDTOCHAR caracteres de longitud.
SELECT ROWID FROM oficinas
WHERE ROWIDTOCHAR(rowid) LIKE '%Br1AAB%’
Ejemplo ROWID
------------------
AAAAZ6AABAAABr1AAB
OTRAS FUNCIONES.
DUMP Sintaxis DUMP(expr, [,formato [,posic_comienzo [,long] ] ])
Propósito Devuelve un VARCHAR2 conteniendo el código del tipo de dato, la
longitud en bytes y la representación interna del dato. El argumento
formato indica la notación en la que se visualiza el resultado.
Formato puede tener los siguientes valores:
8 Devuelve el resultado en notación octal.
10 Devuelve el resultado en notación decimal.
16 Devuelve el resultado en notación hexadecimal.
17 Devuelve el resultado en formato carácter simple.
Ejemplo
EMPTY_[B|C]LOB
Sintaxis EMPTY_[B|C]LOB()
Propósito Se muestra un localizador de LOB que se utiliza para inicializar el
valor de una variable, o para inicializar una columna LOB en una
sentencia UPDATE o INSERT y dejarla vacía. No se puede utilizar el
localizador que devuelve como parámetro en el paquete DBMS_LOB.
Ejemplo
UPDATE tab_lob1
SET col_clob = EMPTY_CLOB();
BFILENAME
Sintaxis BFILENAME(‘directorio’,’fichero’)
Propósito Devuelve el localizar BFILE asociado con el fichero binario físico LOB
que reside en el sistema de ficheros del S.O. El directorio es un
objeto de la base de datos que identifica ficheros externos a dicha
B.D. ‘Fichero’ es el nombre del fichero en el sistema operativo. Se
debe asociar primero al BFILE con un fichero físico antes de realizar
operaciones con SQL, PL/SQL, el paquete DBMS_LOB u OCI.
Ejemplo
GREATEST
Sintaxis GREATEST(expr [,expr2]....)
Propósito Devuelve el mayor valor de una lista de expresiones. Compara
carácter a carácter. El tipo de dato es siempre VARCHAR2.
Ejemplo
NLS_CHARSET_DECL_LEN
NLS_CHARSET_ID
Sintaxis NLS_CHARSET_ID(texto)
Propósito Muestra el identificativo del juego de caracteres utilizado
correspondiente a el juego indicado en texto. El parámetro texto es
un VARCHAR2. Si se le indica como texto ‘CHAR_CS’ devuelve el
número identificativo del juego de caracteres de la b.d. (servidor). Si
se le indica como parámetro ‘NCHAR_CS’ muestra el número
identificativo del juego de carácter nacional. Los juegos de
caracteres no válidos devuelven NULL.
Ejemplo1
Ejemplo
NLS_CHARSET_NAME
Sintaxis NLS_CHARSET_NAME(n)
Propósito Muestra el juego de caracteres NLS correspondiente al número que
se indica como parámetro. Si n no es un valor válido, se devuelve un
nulo.
Ejemplo
NVL
Sintaxis NVL(expr1 ,expr2)
Propósito Indica el valor que ha de tener expr1 cuando en su contenido
aparezcan nulos. El tipo de dato que retorna expr2 es siempre el
mismo que tenga expr1.
Ejemplo
VSIZE
Sintaxis VSIZE(expr)
Propósito Devuelve el número de bytes que ocupa la representación interna
del dato.
Ejemplo
DECODE
Sintaxis Decode(expr, val1, cod1, ...valn, codn, codf)
Propósito Dentro de una expr evalúa los valores de la lista y los cambia por el
código correspondiente.
Ejemplo
SELECT ‘SIMPLES’
5. Mostrar los nombres de los empleados y el número de días que llevan trabajando
para la empresa, cuyo salario sea mayor de 2.000$.
7. Mostrar el nombre del empleado y su fecha de alta en la empresa con formato Día
(nombre del día) / Mes (nombre del mes) / YYYY (cuatro dígitos del año) que
desempeñen el trabajo de “IT_PROG”.
10. Mostrar el nombre del empleado y una columna que contenga el salario
multiplicado por la comisión cuya cabecera sea “Bono”, si el empleado no tiene
comisión asignarle 0 en la columna ‘Bono’.
11. Mostrar el salario medio de aquellos empleados cuyo trabajo sea el de “IT_PROG”.
12. Encontrar, entre los empleados, el salario más alto, el más bajo y la diferencia
entre ambos.
SUBCONSULTAS/JOINS
1. Mostrar el nombre de los empleados, número y nombre de departamento, número
y los tres primeros caracteres de la localidad donde se encuentra el
departamento, para aquellos empleados que trabajen en el departamento 20 o
que sea vendedor (que su trabajo comience por ‘SA’).
4. Obtener para cada empleado, el nombre del Jefe para quien trabaja mediante una
recuperación jerárquica. El formato presentado debe estar tabulado según el nivel
del empleado.
7. Encontrar quienes son los trabajadores que tienen por jefe a ‘King’.
11. Mostrar el nombre del empleado y la localidad donde trabaja, para los que tengan
comisión o que trabajen en el mismo departamento que ‘Irene’.
12. Recuperar los empleados cuyos salarios exceden la media de sus respectivos
departamentos.
13. Recuperar el empleado que más tarde entró para cada uno de los departamentos
existentes en la empresa.
EJERCICIOS DML
INSERT
1. Insertar los siguientes datos en las tablas correspondientes:
a. Un empleado para la ciudad de ‘Madrid’, que trabaje en el departamento
de ‘Formación’ y su trabajo sea ‘Formador Oracle’.
b. Un empleado para la ciudad de ‘Barcelona’ que trabaje en el departamento
de ‘Viajes’ y su trabajo sea ‘Agente de Viajes Nacionales’.
UPDATE
1. Actualizar el salario de los empleados que trabajen en el departamento de ‘Matos’.
Asignarle un salario igual al incremento de un 15% respecto a la media de los
salarios del departamento 20.
2. Dejar la fecha de alta del empleado igual a la fecha del sistema para aquellos
empleados de la ciudad con código 1500 y cuyo salario sea superior a la media de
los salarios de analistas de la empresa.
DELETE
1. Borrar los empleados cuyo salario sea inferior a 5000$.
CONTROL DE TRANSACCIONES.
Si las inserciones, modificaciones y borradores se han realizado correctamente,
validar las sentencias anteriores.
E-4 Ejercicios Lenguaje SQL. ORN-101
TABLA HABITACIONES
TABLA CLIENTES
TABLA RESERVAS
TABLA HABITACIONES
TABLA CLIENTES
TABLA RESERVAS
SELECT SIMPLES
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SUBCONSULTAS / JOINS
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
INSERT
UPDATE
1.
UPDATE EMPLOYEES
SET salary = (SELECT AVG (salary) * 1.15
FROM EMPLOYEES
WHERE department_id = 20)
WHERE department_id = ( SELECT department_id
FROM EMPLOYEES
WHERE last_name = ’Matos’);
2.
UPDATE EMPLOYEES
SET hire_date = SYSDATE
WHERE department_id = (SELECT department_id
FROM DEPARTMENTS
WHERE location_id = 1500 )
AND salary > (SELECT AVG (salary)
FROM EMPLOYEES
WHERE job_id = ‘IT_PROG’);
3.
UPDATE EMPLOYEES
SET job_id = ‘IT_PROG’, salary = salary * 1.13
WHERE last_name = 'Jones';
DELETE
1.
2.
3.
2.
3.
4.
5.
6.