You are on page 1of 50

CURSO DE

INTRODUCCIÓN A
ORACLE SQL Y PL/SQL

Volumen
1

Versión 2.1
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

CONTENIDO

1. PREFACIO 5

1.1. PRE-REQUISITOS 5
1.2. OBJETIVOS DEL CURSO 5
1.3. DURACIÓN DEL CURSO 5
1.4. CONTENIDO DEL CURSO 5
1.5. AUDIENCIA 9

2. INTRODUCCIÓN A LAS BASES DE DATOS RELACIONALES 10

2.1. TERMINOLOGÍA DE LA BASE DE DATOS RELACIONAL 10


2.2. TERMINOLOGÍA DE LA BASE DE DATOS 11
2.3. LISTA DE OBJETOS DE UNA BASE DE DATOS 11
2.4. PROTECCIÓN DE LA INTEGRIDAD DE LA INFORMACIÓN 12
2.5. SQL *PLUS, SQL, Y PL/SQL 12
2.6. COMANDOS DE SQL 13

3. CONSULTA DE DATOS 14

3.1. BLOQUE BÁSICO DE CONSULTAS 14


3.1.1. SELECCIÓN DE TODAS LAS COLUMNAS Y LAS FILAS 14
3.1.2. SELECCIÓN DE COLUMNAS ESPECÍFICAS 15
3.2. EXPRESIONES ARITMÉTICAS 16
3.2.1. OPERADORES ARITMÉTICOS 16
3.3. ALIAS DE LAS COLUMNAS 17
3.4. EL OPERADOR DE CONCATENACIÓN 17
3.5. CONSTANTES 18
3.6. ADMINISTRACIÓN DE VALORES NULOS (NULL) 18
3.6.1. VALORES NULOS EN EXPRESIONES ARITMÉTICAS 18
3.6.2. FUNCIÓN NVL 19
3.7. EVITANDO SELECCIONAR FILAS DUPLICADAS 19
3.7.1. DISTINCT 19
3.7.2. FUNCIÓN DISTINCT CON VARIAS COLUMNAS 20
3.8. ACCESO A SQL *PLUS 20
3.8.1. ACCESO A TRAVÉS DE UN AMBIENTE DE VENTANAS 20
3.8.2. ACCESO A TRAVÉS DE UN AMBIENTE DE LÍNEA DE COMANDO 20
3.9. DESPLEGADO DE LA ESTRUCTURA DE LA TABLA 21
3.10. COMANDOS DE EDICIÓN DE SQL*PLUS 22
3.10.1. COMANDOS DE EDICIÓN DE SQL *PLUS 22
3.11. COMANDOS DE ADMINISTRACIÓN DE ARCHIVOS Y AYUDA EN LÍNEA DE SQL
*PLUS 23

4. DELIMITAR LAS FILAS CONSULTADAS 24

PAGINA 2
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

4.1. ORDENANDO LOS REGISTROS CON LA CLÁUSULA ORDER BY 24


4.2. ORDENAR FILAS CON LA CLÁUSULA ORDER BY 24
4.2.1. ORDEN POR OMISIÓN DE LA INFORMACIÓN 24
4.2.2. INVERTIR EL ORDEN POR OMISIÓN 25
4.3. LIMITAR LAS FILAS SELECCIONADAS CON LA CLÁUSULA WHERE 25
4.4. OPERADORES DE COMPARACIÓN 26
4.4.1. OPERADORES DE COMPARACIÓN 26
4.4.2. OPERADORES DE SQL 26
4.4.3. OPERADORES LÓGICOS 26
4.5. EXPRESIONES DE NEGACIÓN 26
4.5.1. NEGACIÓN DE OPERADORES LÓGICOS 27
4.5.2. NEGACIÓN DE OPERADORES SQL 27
4.6. OPERADORES DE SQL 27
4.6.1. OPERADOR BETWEEN 27
4.6.2. OPERADOR IN 28
4.6.3. OPERADOR LIKE 28
4.6.4. OPERADOR IS NULL 28
4.7. CONSULTANDO INFORMACIÓN CON CONDICIONES MULTIPLES 29
4.8. REGLAS DE PRECEDENCIA 30

5. FUNCIONES 31

5.1. FUNCIONES DE NIVEL REGISTRO 31


5.1.1. CARACTERÍSTICAS DE LAS FUNCIONES DE NIVEL REGISTRO 31
5.2. FUNCIONES DE CARACTERES 32
5.3. FUNCIONES NUMÉRICAS 32
5.4. FORMATO DE LAS FECHAS EN ORACLE 33
5.4.1. ALMACENAMIENTO DE FECHAS EN ORACLE 33
5.4.2. SYSDATE 33
5.4.3. DUAL 33
5.5. USO DE LOS OPERADORES ARITMETICOS CON FECHAS 34
5.5.1. OPERACIONES ARITMÉTICAS EN LAS FECHAS 34
5.6. FUNCIONES DE FECHA 35
5.7. FUNCIONES DE CONVERSIÓN 36
5.8. FUNCIÓN TO_CHAR CON LOS FORMATOS DE FECHA 36
5.8.1. EJEMPLO DE ELEMENTOS DE FORMATOS VALIDOS DE FECHAS 36
5.8.2. FORMATOS DE HORA 37
5.8.3. OTROS FORMATOS 37
5.8.4. USO DEL PREFIJO FM 37
5.8.5. SUFIJOS PARA INFLUIR EN EL DESPLEGADO DE LOS NÚMEROS 37
5.8.6. ELEMENTO DE FORMATO DE FECHA RR 38
5.9. FUNCIÓN TO_CHAR CON FORMATOS NUMÉRICOS 38
5.9.1. ELEMENTOS DE FORMATO NUMÉRICO 38
5.10. FUNCIONES DE REGISTRO ANIDADAS 39
5.10.1. FUNCIONES ANIDADAS 39

6. CONSULTA DE INFORMACIÓN DE VARIAS TABLAS 40

PAGINA 3
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

6.1. PRODUCTO CARTESIANO 40


6.2. CONSULTA CON UN JOIN SIMPLE 40
6.2.1. CALIFICANDO NOMBRES AMBIGUOS DE COLUMNAS 41
6.3. USO DE ALIAS DE LAS TABLAS 41
6.4. NON EQUI-JOIN 42
6.5. REGRESAR REGISTROS SIN PAREJA DIRECTA 42
6.5.1. OUTER JOIN 42
6.6. INNER JOIN 44
6.7. SELF JOIN 44

7. FUNCIONES DE GRUPOS DE REGISTROS 45

7.1. FUNCIONES DE GRUPO 45


7.2. LA CLÁUSULA GROUP BY 45
7.3. LA CLÁUSULA HAVING 46
7.4. CUALES SECCIONES HACEN REFERENCIA AL GRUPO 47

8. CONSULTAS ANIDADAS 48

PAGINA 4
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

1. PREFACIO

1.1. PRE-REQUISITOS
El alumno debe tener familiaridad con los siguientes conceptos:

 Alcance de las variables SCOPE.


 Parejas ordenadas, temas ordenadas, etc.
 Producto cartesiano
 Editor
 Entidad-Relación
 Macro sustituciones.
 Parámetros en archivos de comandos del Shell (UNIX), archivos de procesamiento por
lotes (batch DOS).
 Parámetro por referencia y por valor.
 Parámetro actual y formal.
 Tipos de variable escalar y compuesto.

1.2. OBJETIVOS DEL CURSO


Al terminar este curso el participante será capaz de:

 Describir el alcance de la base de datos relacional, los conceptos, terminología y


operadores.
 Crear estructuras de bases de datos como tablas, vistas, utilizando SQL
 Guardar, recuperar y actualizar información en la base de datos.
 Desarrollar bloques de código PL/SQL para manejar información.

1.3. DURACIÓN DEL CURSO


5 días (40 horas).
1.4. CONTENIDO DEL CURSO

Volumen 1

TEMA OBJETIVO
Introducción Repaso de los conceptos de las bases de
datos relacionales, descripción de los tipos de
comando SQL y de algunas herramientas
Oracle en las que se utiliza.
Consulta de Datos Para extraer información de la base de datos
se utiliza el comando SELECT del Lenguaje de
Consulta Estructurado (SQL).
Usted aprenderá a crear instrucciones de

PAGINA 5
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

SELECT que pueda usar una y otra vez. Verá


además cómo guardar sus instrucciones para
usarlas después.
Delimitar las Filas consultadas Cómo restringir las filas y las columnas que
son extraídas con una consulta y cómo
especificar el orden en el que se presentan las
filas.
Funciones Las funciones hacen posible definir consultas
más poderosas. Esta es la primera de dos
lecciones que exploran las funciones,
enfocándose en las funciones de cadenas de
caracteres, números y fechas, así como en
aquellas funciones que convierten datos de
un tipo a otro, por ejemplo, de dato tipo
carácter a tipo numérico.
Consulta de Información de Varias Tablas Esta lección cubrirá cómo obtener información
de más de una tabla, usando varios métodos
diferentes.
Funciones de Grupos de Registros. En esta lección usted se enfocará en obtener
un resumen de la información, como por
ejemplo promedios de grupos de registros.
Usted aprenderá cómo agrupar los registros
de una tabla dentro de pequeños conjuntos, y
cómo especificar criterios de búsqueda para
grupos de registros.
Consultas Anidadas Esta lección cubre rasgos más avanzados de
la instrucción de SELECT. Usted verá cómo
escribir subconsultas en la cláusula WHERE
de otra instrucción de SQL.

PAGINA 6
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

Volumen 2

TEMA OBJETIVO
Especificación de Variables en el Tiempo de Usted aprenderá cómo crear un archivo de
Ejecución comandos que contenga una cláusula de
WHERE para restringir las filas desplegadas.
Para cambiar la condición cada vez que el
archivo de comando se ejecute, usted utilizará
variables.
Revisión de Modelo de datos y Diseño de Antes de iniciar la construcción de tablas se
Base de Datos hace en esta lección un repaso de los
conceptos relacionados con el modelo de
datos y el diseño de la base de datos.
Creación de Tablas Usted creará tablas. Usted además creará
restricciones de integridad, las cuales sirven
para limitar lo que se puede o no hacer con los
datos.
Diccionario de Datos de Oracle El diccionario de datos de Oracle es uno de
los más importantes componentes del servidor
de Oracle. Este consiste un grupo de tablas y
vistas que proveen una referencia de solo
lectura de la base de datos.
Manipulación de Datos Una vez que sus tablas han sido creadas,
usted aprenderá a agregarles nuevas filas,
hacer cambios a las filas en la tabla o
borrarlas usando los comandos de
manipulación de datos. Esta lección cubre el
uso de los comandos de SQL para hacer
cambios a los datos. Es posible agrupar varias
de estos comandos en una transacción, misma
que puede ser ejecutada o cancelada como
una sola operación.

PAGINA 7
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

Volumen 3

TEMA OBJETIVO
Alteración de Tablas y Restricciones Después haber creado sus tablas, usted
puede necesitar cambiar su estructura. Esta
lección se mostrará cómo puede usted corregir
la estructura de las tablas así como agregar o
quitar restricciones.
Creación de Secuencias Varias aplicaciones requieren del uso de
números únicos como valores de las llaves
primarias. Usted puede escribir código en su
aplicación para este efecto o utilizar
secuencias manejadas por el propio servidor
automáticamente.
Creación de Vistas En esta lección usted verá como pueden ser
usadas las vistas para presentar información a
los usuarios en varias formas distintas.
Creación de Indices Si usted quiere mejorar la ejecución de
algunas consultas, usted debe considerar la
creación de un índice. Usted puede también
usar los índices para reforzar la singularidad
de una columna o de una combinación de
columnas.
Control de Acceso de los Usuarios Esta lección describe el sistema de seguridad
del servidor de Oracle. Usando los comandos
cubiertos en esta lección, usted puede
controlar el acceso a objetos específicos de la
base de datos y agregar nuevos usuarios con
diferentes niveles de privilegios de acceso.
Usted puede dar nombres alternativos para los
objetos usando el comando CREATE
SYNONYM.

PAGINA 8
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

Volumen 4

TEMA OBJETIVO
Revisión de PL/SQL Lección de revisión de cómo crear y usar las
unidades de programa de PL/SQL y
subprogramas.
Bases del Constructor de Procedimientos Una característica clave de la programación de
procedimientos es la habilidad de crear y
revisar su código de manera rápida y fácil.
Programación Modulada con La modularidad le permite descomponer su
Subprogramas código en unidades bien definidas y
manejables. Cada una de estas unidades en
PL/SQL tiene dos tipos de subprogramas
llamados procedimientos y funciones. Usted
aprenderá la estructura de los subprogramas y
como invocarlos.
Desarrollo de un Bloque Simple de PL/SQL Creará un bloque simple de PL/SQL después
de estudiar todos los elementos que
componen un bloque.
Interacción con Oracle Accesará la base de datos y las transacciones
de control a través de las instrucciones de
SQL en PL/SQL.
Uso de las Estructuras de Control Controle el flujo de un bloque de PL/SQL
usando instrucciones condicionales y ciclos
(loops).
Procesamiento de Consultas con Cursores Use la instrucción de SELECT de filas
Explícitos. múltiples dentro de PL/SQL par procesar
muchas filas. Declare y controle cursores
explícitos, los cuales son usados en loops,
incluyendo el cursor FOR.
Manejo de errores Cuando usted ejecuta el código de PL/SQL,
usted puede encontrar errores. Los errores
causan que el bloque de PL/SQL se detenga
con una excepción. Usted puede detectar la
excepción y hacer que su programa realice
una operación determinada al tener un error.

1.5. AUDIENCIA
 Administradores de Base de Datos
 Analistas de Sistemas
 Diseñadores/Desarrolladores

PAGINA 9
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

1

2. INTRODUCCIÓN A LAS BASES DE DATOS RELACIONALES

2.1. TERMINOLOGÍA DE LA BASE DE DATOS RELACIONAL

 Cada fila de información en una tabla es únicamente identificada por una llave primaria (PK)
 Usted puede lógicamente relacionar información de varias tablas usando llaves foráneas
(FK).

Nombre de la tabla: S_CUSTOMER Nombre de la Tabla: S_EMP


ID NAME PHONE SALES_ ID LAST_NAME FIRST_NAME
REP_ID
201 Unisports 55-2066101 12 10 Hoyos Marta
202 Simms Athletics 81-20101 14 11 Maya Carlos
203 Delhi Sports 91-10351 14 12 Gómez Enrique
204 Womansports 1-206-104-0103 11 14 Nuñez María

Llave Primaria Llave Foránea Llave Primaria

PAGINA 10
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

2.2. TERMINOLOGÍA DE LA BASE DE DATOS

Concepto Descripción
Tabla Una tabla es la estructura básica de almacenamiento de una Base de Datos
Relacional, consiste en uno o más columnas y cero o más filas.
Fila Una fila es la combinación de los valores de las columnas en una tabla; por
ejemplo, la información acerca de un departamento en la tabla V_DEPT. Una
fila es comúnmente llamada registro.
Columna Una columna representa un tipo de datos en una tabla. Esta es descrita con
un nombre y contiene información de un tamaño y tipo específico.
Campo En la intersección de una fila y una columna, se encuentra un campo. El
campo puede contener información. Si no hay información en el campo, se
dice que tiene un valor nulo (NULL).
Llave Una llave primaria es la columna o grupo de columnas que únicamente
Primaria identifican cada fila en la tabla; por ejemplo el número de un departamento.
Esta debe contener un valor.
Llave Una llave foránea es la columna o grupo de columnas que hacen referencia a
Foránea una llave primaria en la misma tabla o en otra. Estas se crean para reforzar las
reglas de diseño de la base de datos.

Notas:

 Una llave primaria no permite valores duplicados.


 Las llaves primarias generalmente no pueden ser cambiadas.
 Las llaves foráneas están basadas en los valores de la información y son apuntadores
puramente lógicos no físicos.
 El valor de una llave foránea debe ser igual al valor de una llave primaria existente o en otro
caso ser nulo (NULL).

2.3. LISTA DE OBJETOS DE UNA BASE DE DATOS

Objeto Descripción
Tabla Unidad básica de almacenamiento compuesta de filas y columnas.
Vista Lógicamente representa subconjuntos de información de una o más
tablas.
Secuencia Genera los valores de la llave primaria.
Indice Estructura formada en base a algunas de las columnas de una tabla que
permite mejorar el desempeño de las consultas.
Sinónimo Nombre alterno de un objeto.
Unidad de Procedimientos, funciones o paquetes de SQL y PL/SQL agrupados.
programa

PAGINA 11
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

2.4. PROTECCIÓN DE LA INTEGRIDAD DE LA INFORMACIÓN

Los manejadores de base de datos relacionales permiten establecer restricciones que


garanticen que los usuarios realicen solo operaciones que dejan la base de datos en un
estado correcto y consistente. Estas restricciones de integridad deben ser verificadas por el
propio servidor de base de datos o por el software de la aplicación.

Tipo de restricción Descripción


Entidad Ninguna llave primaria puede ser nula (NULL) y el valor debe
ser único.
De referencia Los valores de las llaves foráneas deben coincidir con una
llave primaria o ser nulos (NULL)
Columna Los valores en la columnas deben coincidir con el tipo de
información definido.
Definida por el usuario Los valores de los campos deben cumplir con reglas
inherentes al negocio.

2.5. SQL *PLUS, SQL, Y PL/SQL

Los comandos de SQL, SQL *Plus, y PL/SQL son usados para accesar y manipular datos
almacenados en una base de datos de Oracle.

Herramienta Descripción

SQL Conjunto de comandos para comunicarse con el servidor de Oracle


desde cualquier herramienta o aplicación. El Oracle SQL presenta
muchas extensiones en comparación con el SQL standard.
SQL *Plus Herramienta de Oracle que reconoce y envía declaraciones de
SQL y PL/SQL al servidor para su ejecución, y contiene su propio
lenguaje de comandos.
PL/SQL Lenguaje de procedimientos de Oracle para escribir aplicaciones
lógicas y manipular información fuera de la base de datos.

PAGINA 12
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

2.6. COMANDOS DE SQL

Existen muchos comandos disponibles en SQL. La siguiente tabla describe algunos de los
comandos estudiados en este curso:

Comando Descripción
SELECT Recupera información de la base de datos. Es el comando más
usado.
INSERT Son los comandos que sirven, respectivamente, para agregar nuevos
UPDATE registros, cambiar registros existentes y borrar registros no deseados
DELETE de las tablas de la base de datos. A este conjunto de comandos se le
conoce como el Lenguaje de Manipulación de Datos (Data
Manipulation Language ó DML).
CREATE Comandos para definir, cambiar, y quitar estructuras de datos. Este
ALTER segundo conjunto de comandos es comúnmente conocido como el
DROP Lenguaje de Definición de Datos (Data Definition Language ó DDL).
RENAME
TRUNCATE
COMMIT Comandos de control de cambios hechos por el DML. Permiten
ROLLBACK agrupar los cambios a los datos en transacciones lógicas.
SAVEPOINT
GRANT Comandos para otorgar o quitar privilegios de acceso a la base de
REVOKE datos y a la estructura de datos que ésta contiene. El conjunto de
comandos es comúnmente conocido como el Lenguaje de Control de
Datos (Data Control Language ó DCL).

PAGINA 13
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

3. CONSULTA DE DATOS

3.1. BLOQUE BÁSICO DE CONSULTAS

Un SELECT recupera información de la base de datos, implementando todas las operaciones


de álgebra.

Sintaxis

SELECT [DISTINCT] {*,columna [alias],....}


FROM tabla;

Donde: SELECT es la lista de al menos una columna

DISTINCT suprime duplicados

* selecciona todas las columnas

columna nombre de la columna

alias da a las columnas seccionadas un encabezado diferente

FROM tabla especifica la tabla que contiene las columnas

En su forma más simple, una instrucción de SELECT debe incluir lo siguiente:

 Una cláusula de SELECT que especifique las columnas que serán desplegadas.
 Una cláusula de FROM que especifique la tabla que contiene las columnas listadas en la
cláusula del SELECT.

3.1.1. Selección de Todas las Columnas y las Filas


El asterisco (*) sirve para seleccionar todas las columnas de la tabla.
Ejemplo :
Consultar todas las columnas y registros de una tabla llamada S_DEPT.

SQL> SELECT *
2 FROM s_dept;

PAGINA 14
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

ID NAME REGION_ID
------ ------------------- ---------
10 Finance 1
31 Sales 1
32 Sales 2
33 Sales 3
34 Sales 4
35 Sales 5
41 Operations 1
42 Operations 2
43 Operations 3
44 Operations 4
45 Operations 5
50 Administrtion 1

12 rows selected

3.1.2. Selección de Columnas Específicas


Para consultar exclusivamente algunas de las columnas especifique sus nombres
separándolos por comas, en la cláusula del SELECT.

Ejemplo :

Desplegar todos los números de departamento, apellidos de los empleados y los números de
los administradores en la tabla S_EMP.

SQL> SELECT dept_id, last_name, manager_id


2 FROM s_emp;

PAGINA 15
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

3.2. EXPRESIONES ARITMÉTICAS


Tal vez sea necesario modificar la manera en que la información es desplegada o realizar
cálculos sobre los datos que se están consultando. Esto es posible utilizando expresiones
aritméticas.

Una expresión aritmética puede contener nombre de columnas, valores numéricos constantes,
y los operadores aritméticos.

3.2.1. Operadores Aritméticos

Estos son los operadores aritméticos disponibles en SQL. Se puede utilizar operadores
aritméticos en cualquier cláusula de una instrucción de SQL, excepto en la cláusula FROM.

Operadores Descripción
+ Suma
- Resta
* Multiplicación
/ División

Ejemplo :

Utilizando el operador de multiplicación para desplegar el salario anual y los porcentajes de


las comisiones de todos los empleados.

SQL> SELECT last_name, salary * 12, commission_pct


2 FROM s_emp;

Precedencia de los Operadores

 La multiplicación y la división tienen precedencia sobre la suma y


la resta.
 Los operadores de la misma precedencia son evaluados de
izquierda a derecha.
 Se pueden usar paréntesis para asegurar un determinado orden
de evaluación.

PAGINA 16
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

3.3. ALIAS DE LAS COLUMNAS


Cuando se despliega el resultado de una consulta, la herramienta SQL *Plus normalmente usa
los nombres de las columnas seleccionadas como encabezado. En muchos casos, dicho
encabezado puede ser difícil de entender o incluso no tener ningún significado. Se puede
cambiar el encabezado de una columna utilizando un alias.

Se especifica el alias después de la columna en la lista del SELECT usando un espacio como
separador. Como default, los encabezados de los alias serán desplegados en mayúsculas y no
podrán contener espacios en blanco, a menos que el alias esté encerrado entre comillas (“ “).

Ejemplo :

Desplegar el apellido, salario y la compensación anual de los empleados. Calcular la


compensación anual como salario mensual más un bono mensual de $100, multiplicado por
12. Se nombrará a la columna SALARIO_ANUAL.

SQL> SELECT last_name, salary,


2 12 * salary + 100 AS SALARIO_ANUAL
3 FROM s_emp;

Nota: Se puede incluir la palabra AS antes del nombre del alias para cumplir con los
estándares de ANSI SQL 92.

3.4. EL OPERADOR DE CONCATENACIÓN


Se pueden hacer combinaciones de unas columnas con otras, de expresiones aritméticas o de
valores constantes para crear una sola columna de caracteres utilizando el operador de
concatenación ().

Ejemplo :
Desplegar los nombres completos de los empleados con el encabezado Empleados.

SQL> SELECT first_name  last_name AS ”Empleados”


2 FROM s_emp;

PAGINA 17
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

3.5. CONSTANTES
Una constante puede ser cualquier caracter, expresión o número que se incluya en la lista del
SELECT, que no sea el nombre de una columna o un alias. Estas constantes son utilizadas
por cada registro devuelto. Las constantes son tratadas como columnas en la lista del
SELECT.

Las constantes de tipo fecha y caracter deben ser encerrados entre comillas sencillas (‘’), no
así los números.

Ejemplo :

Desplegar los nombres completos de los empleados y sus títulos con el encabezado
Empleados, se debe estar seguro de agregar la puntuación.

SQL> SELECT first_name  ’ ’  last_name


2  ’, ’  title ”Empleado”
3 FROM s_emp;

3.6. ADMINISTRACIÓN DE VALORES NULOS (NULL)

Si a un registro le falta información en una columna en particular, se dice que tiene valor Nulo.

Un valor nulo es: un valor que no está disponible, no ha sido asignado, es desconocido o no
es aplicable. En la columna COMMISSION_PCT, usted puede notar que sólo los Vendedores
obtienen comisión. Los otros empleados no están autorizados para obtener comisión, un valor
nulo representa ese hecho.

Un valor nulo no es igual a cero ni tampoco es un espacio. Cero es un número, y un espacio


es un carácter.

Las columnas de cualquier tipo de información pueden contener valores nulos, a menos que
las columnas hayan sido definidas explícitamente como no nulas (NOT NULL) o sean parte de
la llave primaria (PRIMARY KEY) de la tabla a la que pertenecen.

3.6.1. Valores Nulos en Expresiones Aritméticas


Si cualquier campo involucrado en una expresión tiene valor nulo, la expresión completa
tendrá valor nulo. Un valor nulo se propaga a toda la expresión.

PAGINA 18
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

3.6.2. Función NVL


La función NVL se utiliza para convertir un valor nulo a un valor real

Sintaxis

NVL (expr1, expr2)

Donde : expr1 es el valor fuente o la expresión que puede contener el valor nulo.

expr2 es el valor del objetivo para convertirlo el valor nulo.

Nota : La función NVL se puede usar para convertir cualquier tipo de datos, pero el valor
obtenido será siempre del mismo tipo que la expresión expr1.

3.7. EVITANDO SELECCIONAR FILAS DUPLICADAS


A menos que se le indique, SQL *Plus despliega los resultados de una consulta sin eliminar los
registros duplicados.

3.7.1. DISTINCT
Para eliminar registros duplicadas en el resultado, se incluye la función DISTINCT en la
cláusula del SELECT inmediatamente después del comando SELECT.

Ejemplo :

Desplegar sin repetir todos los nombres de los departamentos de la tabla S_DEPT.

SQL> SELECT DISTINCT name


2 FROM s_dept;

NAME
-------------------
Finance
Sales
Operations
Administrtion

4 rows selected

PAGINA 19
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

3.7.2. Función DISTINCT con Varias Columnas

Se pueden especificar varias columnas después del calificativo DISTINCT. El calificativo


DISTINCT afecta a todas las columnas seleccionadas.

Ejemplo :

Desplegar todas las diferentes combinaciones de títulos de trabajo y número de


departamento.

SQL> SELECT DISTINCT dept_id, title


2 FROM s_emp;

3.8. ACCESO A SQL *PLUS

La forma de invocar SQL *Plus depende del tipo de sistema operativo o del ambiente de
ventanas en que se esté trabajando.

3.8.1. Acceso a Través de un Ambiente de Ventanas


Se debe hacer doble clic sobre el icono de SQL *Plus en el administrador de programas y
capturar el nombre de usuario (username), la contraseña (password), y la cadena de conexión
a la base de datos, si se requiere.

Log on

User Name: pedro

Password
******
Host String:
hp9000

OK Cancel

3.8.2. Acceso a Través de un Ambiente de Línea de Comando


Una vez que usted ha encendido su máquina, en el prompt del sistema operativo capture el
comando de SQL *Plus.

sqlplus [usuario [/contraseña [@base_de_datos]]]

PAGINA 20
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

Donde: Usuario Es su nombre de usuario en la base de datos.

Contraseña Es su clave de acceso a la base de datos.


CUIDADO: Si usted captura su clave de acceso como
parte del comando para invocar el ambiente de sqlplus, la
clave podría ser vista por terceros. Para evitar este
problema no capture su contraseña como parte del
comando y espere a que el propio sqlplus se lo pida.

@base_de_datos Cadena de conexión a la base de datos

Una vez que se ha entrado exitosamente a SQL *Plus, verá el siguiente mensaje :

SQL *Plus: version 3.1.2 Production on Fri May 12 th 15:31:32 1995


Copyright © Oracle Corporation 1979, 1992, All rights reserved.

SQL>

3.9. DESPLEGADO DE LA ESTRUCTURA DE LA TABLA

En SQL *Plus se puede desplegar la estructura de una tabla utilizando la orden DESCRIBE. El
resultado de la orden es los nombres de las columnas, sus tipos de dato, y si la columna debe
forzosamente o no contener datos.

DESC[RIBE] tabla

Donde : Tabla es el nombre de cualquier tabla existente, vista o


sinónimo al que tenga acceso el usuario.

Ejemplo :

Desplegar la información acerca de la estructura de la tabla S_DEPT.

SQL> DESCRIBE s_dept;

PAGINA 21
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

3.10. COMANDOS DE EDICIÓN DE SQL*PLUS


Cuando se introduce un comando de SQL este es almacenado en una parte de la memoria
llamada buffer SQL y se queda ahí hasta que se introduce un nuevo comando. Los comandos
propios de la herramienta SQL *Plus no se almacenan en el buffer SQL.

Notas :

 Si se presiona [RETURN] antes de completar un comando, SQL *Plus iniciará otra línea
numerada.
 Para marcar el final de una instrucción SQL capture uno de los caracteres de terminación
(punto y coma o diagonal invertida), o presione [RETURN] dos veces. Al hacerlo volverá a
aparecer el prompt de SQL.

3.10.1. Comandos de Edición de SQL *Plus

Comando Descripción
A[PPEND] text Agrega texto al final de la línea actual.
C[HANGE]/old/new/ Cambia el texto viejo a nuevo en la línea actual.
C[HANGE]/text/ Borra el texto de la línea actual.
CL[EAR] BUFF[ER] Borra todas las líneas del buffer de SQL
DEL Borra la línea actual.
DEL n Borra la línea n
DEL m n Borra un rango de líneas (de la m a la n).
I[NPUT] Inserta un numero indefinido de líneas.
I[NPUT] text Inserta una línea de texto.
L[IST] Lista todas las líneas del buffer de SQL.
L[IST] n Despliega la línea n
L[IST] m, n Despliega de la línea m a la línea n
R[UN], / Despliega y ejecuta el comando actual de SQL en el buffer.
n Especifica la línea que será la línea actual.
n texto Reemplaza la línea n con el texto especificado.
0 texto Inserta el texto antes de la línea número 1.

PAGINA 22
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

3.11. COMANDOS DE ADMINISTRACIÓN DE ARCHIVOS Y AYUDA EN LÍNEA DE


SQL *PLUS
Los comandos de SQL actúan como el medio de comunicación con el servidor de Oracle. Los
comandos SQL *Plus sirven para controlar el ambiente de la herramienta de consulta, el
formato de los resultados de las consultas y la administración de archivos. Usted puede usar
los comandos identificados en la siguiente tabla.

Comandos de Archivos

Comando Descripción
SAV[E] archivo[.ext] Guarda el contenido actual del buffer de SQL a un archivo.
[REP[lace] lAPP[END]] Utilice APPEND para agregarlo a un archivo existente. La
extensión de default del archivo es .sql.
GET archivo[.ext] Escribe el contenido de un archivo previamente guardado en el
buffer de SQL. La extensión de default del archivo es .sql.
STA[RT] archivo[.ext] Corre un archivo de comando previamente almacenado.
@ archivo Corre un archivo de comando previamente almacenado (igual
que START)
EDIT Llama al editor y guarda el contenido del buffer a un archivo
llamado afiedt.buf.
ED[IT] [archivo[.ext]] Llama al editor para editar el contenido de un archivo guardado.
SPO[OL] [archivo[.ext]l Almacena los resultados de la consulta en un archivo, OFF
OFFlOUT] cierra el archivo. OUT cierra el archivo y lo envía al sistema de
impresión.
EXIT Cierra SQL *Plus.

Nota : Usted puede cambiar el editor de texto que se abre cambiando el valor la variable
EDITOR utilizando el comando DEFINE.

PAGINA 23
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

4. DELIMITAR LAS FILAS CONSULTADAS

4.1. ORDENANDO LOS REGISTROS CON LA CLÁUSULA ORDER BY


El orden de los registros obtenidos como resultado de una consulta es indefinido.
La cláusula ORDER BY, puede ser usada para dar un ordenamiento a los registros. La
cláusula ORDER BY debe ser especificada al final del comando SELECT.

Para ordenar puedes especificar:


 Una expresión
 Una posición
 El alias de una columna
 Usar muchas columnas
 Usar columnas que no están en la lista del SELECT

Sintaxis

SELECT expr
FROM tabla
[ORDER BY {columna, expr} [ASC  DESC]];

Donde : ORDER BY especifica el orden en el que las líneas son desplegadas.

ASC ordena las filas en un forma ascendente. Este es el orden


por omisión.

DESC ordena las filas en forma descendente.

4.2. ORDENAR FILAS CON LA CLÁUSULA ORDER BY

4.2.1. Orden por Omisión de la Información

El ordenamiento por omisión es ascendente:

 Los valores numéricos son desplegados con el valor más bajo primero, por ejemplo 1-999.
 Las fechas se despliegan con la fecha más temprana al principio, 01-enero-1992 antes de
01-enero-1998.
 Los valores en caracteres en orden alfabético, por ejemplo A primero y la Z al final.
 En Oracle, los valores nulos se despliegan al final en una secuencia ascendente y al
principio en una secuencia descendente.

PAGINA 24
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

4.2.2. Invertir el Orden por Omisión


Para invertir el orden en cada fila que se despliega, la palabra de comando DESC se
especifica después del nombre de la columna en la cláusula ORDER BY.

Ejemplo :

Consultar la tabla de empleados y obtener el apellido, número de departamento y la fecha de


contrato de todos los empleados. Ordenar los resultados en base a la fecha en que el
empleado haya sido contratado.

SQL> SELECT last_name, dept_id, start_date


2 FROM s_emp
3 ORDER BY start_date DESC;

4.3. LIMITAR LAS FILAS SELECCIONADAS CON LA CLÁUSULA WHERE

Usted puede restringir las filas obtenidas por la consulta usando la cláusula WHERE. Una
cláusula de WHERE contiene una condición que debe cumplirse, y que se especifica
inmediatamente después de la cláusula FROM.

Sintaxis

SELECT expr
FROM tabla
[WHERE condicion(es)]
[ORDER BY expr];

Donde : WHERE hace que la consulta solo devuelva aquellos registros


que cumplan la condición

Condición expresión lógica basada en los nombres de las


columnas, expresiones, constantes y operadores de
comparación.

PAGINA 25
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

4.4. OPERADORES DE COMPARACIÓN

4.4.1. Operadores de Comparación


Los operadores lógicos expresan las siguientes condiciones:

Operador Significado
= Igual que
> Mayor que
>= Mayor que o igual que
< Menor que
<= Menor que o igual que

4.4.2. Operadores de SQL

Existen cuatro operadores de SQL que operan con cualquier tipo de datos:

Operador Significado
BETWEEN…AND… Entre dos valores (inclusive)
IN (lista) Que el valor se encuentre dentro de la lista.
LIKE Comparar una cadena contra una cadena modelo.
IS NULL Es un valor nulo.

4.4.3. Operadores Lógicos

Operador Significado
AND Si el resultado de ambas condiciones es VERDADERO, entonces el
resultado es VERDADERO.
OR Si el resultado de cualquiera de las condiciones es VERDADERO,
entonces el resultado es VERDADERO
NOT Regresa el valor opuesto.

4.5. EXPRESIONES DE NEGACIÓN

En ocasiones se requiere encontrar aquellos registros que NO cumplen con una determinada
condición. Para hacerlo utilice los operadores de comparación de SQL con una expresión de
negación.

PAGINA 26
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

4.5.1. Negación de Operadores Lógicos

Operadores Descripción
<> Diferente que (todos los sistemas operativos)
NOTcolnomnbre = Diferente que
NOTcolnombre > No mayor que

4.5.2. Negación de Operadores SQL

Operador Descripción
NOT BETWEEN…AND… No se encuentra entre los dos valores especificados
NOT IN (list) No se encuentra dentro de la lista valores especificada.
NOT LIKE La comparación con la cadena modelo no es satisfactoria.
IS NOT NULL No es un valor nulo.

4.6. OPERADORES DE SQL

4.6.1. Operador BETWEEN


Usted puede desplegar filas basándose en un rango de valores usando el operador
BETWEEN. El rango que usted especifica contiene un rango bajo y uno alto.

Ejemplo :

Desplegar el nombre, apellido y la fecha de inicio de los empleados cuya fecha de inicio esté
entre mayo 9 de 1991 y junio 17 de 1991 además.

SQL>SELECT first_name, last_name, start_date


2 FROM s_emp
3 WHERE start_date BETWEEN ´09-may-91’
4 AND ´17-jun-91´;

PAGINA 27
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

4.6.2. Operador IN
Para verificar que el valor se encuentre dentro de una lista use el operador IN.

Ejemplo:

Desplegar el número de departamento, nombre y número de región de los departamentos en


las regiones 1 ó 3.

SQL>SELECT id, first_name, region_id


2 FROM s_dept
3 WHERE region_id IN (1,3);

4.6.3. Operador LIKE


Probablemente usted no sepa el valor exacto a buscar. Usted puede seleccionar filas que
‘chequen’ contra una cadena modelo usando el operador LIKE. Dos símbolos que sirven como
‘comodines’ pueden ser usados para construir la cadena de búsqueda:

Símbolo Descripción
% Representa cualquier secuencia de cero o más caracteres
- Representa cualquier carácter.

Ejemplo:
Desplegar aquellos empleados cuyos apellidos empiecen con “M”:

SQL>SELECT last_name
2 FROM s_emp
3 WHERE last_name LIKE ’M%’;

4.6.4. Operador IS NULL


El operador IS NULL examina los valores que son nulos. Un valor nulo significa que el valor es
inválido, no ha sido asignado, desconocido o inaplicable, Por lo tanto, no se puede examinar
con “=”, ya que un valor nulo no puede ser igual o desigual a cualquier valor.

4.7. CONSULTANDO INFORMACIÓN CON CONDICIONES MULTIPLES

PAGINA 28
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

Usted tal vez tenga que especificar criterios complejos combinando varias condiciones de
búsqueda. Los operadores AND y OR pueden ser usados para combinar expresiones lógicas.

El operador AND da como resultado VERDADERO si ambas condiciones son VERDADERAS,


considerando que el operador OR da como resultado VERDADERO si cualquier condición es
VERDADERA.

En los dos siguientes ejemplos, las condiciones son las mismas, pero el operador es diferente.
Observe cómo el resultado cambia drásticamente.

Ejemplo 1 :

Desplegar el apellido, salario, número de departamento, y el título para todos los empleados
de mostrador del departamento 41.

SQL>SELECT last_name, salary, dept_id, title


2 FROM s_emp
3 WHERE dept_id = 41
4 AND title = ’Stock Clerk’;

Ejemplo 2 :

Despliegue el apellido, salario, número de departamento, y el título para todos los empleados
de mostrador o que estén en el departamento 41.

SQL> SELECT last_name, salary, dept_id, title


2 FROM s_emp
3 WHERE dept_id = 41
4 OR titulo = ´Stock Clerk´;

Nota : OR es una cláusula menos restrictiva, en consecuencia se obtendrán más filas como
respuesta.

PAGINA 29
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

4.8. REGLAS DE PRECEDENCIA

Usted puede combinar los operadores AND y OR en la misma expresión lógica. Los resultados
de todas las condiciones se combinan en el orden determinado por la precedencia de los
operadores. Si se usan operadores de igual precedencia uno junto a otro, éstos son evaluados
de izquierda a derecha.

Cada operador AND es ejecutado antes de que un OR sea ejecutado, y tiene un antecedente
más alto.

Reglas de Precedencia

Orden de evaluación
1 Todos los operadores de comparación
(=, <>, >, >=, <, >=, IN, LIKE, IS NULL, BETWEEN)
2 AND
3 OR

Nota : Cuando se usa una expresión negativa los operadores de comparación se evalúan
primero.

PAGINA 30
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

5. FUNCIONES

5.1. FUNCIONES DE NIVEL REGISTRO


Las funciones de nivel registro se usan para manejar elementos de información. Estos aceptan
uno o más argumentos y devuelven un valor por cada registro que traiga consigo la consulta.
Un argumento puede ser uno de los siguientes:

 Una constante indicada por el usuario.


 El valor de una variable
 El nombre de una columna
 Una expresión

5.1.1. Características de las Funciones de Nivel Registro

 Actúan en cada registro devuelto por la consulta


 Traen un resultado por registro
 Pueden traer valores de un tipo diferente que las consultadas.
 Pueden esperar uno o más argumentos
 Pueden ser anidadas
 Se pueden usar en las cláusulas de SELECT, WHERE, y ORDER BY.

Sintaxis

nombre_funcion (columna l expresion, arg1, arg2, ...)

Donde : nombre_funcion es el nombre de la función

columna es cualquier nombre de una columna de la base de datos

expresión es cualquier cadena de caracteres o expresión calculada

arg1, arg2 es cualquier argumento que usado en la función

PAGINA 31
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

5.2. FUNCIONES DE CARACTERES

Las funciones de caracteres aceptan información de caracteres como entrada y devuelven


valores de tipo caracter o numérico.

Función Propósito
LOWER (columna l expresión) Convierte valores de caracteres alfabéticos a minúsculas
UPPER (columna l expresión) Convierte valores de caracteres alfabéticos a mayúsculas
INITCAP (columna l expresión) Convierte en mayúscula la primera letra de cada palabra y en
minúsculas el resto de las letras.
CONCAT (columna l expresión) Concatena el primer valor con el segundo. Es el equivalente
(columna2 l expresión2) al operador de concatenación ().
SUBSTR (columna l Devuelve una cadena compuesta por n caracteres extraídos
expresión,m[,n]) a partir desde la posición m. Si m es negativo, la cuenta se
hace a partir del final de la cadena.
LENGTH (columna l expresión) Devuelve el número de caracteres en la cadena.
NVL (columna l expresión1, Convierte el primer valor, si es nulo, al segundo valor.
columna l expresión2)

Nota : Esta no es una lista exhaustiva de las funciones de caracter disponibles.

5.3. FUNCIONES NUMÉRICAS


Las funciones numéricas aceptan valores numéricos de entrada y devuelven también valores
numéricos. Esta sección describe algunas funciones numéricas.

Función Propósito
ROUND (columna l Redondea la columna, expresión o valor a n posiciones
expresión[,n]) decimales. Si n es negativo, los números a la izquierda del
punto decimal se redondean.
TRUNC (columna l expresión Trunca la columna o el valor a n posiciones decimales, o si n
[,n]) es omitida, a ningún espacio decimal. Si n es negativo, los
números a la izquierda del punto decimal son truncados a
cero.
MOD (m,n) Trae el sobrante de la división de m entre n.

Nota : Esta no es una lista exhaustiva de las funciones numéricas disponibles.

PAGINA 32
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

5.4. FORMATO DE LAS FECHAS EN ORACLE

5.4.1. Almacenamiento de Fechas en Oracle

Oracle almacena fechas en un formato numérico interno, que representa lo siguiente :

 Siglos
 Años
 Meses
 Días
 Horas
 Minutos
 Segundos

El formato por omisión que se despliega para cualquier fecha es DD-MES-AA. Las fechas
válidas en Oracle están entre el 1º de Enero de 4712 A.C y el 31 de Diciembre de 4712 D.C.

5.4.2. SYSDATE
SYSDATE es una función de fecha que trae la fecha actual y la hora. Usted puede usar
SYSDATE de la misma manera en la que usa cualquier otro nombre de columna. Por ejemplo,
usted puede desplegar la fecha actual seleccionando SYSDATE de una tabla. Es habitual
seleccionar SYSDATE de una tabla muestra llamada DUAL.

5.4.3. DUAL

La tabla DUAL es propiedad del usuario SYS y puede ser utilizada por todos los usuarios. Esta
contiene una columna, DUMMY, y una fila con el valor “X”, La tabla DUAL es útil cuando usted
quiere traer un valor una sola vez, por ejemplo, el valor de una constante, pseudo-columna, o
expresión que no se deriva de una tabla con información del usuario.

Ejemplo :

Desplegar la fecha actual usando la tabla DUAL.

SQL> SELECT SYSDATE


2 FROM SYS.DUAL;

PAGINA 33
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

5.5. USO DE LOS OPERADORES ARITMETICOS CON FECHAS


Dado que la base de datos almacena las fechas como números, usted puede ejecutar cálculos
usando operadores aritméticos tales como la suma o resta. Usted puede sumar o restar
constantes numéricas así como fechas.

5.5.1. Operaciones Aritméticas en las Fechas


Usted puede ejecutar las siguientes operaciones.

Operación Resultado Descripción


fecha + número fecha Agrega un número de días a una fecha.
fecha - número fecha Resta un número de días de una fecha.
fecha - fecha número de días Resta una fecha de otra.
fecha + número/24 Fecha Agrega un número de horas a una fecha.

Ejemplo :

Para los empleados del departamento 43, desplegar el apellido y número de semanas desde
que fueron contratados.

SQL> SELECT last_name, (SYSDATE-start_date)/7 WEEKS


2 FROM s_emp
3 WHERE dept_id = 43;

PAGINA 34
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

5.6. FUNCIONES DE FECHA


Las funciones de fecha operan en las fechas de Oracle, Todas las funciones de fecha
devuelven un dato de tipo DATE, excepto MONTHS_BETWEEN, que devuelve un valor
numérico.

Función Propósito
MONTHS_BETWEEN (fecha1, Encuentra el número de meses entre la fecha1 y la
fecha2) fecha2. El resultado puede ser positivo o negativo. Si la
fecha1 es anterior a la fecha2, el resultado es positivo. Si
la fecha1 es más reciente que la fecha2 el resultado es
negativo. La parte del resultado que no está expresada
en enteros representa una parte del mes.
ADD_MONTHS (fecha,n) Agrega n número de meses a una fecha, n debe ser un
entero y puede ser negativo.
NEXT_DAY (fecha, ‘char’) Encuentra la fecha del día de la semana ‘char’ que sigue
a la fecha especificada. Char puede ser un número que
representa un día de la semana o una cadena de
caracteres.
LAST_DAY (fecha) Encuentra la fecha del último día del mes en el que se
encuentre la fecha especificada.
ROUND (fecha[,’fmt’]) Encuentra la fecha del día que corresponde a redondear
en el período especificado por el segundo parámetro fmt.
Ver tabla siguiente.
TRUNC (fecha[,’fmt’]) Encuentra la fecha del día que corresponde a truncar en
el período especificado por el segundo parámetro fmt.
Ver tabla siguiente.

Nota : Esta lista es un subconjunto de las funciones de fecha disponibles. Los formatos se
verán más adelante en este capítulo. Ejemplos de modelos de formatos son meses o años.

Comparación de TRUNC y ROUND con fechas:

Argumento ROUND TRUNC


redondea días trunca días
DAY redondea semanas trunca semanas
MONTH redondea meses trunca meses
YEAR redondea años trunca años

PAGINA 35
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

5.7. FUNCIONES DE CONVERSIÓN


SQL proporciona tres funciones para convertir un valor de un tipo de datos a otro.

Función Propósito
TO_CHAR (número l fecha,[ ‘fmt’ ]) Convierte un valor numérico o fecha a una
cadena de caracteres VARCHAR2 con modelo
de formato fmt.
TO_NUMBER (char) Convierte una cadena de caracteres que
contiene dígitos a un número.
TO_DATE (char,[‘fmt’]) Convierte una cadena de caracteres que
representa una fecha a un valor de fecha de
acuerdo con el fmt especificado. Si fmt es
omitido, el formato será DD-MES-AA

Nota : Esta lista es un subconjunto de las funciones de conversión disponibles.

5.8. FUNCIÓN TO_CHAR CON LOS FORMATOS DE FECHA

5.8.1. Ejemplo de Elementos de Formatos Validos de Fechas

Elemento Descripción
SCC ó CC Siglo. El prefijo S coloca un – en fechas AC.
Años en fechas YYYY ó SYYYY Año. El prefijo S coloca un – en fechas AC.
YYY ó YY ó Y Ultimos 3,2 ó 1 dígito(s) del año
Y,YYY Año con coma en la posición indicada.
IYYY, IYY, IY, I 4, 3, 2 ó 1 dígitos del año basados en estándar de ISO.
SYEAR ó YEAR Año deletreado; S prefijos AC fecha con -.
BC ó AD Indicador BC/AD
B.C. ó A.D. Indicador BC/AD con periodos
Q Cuarto de año
MM Mes, valor de 2 dígitos.
MONTH Nombre del mes relleno con espacios en blanco de un
largo de 9 caracteres.
MON Nombre del mes abreviado con tres letras.
RM Mes con numeración romana.
WW ó W Semana, del año o mes.
DDD ó DD ó D Día del año, mes o semana.
DAY Nombre del día relleno con espacios en blanco de un
largo de 9 caracteres.
DY Nombre del día; abreviado con tres letras.
J Fecha juliana; número de días desde el 31 de diciembre
4713 BC.

5.8.2. Formatos de Hora

PAGINA 36
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

Use los formatos listados en las siguientes tablas para desplegar la información de la hora.

Elemento Descripción
AM ó PM Indicador meridiano.
A.M. ó P.M. Indicador meridiano con puntos.
HH ó HH12 ó HH24 Hora del día u hora (1-12) u hora (0-23)
MI Minutos (0-59)
SS Segundos (0-59)
SSSSS Segundos después de media noche (0-86399)

5.8.3. Otros Formatos

Elemento Descripción
/., Estos símbolos son incluidos tal cual en el resultado.
“ de el año de ” Las cadenas entre comillas son incluidas tal cual en el resultado.

5.8.4. Uso del Prefijo FM

El prefijo FM suprime los espacios en blanco en los nombres de los meses y los días, dejando
un resultado de longitud variable.. Este además suprime los ceros que se encuentren al
principio de las cantidades. Si el prefijo es incluido una segunda vez dentro de la cadena
entonces se vuelven a incluir espacios en blanco.

5.8.5. Sufijos para Influir en el Desplegado de los Números


Suponiendo que el día del mes es 4:

Sufijos Descripción
TH Números ordinales (por ejemplo, DDTH por
4TH).
SP Números expresados en forma de palabras
(por ejemplo, DDSP por FOUR)
SPTH ó THSP Número ordinales expresados en forma de
palabras (por ejemplo, DDSPTH por FOURTH)

PAGINA 37
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

5.8.6. Elemento de Formato de Fecha RR

El formato de fecha RR es similar al elemento YY, pero este permite especificar diferentes
siglos. Usted puede usar el elemento de formato de fecha RR en lugar de YY, de esta manera
el siglo del valor de respuesta variará de acuerdo con los dos dígitos especificados del año y
los últimos dos dígitos del año en curso (cincuenta años hacia adelante y cincuenta años hacia
atrás a partir de la fecha actual).

Año en curso Fecha capturada Interpretación (RR) Interpretación (YY)


1994 27-OCT-95 1995 1995
1994 27-OCT-17 2017 1917
2001 27-OCT-17 2017 2017

5.9. FUNCIÓN TO_CHAR CON FORMATOS NUMÉRICOS


Para convertir un número en una cadena se debe de utilizar la función TO_CHAR, la cual
traduce un valor numérico (NUMBER) a VARCHAR2.

5.9.1. Elementos de Formato Numérico


Si está convirtiendo de un tipo de dato caracter a un número, usted puede usar los elementos
listados a continuación:

Elemento Descripción Ejemplo resultado


9 Posición numérica (el número de nueves 999999 1234
determina el ancho desplegado)
0 Despliega ceros no significativos. 0999999 001234
$ Signo de pesos. $999999 $1234
L Despliega el símbolo de la moneda local. L999999 FF1234
. Punto decimal en la posición especificada. 999999.99 1234.00
, Coma en la posición especificada. 999,999 1,234
MI Signo de menos a la derecha (valores 999999MI 1234-
negativos)
PR Pone entre paréntesis los números negativos. 999999PR <1234>
EEEE Notación científica (el formato se debe 99,999EEEE 1.234E+03
especificar con 4 E’s)
V Multiplica por 10 n veces (n = número de 9999V99 123400
nueves después de la V)
B despliega los valores de cero no significativos B9999.99 1234.00
como un espacio en blanco.

PAGINA 38
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

5.10. FUNCIONES DE REGISTRO ANIDADAS

5.10.1. Funciones Anidadas


Las funciones de registro pueden ser anidadas a cualquier nivel de profundidad. Las funciones
anidadas son evaluadas desde el nivel más profundo hasta el más externo.

Ejemplo :
De todos los vicepresidentes desplegar el apellido en mayúsculas y una parte del nombre de
su departamento como una sola columna.

SQL> SELECT CONCAT(UPPER(last_name),


2 SUBSTR(title,3)) ”Vicepresidentes”
3 FROM s_emp
4 WHERE title LIKE ’VP%’;

PAGINA 39
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

6. CONSULTA DE INFORMACIÓN DE VARIAS TABLAS

Cuando la información de más de una tabla de la base de datos es requerida, se usa una
condición de unión (join). Las filas de una tabla pueden ser unidas a las filas de otra tabla de
acuerdo con valores comunes existentes en las filas correspondientes, es decir las llaves
primarias y foráneas.

Existen dos principales tipos de condiciones de unión:

 Equijoin
 Non-equijoin

Otros métodos de unión son:

 Outer join
 Self join
 Set operators

6.1. PRODUCTO CARTESIANO

Cuando una condición de unión es inválida o se omite en su totalidad, el resultado es un


Producto cartesiano, en el cual TODAS las combinaciones de filas serán desplegadas. Todas
las filas en la primera tabla son combinadas con todas las de la segunda tabla.
Un producto cartesiano tiende a generar un largo número de filas, y su resultado es raramente
útil. Usted debe siempre incluir una condición de unión valida en una cláusula de WHERE, a
menos que usted tenga la necesidad específica de combinar todas las filas de todas las
tablas.

SQL> SELECT first_name, last_name


2 FROM s_dept, s_emp;
...
300 rows selected.

6.2. CONSULTA CON UN JOIN SIMPLE


Para desplegar la información de dos o más tablas relacionadas, escriba una condición de join
simple en la cláusula del WHERE.

Sintaxis

SELECT tabla.columna, tabla.columna...


FROM tabla1, tabla2
WHERE tabla1.columna1 = tabla2.columna2;

PAGINA 40
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

Donde : tabla.columna tabla y columna de la cual la información es recuperada.


tabla1.columna1= es la condición que une (o relaciona) a las dos tablas.
tabla2.columna2

6.2.1. Calificando Nombres Ambiguos de Columnas


Usted necesita calificar los nombres de las columnas en la cláusula del WHERE con el nombre
de la tabla para evitar ambigüedades. Sin los prefijos de las tablas, la columna de
identificación ID, puede ser de la tabla V_DEPT o de la tabla S_EMP. Es necesario agregar el
prefijo de la tabla para ejecutar su consulta.

Ejemplo :
Desplegar el número de departamento y el número de región de todos los departamentos.

SQL> SELECT s_dept.id ”ID Departament”,


2 s_region.id ”ID Región”,
3 s_region.name ”Nombre Región”
4 FROM s_dept, s_region
5 WHERE s_dept.region_id = s_region.id;

6.3. USO DE ALIAS DE LAS TABLAS


Calificar los nombres de las columnas con los nombres de las tablas puede tomar mucho
tiempo, particularmente si los nombres de las tablas son largos. Utilice el alias de las tablas en
su lugar. Como los alias de las columnas, los alias de las tablas permiten darle a las tablas otro
nombre en la declaración del SELECT. Una vez que usted usa el alias de la tabla, usted debe
usar el alias para calificar cada columna que haga referencia a la tabla.

Ejemplo :

Desplegar el nombre del cliente, el número de región, y el nombre de la región de todos los
clientes. Proporcione el alias de las columnas, y use el alias de la tabla para acortar las
referencias de la tabla.

SQL> SELECT c.name ”Nombre del Cliente”


2 c.region_id ”ID region”
3 r.name ”Nombre de la region”
4 FROM s_customer c, s_region r
5 WHERE c.region_id = r.id;

PAGINA 41
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

6.4. NON EQUI-JOIN


La relación entre las tablas EMP y el SALGRADE es una unión no equitativa, en la cual
ninguna columna en la tabla EMP corresponde directamente a alguna columna en la tabla
SALARIO. La relación se obtiene usando un operador diferente al ‘igual que’ (=).

Ejemplo :

Con el usuario SCOTT crear un NON EQUI-JOIN para consultar el rango de salario de los
empleados. El salario debe estar entre el valor inferior y el superior del rango de sueldo.

SQL> SELECT e.ename, e.job, e.sal, s.grade


2 FROM emp e, salgrade s
3 WHERE e.sal BETWEEN s.losal AND s.hisal;

6.5. REGRESAR REGISTROS SIN PAREJA DIRECTA


Si una fila no satisface una condición de unión, entonces la fila no aparecerá en el resultado
de la consulta. Por ejemplo, en la condición del EQUI-JOIN de las tablas S_EMP y
S_CUSTOMER, Sweet Rock Sports no aparece, porque no existen ventas para ese cliente.

6.5.1. Outer Join


Las filas faltantes se pueden obtener si un operador de una outer join es usado en la
condición del join. El operador es un signo de más encerrado entre paréntesis (+), y se ubica
al lado de la unión en la que está faltando información. El operador tiene el efecto de crear
una o más filas NULAS, para que cada una de las filas de la tabla deficiente puedan ser
unidas.

Sintaxis

SELECT tabla, columna, tabla.columna


FROM tabla1, tabla2
WHERE tabla1.columna = tabla2.columna(+);

SELECT tabla, columna, tabla.columna


FROM tabla1, tabla2
WHERE tabla1.columna(+) = tabla2.columna;

PAGINA 42
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

Donde : tabla1.columna = es la condición que une (o relaciona) las tablas


tabla2.columna juntas.

(+) es el símbolo del outer join; éste puede ser colocado


en cualquier sitio de la condición de la cláusula de
WHERE, pero no en ambos lados. Coloque el
símbolo del outer join en seguida del nombre del
campo en la que puede ser que no haya registros.

Ejemplo :

Si en el siguiente ejemplo se hiciera un inner-join (quitando el ‘(+)’) el resultado sería una lista
con 14 registros debido a que hay un cliente sin representante de venta. Con el outer-join se
dispone de manera virtual de un registro NULO en la tabla S_EMP para poderlo relacionar con
la tabla de S_CUSTOMER y como resultado se obtiene una lista con 15 registros.

SQL> SELECT c.name, e.id, e.last_name


2 FROM s_customer, s_emp e
3 WHERE c.sales_rep_id = e.id(+);

La figura siguiente ilustra la situación:

S_EMP

S_CUSTOMER

INNER
JOIN
OUTER
JOIN

N N N

PAGINA 43
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

6.6. INNER JOIN


Cuando no se usa el operador de outer join, se habla de un inner join.
6.7. SELF JOIN
Usted puede unir una tabla a sí misma usando los alias de las tablas para simular que la tabla
son dos tablas distintas. Esto permite unir las filas de una misma tabla entre sí.

Para simular la existencia de dos tablas en la cláusula de FROM, el ejemplo contiene un alias
para la misma tabla, S_EMP. Este es un ejemplo de las convenciones validas de
nombramiento.

En este ejemplo, la cláusula de WHERE contiene la unión que significa “donde el número del
jefe de los trabajadores es igual a la clave de empleado del jefe”.

Ejemplo :

Desplegar los nombres de los empleados y sus respectivos jefes.

SQL> SELECT worker.last_name l l ´trabaja para ´l l


2 manager.last_name
3 FROM s_emp worker, s_emp manager
4 WHERE worker.manager_id = manager.id;

PAGINA 44
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

7. FUNCIONES DE GRUPOS DE REGISTROS

A diferencia de las funciones a nivel registro, las funciones de grupo sirven para obtener un
solo resultado (fila) por cada subconjunto de grupos de registros. Estos subconjuntos de
grupos de registros se forman dividiendo una tabla en grupos basados en una columna o
expresión.

7.1. FUNCIONES DE GRUPO

Función Descripción
AVG (DISTINCT|ALL|n) Valor promedio de n. Se ignoran los valores nulos.
COUNT(DISTINCT|ALL|expr|*) Número de registros donde expr contiene un valor no nulo.
MAX (DISTINCT|ALL|expr) Valor máximo de expr.
MIN (DISTINCT|ALL|expr) Valor mínimo de expr.
STDDEV(DISTINCT|ALL|n) Desviación estándar de n. Se ignoran los valores nulos.
SUM(DISTINCT|ALL|n) Sumatoria de los valores de n. Se ignoran los valores nulos.
VARIANCE(DISTINCT|ALL|n) Varianza de n. Se ignoran los valores nulos.

7.2. LA CLÁUSULA GROUP BY


Utilice la cláusula GROUP BY para dividir los registros de una tabla en grupos más pequeños
con lo que podrá usar las funciones de grupo para obtener información de cada uno de ellos.

Sintaxis

SELECT expr
FROM tabla
[WHERE condicion(es)]
[GROUP BY expresión_de_agrupamiento]
[ORDER BY expr];

Donde : expresión_de_agrupamiento nombres de las columnas cuyos valores son la


base para agrupar los registros.

PAGINA 45
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

Ejemplo :

Desplegar el número de empleados por departamento.

SQL> SELECT dept_id, count(+)


2 FROM s_emp
3 GROUP BY dept_id;
7.3. LA CLÁUSULA HAVING
Utilice la cláusula HAVING para filtrar cuáles de los grupos serán consultados.

Sintaxis

SELECT expr
FROM tabla
[WHERE condicion(es)]
[GROUP BY expresión_de_agrupamiento]
[HAVING condición]
[ORDER BY expr];

Donde : Condición expresión lógica para restringir los grupos de


registros que serán incluidos en la consulta.

La siguiente figura ilustra la situación:

GROUP BY HAVING
WHERE

PAGINA 46
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

7.4. Cuales secciones hacen referencia al GRUPO


A continuación se indican las secciones que hacen referencia al grupo que se forma en el
GROUP BY.

Sección Hace Referencia


Lista de campos en el SELECT SI
Lista de tablas en el FROM NO
Condiciones en el WHERE NO
Lista de campos en el GROUP BY NO (Aquí se define el grupo)
Condiciones en el HAVING SI
Lista de campos en el ORDER BY SI

En la sección donde aparece un “SI” solo se permiten expresiones de GRUPO válidas.

8. CONSULTAS ANIDADAS

PAGINA 47
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

Las consultas anidadas permiten que la cláusula WHERE de una consulta se base en el
resultado de OTRA CONSULTA.

Sintaxis

SELECT expr
FROM tabla
WHERE expr operador
( SELECT expr
FROM tabla );

Donde : operador Operador de comparación a nivel registro (>, =,


>=, <, <>, <=) o a nivel de muchos registros (IN,
NOT IN).

Ejemplo 1 :

Generar la lista de los empleados que trabajan en la región 1 (en 2 pasos). Primero se
determinan los departamentos en la región 1 y después se determinan los empleados en
dichos departamentos, debido a que la región no es un dato de la tabla de empleados:

SQL> SELECT id
2 FROM s_dept
3 WHERE region_id = 1;

ID
------
10
31
41
50

4 rows selected

SQL> SELECT id
2 FROM s_emp
3 WHERE dept_id IN (10,31,41,50);

Ejemplo 2 :

PAGINA 48
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

Generar la lista de los empleados que trabajan en la región 1 (con JOIN):

SQL> SELECT w.id


2 FROM s_emp w, s_dept d
3 WHERE w.dept_id = i.id AND
4 d.region_id = 1;

Ejemplo 3:

Generar la lista de los empleados que trabajan en la región 1 (con SUBQUERY):

SQL> SELECT w.id


2 FROM s_emp
3 WHERE w.dept_id IN
4 ( SELECT d.id
5 FROM s_dept d
6 WHERE d.region_id = 1);

Ejemplo 4:

Generar la lista de los empleados cuyo Id de su jefe es 9, Id de departamento 34: o Id de jefe


8, Id de departamento 43; o Id de jefe 6, Id de departamento 41 y cuyo puesto es ‘Stock Clerk’:

SQL> SELECT w.id


2 FROM s_emp w
3 WHERE ( w.manager_id,w.title,w.dept_id ) IN
4 ((9,’Stock Clerk’,34),
5 (8,’Stock Clerk’,43),
6 (6,’Stock Clerk’,41));

PAGINA 49
INTRODUCCIÓN A ORACLE SQL Y PL/SQL

Ejemplo 5:

Generar la lista de los empleados con base en condiciones de s_emp y posiblemente otras
tablas:

SQL> SELECT w1.id


2 FROM s_emp w1
3 WHERE ( w1.manager_id, w1.dept_id ) IN
4 ( SELECT w2.manager_id, w2.dept_id
5 FROM s_emp w2,...);

PAGINA 50

You might also like