Oracle - WordPress.com

Transcripción

Oracle - WordPress.com
ORACLE
Introducción a Oracle Database
Oracle Database es el primer servidor de base de datos, diseñado para
trabajar en un entorno grid computing, el modo mas flexible y económico de
manejar información y aplicación.
Grid computing: es una tecnología que permite aprovechar los ciclos de
procesamientos no utilizado de las computadoras conectadas a una red.
Permite la integración y el uso colectivo de computadoras de alto
rendimiento, de redes y de base de datos de diferentes instituciones
conectadas a internet.
Oracle base de datos posee estructura física y estructura lógica separadas, el
almacenamiento físico de data puede ser administrado sin afectar el acceso a
la estructura de almacenamiento lógico.
Requerimiento de Oracle Database 10g
Requerimiento de hardware
Hardware
Memoria física (RAM)
Memoria virtual
Espacio de disco
Adaptador de video
Procesador
Requerimiento mínimo
256 MB mínimo. Se recomienda 512 MB.
El doble de la RAM.
Aproximadamente 2 GB dependiendo del
tipo de instalación y de las opciones
establecidas.
256 colores.
550 MHz minimo
Requerimiento de software
Software
Requerimiento
Arquitectura del sistema
Sistema operativo
Procesador: Intel (x64), AMD64
Windows 2000 con SP1 o posterior,
todas las ediciones.
Windows Server 2003, todas las
ediciones.
Windows XP profesional.
TCP/IP
Protocolo de red
Pagina 1
ORACLE
Tipos de instalación
Enterprise Edition: proporciona administración de datos para el sistema de
misión crítica tales como el procesamiento de transacciones en línea (OLTP)
de alto volumen, consultas intensivas en entornos de procesamientos
analíticos en línea (OLAP), y las aplicaciones para internet. Esta edición no
tiene límite en cuanto a la cantidad de procesadores soportados.
Standard Edition: proporciona facilidad de uso, potencial y buena relación
precio/rendimiento para aplicaciones de grupo de trabajo, de nivel
departamental, e intranet e internet. Es adecuado para aplicaciones de
negocio que van desde pequeños negocios hasta entornos altamente
distribuidos. Soporta un máximo de 4 procesadores en una sola PC, o hasta 4
procesadores en un cluster de servidores.
Personal Edition: proporciona compatibilidad con Oracle Enterprise y Oracle
Standard pero soporta solo un usuario. Puede utilizarse en un sistema
operativo de escritorio como Windows 98.
Pagina 2
ORACLE
Instalación de Oracle Database 10g Express
Inicio de la instalación del Oracle 10g Express
Pagina 3
ORACLE
Ventana de inicio de instalación, click en el botón Next.
Acepte el contrato de licencia, click en el botón Next.
Pagina 4
ORACLE
Nos pide la ruta donde instalar el programa, si desea puede personalizar, pero
lo dejaremos por defecto.
Ahora nos requiere ingresar contraseña que se le será asignada al
administrador, en este caso será System, ya que es igual al usuario
administrador. Como todos los programas nos pide confirmar contraseña, clic
en el botón Next.
Pagina 5
ORACLE
Ahora solo procedemos a instalar el software, click en el botón Install.
Esperamos
Pagina 6
ORACLE
Bueno demoro un poco pero ya esta listo, click en el botón Finish.
Pagina 7
ORACLE
Pantalla de inicio.
Como se dará cuenta su interfaz de trabajo es a través de una pagina web,
ingresamos nuestro usuario System, su contraseña (es lo que usted ingreso en
el momento de la instalación).
Pagina 8
ORACLE
Pantalla de bienvenida
Pagina 9
ORACLE
Cuentas con privilegios administrativos
Cuando se crea la base de datos, se crean automáticamente las siguientes
cuentas con rol DBA (Database Administrator):
 SYS
 SYSTEM
 SYSMAN
La contraseña de cada una de ellas se establece al momento de instalar
Oracle Database.
La cuenta SYS
El esquema SYS contiene todas las tablas y vistas del diccionario de datos (la
metadata). Estas tablas y vistas son criticas para el funcionamiento de Oracle
database, y no deben ser manipuladas directamente por el administrador.
Debe asegurarse que los usuarios no tengan acceso con esta cuenta.
La cuenta SYSTEM
El esquema SYSTEM almacena tablas y vistas adicionales creadas por las
herramientas de Oracle con propósito administrativo. El esquema SYSTEM no
debe contener las tablas de los usuarios.
La cuenta SYSMAN
Se crea por defecto durante la instalación de Oracle Enterprise Manager. Esta
cuenta debe ser utilizada para realizar tareas poco frecuentes tales como
configuración global del sistema. El usuario SYSMAN es un súper administrador
que crea otras cuentas para la realización de las tareas administrativas
diarias.
Nota: debe crear por lo menos una cuenta adicional con el rol DBA y conceder
los privilegios apropiados para que pueda ejecutar las tareas administrativas
diarias. No utilice las cuentas SYS, SYSTEM y SYSMAN para estos propósitos.
Pagina 10
ORACLE
Arquitectura del servidor Oracle
Cuando se instala Oracle Database se crea una instancia del servidor Oracle.
Es posible crear múltiples instancias del servidor en una misma PC, pero no se
recomienda ya que cada una consume muchos recursos.
La instancia de Oracle
A diferencia de otros productos de base de datos en los que por cada instancia
del servidor podemos crear varias bases de datos, por cada instancia de
Oracle se crea solo una base de datos. Por ejemplo en MS SQL Server creamos
en un servidor las bases de datos ventas, producción y personal, en Oracle
creamos una sola base de datos conteniendo los esquemas ventas producción
y personal.
La base de datos de Oracle esta formada por un conjunto de archivos que
contiene data ingresada por los usuarios y las aplicaciones y la información
sobre la estructura de la data (la metadata)
Permite verificar la instancia del servidor:
select *from v$instance;
Estructura de memoria de la instancia
Oracle separa parte de la memoria total del sistema para utilizar en sus
procesos. Es parte de la memoria que Oracle separa y esta formada por:
SGA – área global del sistema
PGA – área global del programa
SGA: es un grupo de estructuras de memoria compartida que contiene datos e
información de control utilizadas por la instancia de Oracle. Como esta
memoria es compartida por todos los procesos, también se le conoce como
área global compartida.
El SGA contiene la siguiente estructura:
Pagina 11
ORACLE
Estructura
Descripción
Database
Buffer La data solicitada por una aplicación para ser consultada
Cache
o modificada debe ser leída del disco y almacenada
previamente en la memoria en el buffer cache.
Shared Pool
Almacena información que puede ser compartida por los
usuarios:
Sentencia SQL y PL/SQL
Información del diccionario de datos
Redo Log Buffer
Almacena información sobre la data actualizada, y que
utilizada por la instancia para actualizar en el momento
oportuno los archivos de registro almacenados
físicamente en el disco.
Large Pool
Área opcional utilizada por las solicitudes entrada/salida
muy grandes tales como operaciones de respaldo y
restauración de datos.
Java Pool
Utilizada para almacenar código y data especificada a
sesión Java en JVM (Java Virtual Machine).
Streams Pool
Utilizado por el producto Oracle Streams.
Propiedades del SGA
Pagina 12
ORACLE
Podemos ver el tamaño del SGA:
Pagina 13
ORACLE
PGA: es una región de la memoria que contiene datos e información de
control para un proceso del servidor. Es un área de la memoria no compartida
creada por la instancia de Oracle cuando un proceso de servidor se inicia.
El tamaño de las estructuras de memoria de la instancia afecta el rendimiento
del servidor y es controlado por los parámetros de inicialización.
Pagina 14
ORACLE
Verificación de los parámetros de instancia
select name,value from v$parameter;
Pagina 15
ORACLE
Estructura física de la base de datos
Esta formada básicamente por los siguientes archivos: los archivos de datos
(datafiles), los archivos redo log, y el archivo de control.
Archivo de datos (datafiles)
Los datafiles son archivos .DBF en los que se almacenan todos los datos
de la base de datos. La base de datos Oracle puede tener uno o más
datafiles.
 Un datafile solo puede estar asociado a una base de datos.
 Un datafile puede ser configurado para que se expanda
automáticamente cuando se refiere espacio adicional para los datos.
 Uno o más datafiles forman una unidad lógica de almacenamiento
conocida como Tablespaces.
Archivo de control
Cada base de datos Oracle tiene un archivo de control (.CTL), el que
almacena la información necesaria para mantener y controlar la integridad
de la base de datos.
 El nombre de la base de datos.
 El nombre de ubicación de los datafiles y los archivos redo log.
 Fecha y hora de la creación de base de datos.
Pagina 16
ORACLE
Archivos Redo Log
Los archivos Redo Log (.LOG) almacenan las modificaciones de los datos
ejecutadas en la base de datos con la finalidad de recuperarlas en caso
que produjera una falla en el sistema.
Archivos archive Log
Los archivos Archive Log son copias fuera de línea de los archivos Redo
Log. Se usan para recuperar la base de datos en caso de falla del medio de
almacenamiento.
Archivos de parámetros
Un archivo de parámetros contiene parámetros y valores que definen las
características de la instancia y de la base de datos; por ejemplo contiene
parámetros que dimensionan el SGA.
Verificación de los datafiles
select * from v$datafile;
Pagina 17
ORACLE
Estructura lógica de la base de datos
Las estructuras de almacenamiento lógico de Oracle tales como
los
tablespaces, bloque de datos, extents y segmentos le permiten al servidor un
control muy fino sobre el uso de espacio de disco.
Tablespaces
Una base de datos se divide en unidades lógicas de almacenamiento
denominadas tablespaces. Un tablespaces permite agrupar estructura lógicas
que están relacionas entre si como por ejemplo todos los objetos de una
aplicación para simplificar algunas tareas administrativas.
Oracle almacena la data lógicamente en los tablespaces físicamente en los
datafiles asociados al tablespace correspondientemente.
Pagina 18
ORACLE
Las bases de datos, los tablespaces, y los datafiles están íntimamente
relacionados aunque hay importantes diferencia entre ellos.
Una base de datos Oracle consiste de una o mas unidades de
almacenamiento lógico llamadas tablespace, las que almacén toda la data de
la base de datos.
Cada tablespace consiste de uno o mas archivos denominados datafiles, los
cuales son las estructuras físicas que es concordante con el sistema
operativo en el que Oracle se esta ejecutando.
La data de la base de datos es almacena en los datafiles que constituye cada
uno de los tablespace de la base de datos. La base de datos de Oracle más
simple debe estar formada por una tablespace y un datafiles.
Verificación de los tablespace
select *from v$tablespace;
Pagina 19
ORACLE
Bloque de datos (Data Blocks)
La data de una base de datos Oracle es organizada en unidades lógicas
llamadas Data Blocks. Es una unidad más pequeña de almacenamiento de
datos. Su tamaño esta determinado por el parámetro DB_BLOCK_SIZE.
Extensiones (Extents)
Una extensión es el siguiente nivel de almacenamiento lógico de los
datos. Un extents esta formado por un conjunto de Data Blocks contiguo. El
tamaño predeterminado de un extents es de 1 MB.
Segmento (Segment)
Por encima de los extens, se encuentra el segmento, que es un
conjunto de extens localizados para determina estructura lógica.
La siguiente figura muestra la relación entre tablespaces, segmentos,
extents y data blocks.
Pagina 20
ORACLE
Estructura lógica de la base de
datos
Tablespaces
Una base de datos se divide en unidades lógicas de almacenamiento
denominadas tablespaces. Un tablespaces permite agrupar estructura lógicas
que están relacionas entre si como por ejemplo todos los objetos de una
aplicación para simplificar algunas tareas administrativas.
Oracle almacena la data lógicamente en los tablespaces físicamente en los
datafiles asociados al tablespace correspondientemente.
La instrucción CREATE TABLESPACE
Sintaxis
CREATE TABLESPACE nombre_tablespace
DATAFILE ‘ubicación_y_nombre_archivo_datafile’
SIZE tamaño [ K|M ]
EXTENT MANAGEMENT
DICTIONARY | LOCAL
[ AUTOALLOCATE | SIZE tamaño [ K|M ] ]

nombre_tablespace: es el identificador de la estructura lógica.

ubicación_y_nombre_archivo_datafile: es una cadena que
incluye la ruta y el nombre del archivo. La ruta debe especificar una
carpeta existente en el servidor en el que esta instalado Oracle.

Tamaño: especifica el tamaño del archivo.

EXTENT

El tamaño de los extents puede ser manejados por el servidor (opción
AUTOALLOCATE), o podemos definir extents de tamaño uniforme
(opción SIZE)
MANAGEMENT: especifica si los extents serán
administrados por el diccionario de datos (DICTIONARY), o localmente
(LOCAL).
Pagina 21
ORACLE
Creación de un tablespace
CREATE TABLESPACE TS_INT
DATAFILE ‘C:\oraclexe\oradata\XE\TS_INT.ORA’
SIZE 3M
EXTENT MANAGEMENT LOCAL AUTOALLOCATE;
Para verificar la creación ejecute el siguiente script.
SELECT NAME FROM V$TABLESPACE WHERE NAME =’TS_INT’;
Pagina 22
ORACLE
Introducción a los esquemas
Un esquema es una colección de objetos de la base de datos. El esquema es
propiedad de un usuario de la base de datos, y tiene el mismo nombre que su
usuario propietario. Los objetos del esquema, tales como tablas, vistas e
índices, son las estructuras lógicas referidas directamente a la data de la base
de datos.
Creación de un esquema
CREATE USER INSTITUTO IDENTIFIED BY DBA;
En la instrucción CREATE USER, INSTITUTO es el identificador del usuario, y
DBA es su contraseña.
Concesión de privilegios
Para el usuario INSTITUTO pueda iniciar la sesión y crear los objetos de su
esquema necesita contar con lo privilegios adecuados.
GRANT CONNECT TO INSTITUTO;
Instrucción para asignar el rol CONNECT al usuario INSTITUTO.
Ahora conéctese con el usuario.
Pagina 23
ORACLE
Tipo de datos
Cada constante y variable tiene un tipo de dato en el cual se especifica el
formato de almacenamiento, restricciones y rango de valores validos.
PL/SQL proporciona una variedad predefinida de tipos de datos. Casi todos los
tipos de datos manejados por PL/SQL son similares a los soportados por SQL. A
continuación se muestran os tipos de datos mas comunes.
NUMBER (Numérico): Almacena números enteros o de punto flotante,
virtualmente de cualquier longitud, aunque puede ser especificada la
precisión (Número de dígitos) y la escala que es la que determina el número
de decimales.
CHAR (Caracter): Almacena datos de tipo carácter con una longitud máxima
de 32767 y cuyo valor de longitud por default es 1.
VARCHAR2 (Caracter de longitud variable): Almacena datos de tipo carácter
empleando sólo la cantidad necesaria aún cuando la longitud máxima sea
mayor.
BOOLEAN (lógico): Se emplea para almacenar valores TRUE o FALSE.
DATE (Fecha): Almacena datos de tipo fecha. Las fechas se almacenan
internamente como datos numéricos, por lo que es posible realizar
operaciones aritméticas con ellas.
Atributos de tipo. Un atributo de tipo PL/SQL es un modificador que puede ser
usado para obtener información de un objeto de la base de datos. El atributo
%TYPE permite conocer el tipo de una variable, constante o campo de la base
de datos. El atributo %ROWTYPE permite obtener los tipos de todos los
campos de una tabla de la base de datos, de una vista o de un cursor.
PL/SQL también permite la creación de tipos personalizados (registros) y
colecciones (tablas de PL/SQL), que veremos en sus apartados
correspondientes.
Pagina 24
ORACLE
Existen por supuesto más tipos de datos, la siguiente tabla los muestra:
Tipo de dato /
Sintáxis
Oracle 8i
Oracle 9i
Descripción
dec(p, e)
La precisión
máxima es de 38
dígitos.
La precisión
máxima es de 38
dígitos.
Donde p es la
precisión y e la
escala.
Por ejemplo:
dec(3,1) es un
número que tiene
2 dígitos antes
del decimal y un
dígito después del
decimal.
decimal(p, e)
La precisión
máxima es de 38
dígitos.
La precisión
máxima es de 38
dígitos.
Donde p es la
precisión y e la
escala.
Por ejemplo:
decimal (3,1) es
un número que
tiene 2 dígitos
antes del decimal
y un dígito
después del
decimal.
double
precision
float
int
integer
numeric(p, e)
La precisión
máxima es de 38
dígitos.
La precisión
máxima es de 38
dígitos.
Donde p es la
precisión y e la
escala.
Por ejemplo:
numeric(7,2) es
un número que
tiene 5 dígitos
antes del decimal
y 2 dígitos
después del
decimal.
Pagina 25
ORACLE
Tipo de dato /
Sintáxis
Oracle 8i
Oracle 9i
Descripción
number(p, e)
La precisión
máxima es de 38
dígitos.
La precisión
máxima es de 38
dígitos.
Donde p es la
precisión y e la
escala.
Por ejemplo:
number(7,2) es
un número que
tiene 5 dígitos
antes del decimal
y 2 dígitos
después del
decimal.
real
smallint
char (tamaño)
varchar2
(tamaño)
long
raw
long raw
Hasta 32767
bytes en PLSQL.
Hasta 32767
bytes en PLSQL.
Hasta 2000 bytes
en Oracle 8i.
Hasta 2000 bytes
en Oracle 9i.
Hasta 32767
bytes en PLSQL
Hasta 32767
bytes en PLSQL
Hasta 4000 bytes
en Oracle 8i.
Hasta 4000 bytes
en Oracle 9i.
Hasta 2
gigabytes.
Hasta 32767
bytes en PLSQL.
Hasta 2
gigabytes.
Hasta 32767
bytes en PLSQL.
Hasta 2000 bytes
en Oracle 8i.
Hasta 2000 bytes
en Oracle 9i.
Hasta 2
gigabytes.
Hasta 2
gigabytes.
Donde tamaño es
el número de
caracteres a
almacenar. Son
cadenas de ancho
fijo. Se rellena
con espacios.
Donde tamaño es
el número de
caracteres a
almacenar. Son
cadenas de ancho
variable.
Son cadenas de
ancho variable.
Son cadenas
binarias de ancho
variable.
Son cadenas
binarias de ancho
variable.
Pagina 26
ORACLE
Tipo de dato /
Sintáxis
Oracle 8i
Oracle 9i
date
Una fecha entre
el 1 de Enero de
4712 A.C. y el 31
de Diciembre de
9999 D.C.
No soportado por
Oracle 8i.
Una fecha entre
el 1 de Enero de
4712 A.C. y el 31
de Diciembre de
9999 D.C.
.fractional
seconds
precision debe
ser un número
entre 0 y 9. (El
valor por defecto
es 6)
timestamp
(fractional
seconds
precision)
timestamp
(fractional
seconds
precision) with
time zone
No soportado por
Oracle 8i.
fractional
seconds
precision debe
ser un número
entre 0 y 9. (El
valor por defecto
es 6)
Descripción
Incluye año, mes
día, hora,
minutos y
segundos.
Por ejemplo:
timestamp(6)
Incluye año, mes
día, hora,
minutos y
segundos; con un
valor de
desplazamiento
de zona horaria.
Por ejemplo:
timestamp(5)
with time zone
timestamp
(fractional
seconds
precision) with
local time zone
No soportado por
Oracle 8i.
fractional
seconds
precision debe
ser un número
entre 0 y 9. (El
valor por defecto
es 6)
Incluye año, mes
día, hora,
minutos y
segundos; con
una zona horaria
expresada como
la zona horaria
actual.
Por ejemplo:
timestamp(4)
with local time
zone
interval year
(year precision)
to month
No soportado por
Oracle 8i.
year precision
debe ser un
número entre 0 y
9. (El valor por
defecto es 2)
Período de
tiempo
almacenado en
años y meses.
Por ejemplo:
interval year(4)
to month
Pagina 27
ORACLE
Tipo de dato / Oracle 8i
Sintáxis
Oracle 9i
Descripción
interval day
(day precision)
to second
(fractional
seconds
precision)
day precision debe
ser un número entre
0 y 9. (El valor por
defecto es 2)
Incluye año,
mes día, hora,
minutos y
segundos.
rowid
No soportado por
Oracle 8i.
El formato del
campo rowid es:
BBBBBBB.RRRR.FF
FFF donde
BBBBBBB es el
bloque en el
fichero de la base
de datos; RRRR es
la fila del bloque;
FFFFF es el
fichero de la base
de datos.
fractional seconds
precision debe ser
un número entre 0 y
9. (El valor por
defecto es 6)
El formato del
campo rowid es:
Datos binarios
de ancho fijo.
Cada registro
BBBBBBB.RRRR.FFFFF de la base de
donde BBBBBBB es el datos tiene una
bloque en el fichero
dirección física
o rowid.
de la base de datos;
RRRR es la fila del
bloque; FFFFF es el
fichero de la base de
datos.
urowid
[tamaño]
Hasta 2000 bytes.
Hasta 2000 bytes.
boolean
Válido en PLSQL,
este tipo de datos
no existe en
Oracle 8i.
Hasta 32767 bytes
en PLSQL. Hasta
2000 bytes en
Oracle 8i.
Válido en PLSQL,
este tipo de datos no
existe en Oracle 9i.
nchar (tamaño)
nvarchar2
(tamaño)
Por ejemplo:
interval day(2)
to second(6)
Hasta 32767 bytes en
PLSQL. Hasta 2000
bytes en Oracle 9i.
Hasta 32767 bytes Hasta 32767 bytes en
en PLSQL. Hasta
PLSQL. Hasta 4000
4000 bytes en
bytes en Oracle 9i.
Oracle 8i.
Rowid
universal.
Donde tamaño
es opcional.
Donde tamaño
es el número
de caracteres a
almacenar.
Cadena NLS de
ancho fijo.
Donde tamaño
es el número
de caracteres a
almacenar.
Cadena NLS de
ancho variable.
Pagina 28
ORACLE
Tipo de dato / Oracle 8i
Sintáxis
Oracle 9i
Descripción
bfile
Hasta 4
gigabytes.
Hasta 4 gigabytes.
blob
Hasta 4
gigabytes.
Hasta 4 gigabytes.
clob
Hasta 4
gigabytes.
Hasta 4 gigabytes.
nclob
Hasta 4
gigabytes.
Hasta 4 gigabytes.
Localizadores
de archivo
apuntan a un
objeto binario
de sólo lectura
fuera de la
base de datos.
Localizadores
LOB apuntan a
un gran objeto
binario dentro
de la base de
datos.
Localizadores
LOB apuntan a
un gran objeto
de caracteres
dentro de la
base de datos.
Localizadores
LOB apuntan a
un gran objeto
NLS de
caracteres
dentro de la
base de datos.
Pagina 29
ORACLE
Creación de tablas
La instrucción CREATE TABLE
Sintaxis
CREATE TABLE nombre_tabla(
Nombre_columna1 tipo_dato1 (NULL | NOT NULL),
Nombre_columna1 tipo_dato2 (NULL | NOT NULL),
Nombre_columna1 tipo_dato3 (NULL | NOT NULL)
Especificación de NULL o NOT NULL

NULL: columna que puede ser nulo de datos.

NOT NULL: columna obligado a ingresar datos.
Creación de tablas
En el esquema INSTITUTO crear la tabla especialidad asociada al tablespace
TS_INT.
CREATE TABLE especialidad
(id_especialidad NUMBER(3) NOT NULL,
nombre_especialidad VARCHAR2(40))
TABLESPACE TS_INT;
Usted recibe un mensaje de error, el cual indica que usted no cuenta con los
privilegios necesarios para crear las tablas.
Concesión al esquema INSTITUTO del privilegio para crear las
tablas
Conéctese con el usuario SYSTEM.
Ejecute el siguiente script.
GRANT RESOURCE TO INSTITUTO;
El rol RESOURCE concede privilegios para crear ciertos objetos de un
esquema, entre ellos las tablas.
Pagina 30
ORACLE
Conéctese con el usuario INSTITUTO
Vuelva a ejecutar el script.
CREATE TABLE especialidad
(id_especialidad NUMBER(3) NOT NULL,
nombre_especialidad VARCHAR2(40))
TABLESPACE TS_INT;
Verificación la creación de la tabla.
SELECT *FROM CAT;
Verificar la definición de la tabla.
DESCRIBE especialidad;
Laboratorio 01:
1. Crear las siguientes tablas.
2. Verifique la creación de las tablas.
3. Verificar la definición de las tablas.
Pagina 31
ORACLE
Modificando la definición de la tabla.
En una tabla podemos añadir nuevas columnas, eliminar columnas, cambiar
las propiedades de las columnas, añadir o eliminar restricciones.
La instrucción ALTER TABLE
Sintaxis
ALTER TABLE nombre_tabla
ADD nombre_columna propiedades_columna
| DROP COLUMN nombre_columna
| ALTER COLUMN nombre_columna
nuevas_propiedades_columna
| ADD CONSTRAINT nombre_restriccion
PRIMARY KEY | UNIQUE | FOREIGN KEY
| DEFAULT | CHECK
| DROP CONSTRAINT nombre_restriccion

ADD nombre_columna: permite añadir nueva columna a la tabla.

DROP COLUMN: se usa para eliminar una columna.

ALTER COLUMN: permite modificar la definición de una columna.

ADD CONSTRAINT: permite añadir una restricción PRIMARY KEY,
UNIQUE FOREIGN KEY, DEFAULT o CHECK a la definición de una tabla.

DROP CONSTRAINT: se usa para eliminar una restricción.
Para ver el efecto de la instrucción ALTER TABLE, en el esquema INSTITUTO
crearemos una tabla.
CREATE TABLE tabla_prueba
(columna1 NUMBER(3) NOT NULL,
columna2 VARCHAR2(10))
TABLESPACE TS_INT;
Añadir una columna de tipo NUMBER(8,2) con la propiedad NULL.
ALTER TABLE tabla_prueba
ADD columna3 NUMBER(8,2) NULL;
Pagina 32
ORACLE
Adición de una columna NOT NULL a una tabla.
Insertamos una fila en la tabla tabla_prueba
INSERT INTO tabla_prueba VALUES(101,’CARLOS’,30.45);
Ahora tratemos de añadir una columna de tipo VARCHA2 con la propiedad NOT
NULL.
ALTER TABLE tabla_prueba
ADD columna4 VARCHAR2(20) NOT NULL;
Usted recibe un mensaje de error, el cual indica que solo puede agregar
columnas con la propiedad NOT NULL cuando la tabla esta vacía.
Añadiendo la columna con la propiedad NULL
ALTER TABLE tabla_prueba
ADD columna4 VARCHAR2(20) NULL;
Ahora, establecemos cual es el valor para la nueva columna de la fila que ya
esta registrada en la tabla.
UPDATE tabla_prueba
SET columna4=’LIMA’
WHERE columna1=’101’;
Ahora cambiamos la propiedad NULL de dicha columna a NOT NULL.
ALTER TABLE tabla_prueba
MODIFY (columna4 VARCHAR2(20) NOT NULL);
Pagina 33
ORACLE
Restricciones
Son un método declarativo de definición de la integridad de datos ya que ellas
se definen al momento de crear la tabla con la sentencia (CREATE TABLE) o al
momento de modificar de tabla con la sentencia (ALTER TABLE).
Tipos de restricciones
Las restricciones son un método estándar ANSI para forzar la integridad de los
datos. A continuación los tipos de restricciones.
tipos de restricciones
descripción
PRIMARY KEY
(clave primaria)
UNIQUE
(valor no duplicado)
FOREIGN KEY
(clave foránea)
garantiza que cada fila o registro en una tabla
sea único, no permite valores nulos.
garantiza que cada valor en una columna es
único. permite valores únicos.
define la columna o combinación de columnas
de una tabla secundaria cuyos valores dependen
de la clave primaria de una tabla primaria.
establece el valor predeterminado para una
columna.
establece la regla que debe cumplir un valor
para que se un valor aceptable en una columna.
DEFAULT
(valor predeterminado)
CHECK
(regla de validación)
Creación de la clave primaria (PK)
Sintaxis
ALTER TABLE nombre_tabla
ADD CONSTRAINT pk_nombre_tabla
PRIMARY KEY (columnaP, columnaX)

pk_nombre_tabla: es el nombre de la restricción clave primaria.

columnaP, columnaX: es la columna o combinación de columnas
que se define como clave primaria.
Creación de clave primaria de la tabla curso.
ALTER TABLE curso
ADD CONSTRAINT PK_curso
PRIMARY KEY(id_curso);
Pagina 34
ORACLE
Creación de clave foránea (FK).
Sintaxis
ALTER TABLE nombre_tabla
ADD CONSTRAINT fk_nombre_tabla_tabla_referenciada
FOREIGN KEY (columnaP, columnaX)
REFERENCES tabla_referenciada
 fk_nombre_tabla_tabla_referenciada: es el nombre de la
restricción clave foranea.
 columnaP, columnaX: es la columna o combinación de columnas
que se define como clave foránea.
 tabla_referenciada: es el nombre de la tabla primaria con la que se
relaciona la tabla secundaria que tiene la clave foránea.
Creación de la clave foránea en la tabla notas.
ALTER TABLE notas
ADD CONSTRAINT FK_notas_curso
FOREIGN KEY (id_curso) REFERENCES curso;
Creación de la restricción valor no duplicado (UNIQUE).
Sintaxis
ALTER TABLE nombre_tabla
ADD CONSTRAINT u_nombre_tabla_nombre_columna
UNIQUE (columnaP, columnaX)

u_nombre_tabla_nombre_columna: es el nombre de la
restricción valor no duplicado o UNIQUE.
 columnaP, columnaX: es la columna o combinación de columnas a
la que se aplica la restricción.
Pagina 35
ORACLE
Creación de restricción UNIQUE para la columna nombre_curso
en la tabla curso.
ALTER TABLE curso
ADD CONSTRAINT U_curso_nombre_curso
UNIQUE (nombre_curso);
Creación de valor predeterminado (DEFAULT)
Sintaxis
ALTER TABLE nombre_tabla
MODIFY (columnaX DEFAULT valor_predeterminado)
valor_predeterminado: es el valor que se almacena en la columnas
cuando inserta una fila no se especificada el valor para esa columna.
columnaX: es la columna que se aplica la restricción.
Creación de una restricción DEFUALT para la columna
credito_curso en la tabla curso.
Antes vamos a insertar un registro en la tabla curso
INSERT INTO curso VALUES (501,’JAVA’,30);
Ahora procedemos a crear la restricción.
ALTER TABLE curso
MODIFY (credito_curso DEFAULT 30);
Ahora inserte un registro
INSERT INTO curso (id_curso,nombre_curso)VALUES
(501,’JAVA’);
Pagina 36
ORACLE
Creación de regla de validación (CHECK)
Sintaxis
ALTER TABLE nombre_tabla
ADD CONSTRAINT ck_nombre_tabla_nombre_columna
CHECK (condición)
ck_nombre_tabla_nombre_columna: es el nombre de la restricción
regla de validación o check.
condición: es la expresión que determina como debe ser el valor a ingresar
en la columna afectada por la restricción.
Creación de la restricción CHECK para la columna credito_curso
de la tabla curso.
ALTER TABLE curso
ADD CONSTRAINT CK_curso_credito_curso
CHECK (credito_curso > 0);
Eliminación de tablas (la instrucción DROP TABLE)
Elimina la definición de una tabla.
Si la tabla referencial por una clave foránea, no se podrá eliminar.
Eliminación de tablas
DROP TABLE tabla_prueba;
Pagina 37
ORACLE
Laboratorio 02:
1. Establecer clave principal y relacione las siguientes tablas.
2. Inserte 2 registros en la tabla especialidad, registros a la tabla curso, 3
registros en la tabla alumno y 3 registros a la tabla notas.
3. Agregar la columna (telefono_alumno varchar2 (10)) a la tabla alumno.
4. Establecer restricción a la columna (credito_curso) de la tabla curso, el
credito del curso no puede ser mayor a 120.
5. Mostrar la fecha del sistema.
6. Verificar los tablespace creados y escribirlos.
7. Verificar todos los objetos del catalogo de esquema INSTITUTO.
Pagina 38
ORACLE
Mantenimiento de datos
Una vez de haber creado las tablas de la base de datos se debe cargar la data
lo que normalmente se lleva a cabo desde una aplicación cliente que contiene
formularios para que el usuario puede cargar los datos con facilidad y
comodidad.
Inserción de filas (instrucción INSERT)
Sintaxis
INSERT INTO nombre_tabla (lista_columnas) VALUES (lista_de_
valores)
lista_columnas: es la relación de columnas en las que se almacenaran los
valores especificados.
lista_de_valores: es la relación de valores a almacenar en la fila a
insertar.
Los elementos de ambas listas van separados.
Inserción de una fila con lista de valores completa
INSERT INTO curso VALUES (502,’VISUAL STUDIO .NET’,20);
Inserción de una fila con lista de valores incompleta
INSERT INTO curso (id_curso,nombre_curso) VALUES
(503,POWER BUILDER’);
Objeto sequence
Pagina 39
ORACLE
Es un objeto de base de datos que genera números secuenciales y se utiliza
para asignar valores a campos numéricos enteros en los que se requiere que la
generación de su contenido sea automática y secuencial.
Sintaxis
CREATE SECUENCE nombre_secuencia
[ STAR WITH valor_inicial ]
[ INCREMENT BY incremento ]
[ MAXVALUE valor_maximo | NOMAXVALUE ]
[ MINVALUE valor_minimo | NOMINVALUE ]
[ CYCLE | NOCYCLE ]
 Valor_inicial: valor que empieza la secuencia.
 Incremento: establece la diferencia entre un valor de la secuencia y
el siguiente si no específica se asume 1.
 Valor_maximo: mayor valor de la secuencia que puede alcanzar.
 Valor_minimo: menor valor en la secuencia.
 Cycle: permite que la secuencia continué a partir de MINVALUE
cuando se alcanza MAXVALUE.
 Nocycle: modo predeterminado.
Creando una nueva tabla, y creando un objeto sequence.
CREATE TABLE tabla_secuencia
(codigo NUMBER(4) PRIMARY KEY NOT NULL,
nombre VARCHAR2(20) NOT NULL)
TABLESPACE TS_INT;
CREATE SEQUENCE sq_codigo
MAXVALUE 9999;
Utilizamos el objeto secuencia sq_codigo para insertar datos.
INSERT INTO tabla_secuencia
VALUES(sq_codigo.NEXTVAL,’CARLOS EDUARDO’);
Pagina 40
ORACLE
Actualización de datos (instrucción UPDATE)
Sintaxis
UPDATE nombre_tabla
SET columnaX = expresionX,
columnaP = expresionP, …
WHERE condicion_fila_actualizar

columnaX, columnaP: son las columnas cuyo contenido se
actualizará.

expresionX, expresionP: establecen los nuevos valores a
almacenar en las columnas.

condicion_fila_actualizar: es una expresión lógica que determina
que las filas en las que la actualización se debe llevar acabo.
Uso del UPDATE
Antes de del uso del UPDATE, ejecute la siguiente instrucción.
SELECT *FROM curso;
Ejecute la siguiente instrucción
UPDATE curso
SET credito_curso=25
WHERE id_curso=502;
Pagina 41
ORACLE
Eliminación de filas (instrucción DELETE)
Sintaxis
DELETE FROM nombre_tabla
WHERE condicion_fila_eliminar
condicion_fila_eliminar: es una expresión lógica que determina las filas
en las que la eliminación se debe llevar acabo.
Uso del DELETE
Antes de del uso del DELETE, ejecute la siguiente instrucción.
SELECT *FROM curso;
Elimine el curso POWER BUILDER
DELETE FROM curso
WHERE id_curso=503;
Si desea eliminar todos los registros.
DELETE FROM curso;
Eliminación de todas las filas de una tabla (instrucción
TRUNCATE TABLE)
La instrucción TRUNCATE TABLE se ejecuta más rápido debido a que no
registra la eliminación de cada fila en el log de transacciones como lo hace
DELETE.
TRUNCATE TABLE nombre_tabla
Eliminar todas las filas de la tabla curso
TRUNCATE TABLE curso;
Pagina 42
ORACLE
Fundamentos de Oracle - SQL
Es la implementación de Oracle del estándar ANSI SQL que define elementos
del lenguaje SQL que puede ejecutarse desde cualquier aplicación frontal.
Elementos de Oracle - SQL
DML: Data Manipulation Languague (consultar y modificar datos)
DDL: Data Definition Languague (crear objetos de la base de datos)
DCL: Data Control Languague (quien modifica los datos)
Elementos adicionales al lenguaje: variables, operadores, funciones,
sentencia de control de flujo y comentarios.
Declaración DML
Trabaja con los datos de la base de datos
instrucción
descripción
SELECT
selecciona filas y columnas de una o más tablas de la base
de datos.
añade una nueva fila a una tabla.
modifica los datos existentes en una tabla.
elimina filas de una tabla.
INSERT
UPDATE
DELETE
Declaración DDL
Permite crear base de datos, tablas, y tipos de datos definidos por el usuario.
instrucción
Descripción
CREATE
nombre_objeto
ALTER
nombre_objeto
DROP
nombre_objeto
crea un objeto de la base de datos.
modifica la definición del objeto de la base de datos.
elimina un objeto de la base de datos.
Declaración DCL
Permite cambiar los permisos o roles asociado con un usuario de la base de
datos.
instrucción
descripción
GRANT
crea una entrada en la seguridad del sistema que le
permite a un usuario trabajar con los datos o ejecutar
ciertas sentencias.
crea una entrada de seguridad del sistema negando un
permiso de una cuenta de seguridad.
quita un permiso previamente concebido o negado
DENY
REVOKE
Pagina 43
ORACLE
Operadores
La siguiente tabla ilustra los operadores de Oracle.
tipo de operador
operadores
Operador de asignación
Operadores aritméticos
:= (dos puntos + igual)
+ (suma)
- (resta)
* (multiplicación)
/ (división)
** (exponente)
= (igual a)
<> (distinto de)
< (menor que)
> (mayor que)
>= (mayor o igual a)
<= (menor o igual a)
AND (y lógico)
NOT (negación)
OR (o lógico)
||
Operadores relacionales o de
comparación
Operadores lógicos
Operador de concatenación
Pagina 44
ORACLE
Laboratorio 03:
1. Crear un tablespace de nombre TS_INT.
2. Crear un esquema de nombre INSTITUTO.
3. Crear las siguientes tablas dentro del esquema
Establecer clave principal a cada tabla y relacionarlas.
(INSTITUTO):
4. En la tabla notas la nota no debe sobre pasar más de 20.
5. Insertando los siguientes registros:
Tabla: ESPECIALIDAD
Tabla: CURSO
Tabla: ALUMNO
Pagina 45
ORACLE
Tabla: NOTAS
6. Cambie el crédito del curso a 150 para los cursos LIBRO CAJA y POWER
BUILDER.
7. Mostrar los alumnos que tenga la especialidad de COMPUTACION E
INFORMACTICA.
8. Mostar las notas de los alumnos que lleven el curso POWER BUILDER.
9. Aumentar 2 puntos en el EXAMEN PARCIAL, al alumno JOSE ANTONIO
ROMAN LEIVA.
10.Mostar el promedio global de los alumnos que lleven el curso de
VISUAL STUDIO.NET.
Pagina 46
ORACLE
11.Mostrar el promedio global mas bajo.
12.Mostrar los datos del alumno MARIA ISABEL LOZADA ROJAS de tal forma
que se vea en un solo cuadro.
13.Cambie el curso de VISUAL STUDIO.NET a JAVA CREATOR.
tenga el crédito del curso mayor a 100.
14.Mostrar los cursos que
15.Restar con 5 puntos en el EXAMEN FINAL a los alumnos que lleven el
curso de LIBRO CAJA.
16.Insertar
un nuevo alumno que tenga la especialidad de COMPUTACION E
INFORMATICA.
Pagina 47
ORACLE
17.Mostrar los alumnos que tenga en el promedio global más 15.
18.Insertar 5 nuevos alumnos, 3 de ellos para la especialidad de
CONTABILIDAD Y FINANZAS y los otros 2 para la otra especialidad.
19.Ingresar notas a los alumnos que no tengan, los alumnos de
COMPUTACION E INFORMATICA lleva el curso de JAVA CREATOR.
20.Mostrar el promedio global más bajo que lleven el curso de JAVA
CREATOR.
Pagina 48
ORACLE
estén bajo o igual a 13.
21.Aumentar con 3
puntos más a
las notas del
EXAMEN
PARCIAL
que
22.Mostrar los cursos que tenga en CREDITO DE CURSO menor a 100
23.Cambie el curso de LIBRO CAJA a LIBRO MAYOR.
24.Mostar todos los alumnos que tenga la especialidad de CONTABILIDAD Y
FINANZAS.
25.Mostrar los alumnos que lleven el curso de JAVA CREATOR y que su
promedio global sea mayor igual a 17.
Pagina 49
ORACLE
26.Cambie el curso de COSTOS Y PRESUPUESTOS a ECONOMIA Y FINANZAS.
27.Restar con 1 punto en el EXAMEN FINAL a los alumnos que lleven el
curso de LIBRO MAYOR.
28.Mostrar los alumnos que tenga nota de promedio global 15 o 17.
29.Mostrar las notas del alumno CARMEN ROSARIO SOLIS ALVAREZ.
30.Restar con 12 puntos en el EXAMEN FNAL a los alumnos que lleven el
curso de POWER BUILDER.
Pagina 50
ORACLE
Preguntas de investigación
31.Mostrar la fecha del sistema incrementado 5 días.
32.Mostar la hora del sistema.
33.Mostrar la condición APROBADO o DESAPROBADO dependiendo el
promedio global.
34.Mostrar su edad actual
35.Genere el proceso de operación para el promedio global.
Pagina 51
ORACLE
Consultas simples
Antes de empezar, resuelva el laboratorio 04
Laboratorio 04:
1. Crear un tablespace de nombre TS_COM.
2. Crear un esquema de nombre COMERCIAL.
3. Crear las siguientes tablas dentro del esquema
Establecer clave principal a cada tabla y relacionarlas.
(COMERCIAL):
Pagina 52
ORACLE
E-Mail: [email protected]
Pagina 53
ORACLE
La instrucción SELECT
Hay tres componentes básicos en la instrucción SELECT: SELECT FROM y
WHERE.
Sintaxis
SELECT * | lista_columnas
FROM nombre_tabla
WHERE condicion_filas
lista_columnas: es la lista de las columnas a mostrar en el resultado de la
consulta. Si se especifica * se mostraran todas las columnas de la tabla.
condicion_filas: es una expresión lógica que indica que las filas a mostrar
son aquellas para las que el valor de la expresión es verdadero.
Sintaxis con cláusulas más utilizadas
SELECT ALL |DISTINCT lista_columnas
INTO nueva_tabla FROM tabla_origen
WHERE condicion_filas
GROUP BY ALL expresión_agrupar_por ,
HAVING condicion_grupos
ORDER BY nombre_columa ASC | DESC.
Lectura de todos los datos.
SELECT *FROM PERSONAL;
Pagina 54
ORACLE
Lectura de columnas seleccionadas.
SELECT COD_CLI,APE_CLI,NOM_CLI,TEL_CLI FROM CLIENTE;
Definiendo alias para los nombres de las columnas.
SELECT COD_PER AS ID,APE_PER AS APELLIDOS,NOM_PER AS
NOMBRES FROM PERSONAL;
Definiendo columnas computadas.
SELECT COD_PRO,NOM_PRO,COD_LIN,PRE_PRO,(PRE_PRO (PRE_PRO * 0.05)) AS "PRECIO CON DSCTO"
FROM PRODUCTO;
Pagina 55
ORACLE
Machanay Sulca, Carlos E.
Concatenando cadena.
SELECT COD_CLI,NOM_CLI || ' ' || APE_CLI AS CLIENTE,DIR_CLI
FROM CLIENTE;
E-Mail: [email protected]
Pagina 56
ORACLE
Machanay Sulca, Carlos E.
Definición de filtros
En la cláusula WHERE, condicion_filas es una expresión lógica que establece
la condición que deben cumplir las filas a mostrar el resultado de la consulta.
Para construir la expresión lógica utilice operadores relacionales o de
comparación y de operadores lógicos SQL como LIKE, BETWEEN e IN.
Uso del operador igual (=)
SELECT COD_PER,APE_PER,NOM_PER,COD_DIS FROM PERSONAL
WHERE COD_DIS='D03';
Uso del operador diferente (<> !=)
SELECT COD_CAR,NOM_CAR FROM CARGO
WHERE COD_CAR <> 'C003';
SELECT COD_CAR,NOM_CAR FROM CARGO
WHERE COD_CAR != 'C003';
Uso del operador menor que (<)
SELECT
COD_PRO,NOM_PRO,COD_LIN,COD_MAR,PRE_PRO,STO_ACT
FROM PRODUCTO
WHERE STO_ACT < 15;
E-Mail: [email protected]
Pagina 57
ORACLE
Uso del operador mayor que (>)
SELECT
COD_PRO,NOM_PRO,COD_LIN,COD_MAR,PRE_PRO,STO_ACT
FROM PRODUCTO
WHERE PRE_PRO > 3100;
Uso del operador menor o igual que (< =)
SELECT COD_CLI,NOM_CLI,APE_CLI,DIR_CLI FROM CLIENTE
WHERE APE_CLI <='LOAYZA MARENGO';
Uso del operador mayor o igual que (> =)
SELECT COD_CLI,NOM_CLI,APE_CLI,DIR_CLI FROM CLIENTE
WHERE APE_CLI >='SALAZAR RUIZ';
Pagina 58
ORACLE
Manipulación de datos tipo Fecha y Hora.
Fecha del sistema
SELECT SYSDATE FROM DUAL;
Uso de la función TO_CHAR con datos tipo fecha
TO_CHAR(expresión_fecha,’patron_formato_fecha’)
Convierte la expresión_fecha a una cadena con el formato de fecha
especificado en patron_formato_fecha.
expresión_fecha: representa la fecha que se desea convertir a cadena con
formato fecha.
patron_formato_fecha: especifica el formato de la cadena que
representa una fecha.
Mostrar solo fecha
SELECT TO_CHAR(SYSDATE,'DD/MM/YYYY') AS FECHA FROM
DUAL;
Mostrar solo hora
SELECT TO_CHAR(SYSDATE,'HH:MI:SS') AS HORA FROM DUAL;
Pagina 59
ORACLE
Búsqueda basada en cadena de caracteres
Operador LIKE
Sintaxis
SELECT * | FROM lista_columnas
FROM nombre_tabla
WHERE columna LIKE expresión_cadena_a_buscar
Comodín del operador LIKE.
Comodín
%
-
Descripción
indica que en la posición del comodín puede ir cualquier
cadena de caracteres, incluso una cadena nula.
indica que en la posición del comodín puede ir cualquier
cadena de caracteres, no nulo.
Uso del comodín (%)
Permite generar la busqueda por el incio del campo.
SELECT COD_CLI,NOM_CLI,APE_CLI,DIR_CLI FROM CLIENTE
WHERE APE_CLI LIKE 'PAL%';
Permite generar la búsqueda por el final del campo.
SELECT COD_CLI,NOM_CLI,APE_CLI,DIR_CLI FROM CLIENTE
WHERE APE_CLI LIKE '%IVA';
Pagina 60
ORACLE
Permite generar la búsqueda por cualquier lado del campo.
SELECT COD_CLI,NOM_CLI,APE_CLI,DIR_CLI FROM CLIENTE
WHERE NOM_CLI LIKE '%MARIA%';
Uso del comodín ( _ )
SELECT
COD_PRO,NOM_PRO FROM PRODUCTO
WHERE NOM_PRO LIKE '%43_';
Búsqueda basada en rango
El operador BETWEEN permite ejecutar consultas que ejecutan búsquedas
basadas en rango de valores.
Sintaxis
SELECT * | lista_columnas
FROM nombre_tabla
WHERE columna BETWEEN valor_inicial AND valor_final
between indica que el valor en columna debe encontrarse en el rango
definido por valor_inicial y valor _final.
columna: es la columna en la que se busca según el rango especificado por
valor_inicial y valor_final.
valor_inicial, valor_final: establecen los límites del rango de valores en
el que se basa la búsqueda.
Pagina 61
ORACLE
Búsqueda basada en rango de valores numéricos.
SELECT COD_PRO,NOM_PRO,PRE_PRO,STO_ACT FROM
PRODUCTO
WHERE STO_ACT BETWEEN 10 AND 14;
Búsqueda basada en rango de valores cadena.
SELECT COD_PRO,NOM_PRO,PRE_PRO,STO_ACT FROM
PRODUCTO
WHERE NOM_PRO BETWEEN 'CO' AND 'EX'
ORDER BY NOM_PRO;
Búsqueda basada en rango de valores fecha.
SELECT TOTAL,NUM_COMP FROM COMPROBANTE
WHERE FECHA_EMISION BETWEEN '02/02/2009' AND
'03/03/2009';
Pagina 62
ORACLE
Búsqueda basada en conjunto de valores.
El operador IN permite ejecutar consultas que ejecutan búsquedas basadas en
conjunto de valores.
Sintaxis
SELECT * | lista_columnas
FROM nombre_tabla
WHERE columna [NOT] IN (conjunto_de_valores)
Busqueda en conjunto de
valores
SELECT
COD_PRO,NOM_PRO,PRE_PRO,STO_ACT FROM PRODUCTO
WHERE COD_PRO IN('P0000010','P0000080','P0000041');
Manipulación de valores NULL
Un valor NULL indica que el valor es desconocido, no aplicable, o que
simplemente se registrara posteriormente. Un valor NULL es distinto a una
cadena vacía o al valor cero (0), y también es distinto a cualquier otro valor
NULL.
La comparación u operación entre dos valores NULL, o entre un valor NULL y
cualquier otro valor retorna un valor desconocido (otro valor NULL), ya que
cada valor NULL es desconocido.
Antes de ejecutar un valor NULL, ejecute la siguiente sentencia.
UPDATE PRODUCTO
SET STO_ACT=''
WHERE COD_PRO IN('P0000001','P0000005');
Pagina 63
ORACLE
Ahora muestre los valores NULL.
SELECT COD_PRO,NOM_PRO,PRE_PRO FROM PRODUCTO
WHERE STO_ACT IS NULL;
Calculo con valores de columnas que contienen valores NULL.
SELECT COD_PRO,NOM_PRO,PRE_PRO,
STO_MIN,STO_ACT,STO_MIN + STO_ACT AS STOCK FROM
PRODUCTO
WHERE COD_PRO IN('P0000001','P0000005');
Calculo con valores de columnas que contienen valores NULL –
uso de la función NVL
Sintaxis
NVL (expresión_a_verificar, valor_de_remplazo)
expresión_a_verificar: es una expresión cuyo valor puede ser NULL.
valor_de_remplazo: es el valor con que se remplaza
expresión_a_verificar en el caso que esta fuera NULL.
Ejecutando la consulta empleando la función NVL.
SELECT COD_PRO,NOM_PRO,PRE_PRO,
STO_MIN,NVL(STO_ACT,0),STO_MIN + NVL(STO_ACT,0) AS STOCK
FROM PRODUCTO
WHERE COD_PRO IN('P0000001','P0000005');
Pagina 64
ORACLE
Pagina 65
ORACLE
Laboratorio 05:
Utilizando el esquema COMERCIAL.
1. Mostrar todos productos que sean de tipo DIGITAL.
2. Mostrar todos los clientes que al
final de su nombre termine con
RIA.
3. Mostrar a todo el personal que al inicio de su apellido empiece con C.
Pagina 66
ORACLE
4. Mostrar todos los productos que tenga en stock de 10 a 15 unidades.
5. Mostrar todos los productos que empiece con la letra T, y que tenga en
stock de 1 a 15 unidades.
6. Mostrar todos los productos de la línea ESCRITORIO, que tenga en stock
menos de 50 unidades y el precio este entre 300 y 1000.
7. Mostrar todos los productos que empiece con la letra TV y que sean de
la marca MIRAY.
Pagina 67
ORACLE
8. Mostrar todas las líneas que terminen con la letra O.
9. Mostrar todos los productos que utilicen GAS.
10.Mostrar todos los clientes que tenga los siguientes códigos: C0000001,
C0000018, C0000020.
Preguntas de investigación.
11.Mostrar todos los clientes que al inicio de sus datos sea mayúscula, y
que tenga la letra Z.
12.Elevar a la potencia 5 ^ 2.
Pagina 68
ORACLE
Funciones ORACLE
Funciones numérica
Las funciones numéricas ejecutan un cálculo en base a valores de entrada
recibidos como parámetros retornando como valor numérico.
MOD (expresionNumerica1, expresionNumerica2)
Retorna el residuo de la división.
Ejemplo
SELECT MOD(11,2) FROM DUAL;
POWER (expresionNumerica, n)
Retorna el resultado de elevar expresionNumerica a la potencia n.
Ejemplo
SELECT POWER(4,3) FROM DUAL;
ROUND (expresionNumerica, presicion)
Retorna el valor de expresionNumerica redondeando a la presicion
especificada.
Ejemplo
SELECT ROUND(230.5879,0)FROM
SELECT ROUND(230.5879,1)FROM
SELECT ROUND(230.5879,2)FROM
SELECT ROUND(230.5879,3)FROM
SELECT ROUND(230.5879,4)FROM
DUAL;
DUAL;
DUAL;
DUAL;
DUAL;
231
230.6
230.59
230.588
230.5879
Pagina 69
ORACLE
SQRT (expresionNumerica)
Retorna la raiz cuadrada de expresionNumerica.
Ejemplo
SELECT SQRT(9)FROM DUAL;
TRUNC (expresionNumerica, [n])
Trunc espresionNumerica a n lugares decimales.
Ejemplo
SELECT TRUNC(3457.5252,2) FROM DUAL;
Funciones Cadena
Ejecutan operaciones sobre una cadena ingresada como parámetro, y
devuelven una cadena o valor numérico o información sobre el juego de
caracteres.
CONCAT (expresionCadena1, expresionCadena2)
Retorna expresionCadena1 concatenando con expresionCadena2.
Ejemplo
SELECT CONCAT('ALIANZA LIMA ', 'CAMPEON 2009' ) AS EQUIPO
FROM DUAL;
INITCAP (expresionCadena)
Retorna expresionCadena con la inicial de cada palabra mayúscula.
Ejemplo
SELECT INITCAP('carlos eduardo machanay sulca') AS CLIENTE
FROM DUAL;
Pagina 70
ORACLE
LENGTH (expresionCadena)
Retorna longitud de expresionCadena.
Ejemplo
SELECT LENGTH('ALIANZA LIMA')AS EQUIPO FROM DUAL;
LOWER (expresionCadena)
Retorna expresionCadena, pero todo en minúscula.
Ejemplo
SELECT LOWER(‘JAVA’) AS SOFTWARE FROM DUAL;
LTRIM (expresionCadena1 [,expresionCadena2])
Elimina los espacios en blanco por izquierda.
Ejemplo
SELECT LTRIM('
ORACLE Y JAVA')AS SOFTWARE FROM DUAL;
REPLACE (expresionCadena1, expresionCadena2,
expresionCadena3)
Remplaza en expresionCadena1 todas las ocurrencias de expresionCadena2
con expresionCadena3.
Ejemplo
SELECT REPLACE('EL MEJOR EQUIPO DEL PERU UNIVERSITARIO
' ,'UNIVERSITARIO','ALIANZA LIMA') AS EQUIPO FROM DUAL;
Pagina 71
ORACLE
RTRIM (expresionCadena1 [,expresionCadena2])
Elimina los espacios en blanco por derecha.
Ejemplo
SELECT RTRIM('PL/SQL DEVELOPER
') AS MANUAL FROM DUAL;
SELECT RTRIM('PL/SQL DEVELOPER','DEVELOPER') AS MANUAL
FROM DUAL;
SUBSTR (expresionCadena, inicio, n)
A partir de expresionCadena retorna una subcadena de n caracteres de
longitud generada a partir de la posición inicio.
Ejemplo
SELECT SUBSTR('ALIANZA LIMA CAMPEON 2009',1,12) AS EQUIPO
FROM DUAL;
UPPER (expresionCadena)
Retorna expresionCadena, pero todo en mayúscula.
Ejemplo
SELECT UPPER('oracle developer') AS MANUAL FROM DUAL;
Pagina 72
ORACLE
Funciones Fecha y Hora
Las funciones de fecha y hora operan sobre valores de fecha (DATE).
ADD_MONTHS (expresionFecha,n)
Incrementa expresionFecha en n meses y genera una nueva fecha.
Ejemplo
SELECT ADD_MONTHS(SYSDATE,4)AS FECHA FROM DUAL;
EXTRACT (parteFecha, from expresionFecha)
Entrega a partir de expresionFecha, la parteFecha especificada. parteFecha
puede ser una de las siguientes:
YEAR
MONTH
DAY
HOUR
MINUTE
SECOND
Ejemplo
SELECT EXTRACT(YEAR FROM SYSDATE) AS AÑO FROM DUAL;
LAST_DAY (expresionFecha)
Entrega la fecha del último día del mes especificado:
Ejemplo
SELECT LAST_DAY(SYSDATE) AS FECHA FROM DUAL;
Pagina 73
ORACLE
NEXT_DAY (expresionFecha, diaSemana)
Entrega la fecha posterior más cercana a expresionFecha y que cae en el
diaSemana especificado.
Ejemplo
SELECT NEXT_DAY('25/08/2009','VIERNES') AS FECHA FROM
DUAL;
ROUND (expresionFecha, Unidad)
Entrega la nueva fecha que es el resultado de redondear expresionFecha a la
unidad especificada.
Ejemplo
SELECT ROUND(TO_DATE('25/02/2009'),'YEAR') AS FECHA FROM
DUAL;
TO_CHAR (expresionFecha, formato [,idioma]) )
Convierte expresionFecha a una cadena con el formato e idioma
especificados.
Ejemplo
SELECT TO_CHAR(SYSDATE,'DD/MM/YYYY')AS FECHA FROM DUAL;
Pagina 74
ORACLE
Elementos para formato
Elemento
DL
DS
DAY
DY
D
DD
DDD
MONTH
MON
MM
YYYY
YY
HH
HH24
MI
SS
TS
Descripción
formato de fecha largo.
formato de fecha corto.
nombre del dia de la semana.
nombre abreviado del dia de la semana.
dia de la semana(1 - 7)
dia del mes (1 - 31)
dia del año (1 - 365)
nombre del mes.
nombre abreviado del mes.
mes del año (01 - 12)
año con 4 dígitos.
año con 2 digitos.
hora del dia (1 - 12)
hora del dia (0 - 23)
minutos (0 - 59)
segundos (0 – 59)
formato de hora.
TO_DATE (‘cadenaFormatoFecha’ [,formato] [,formato])
Entrega un tipo Fecha-Hora a partir de ‘cadenaFormatoFecha’ usando el
formato e idioma especificados.
Ejemplo
SELECT TO_DATE('25/08/2009','DD/MM/YYYY')AS FECHA FROM
DUAL;
Pagina 75
ORACLE
Funciones de conversión de tipos
CAST (expresión as tipoDato)
Convierte el valor de la expresión al tipo especificado en tipoDato.
Ejemplo
SELECT CAST(SYSDATE AS CHAR(10))AS FECHA FROM DUAL;
Otras funciones
NVL (expresión1, expresión2)
Si expresión1 es NULL, la funcion retorna expresión2.
NVL2 (expresión1, expresión2, expresión3)
Si expresión1 no es NULL, la funcion retorna expresión2, Si expresión1 es
NULL, la funcion retorna expresión3 .
USER
Entrega nombre del usuario en la sesión actual.
Pagina 76
ORACLE
Laboratorio 06:
1. Resuelva la siguiente operación.
2. Agregar un trimestre a la fecha del sistema.
3. Redondear el siguiente número a 2 decimales 563.256
4. Mostrar el mes actual en texto.
5. Calcular su edad actual.
Pagina 77
ORACLE
Funciones de agregación y
agrupamiento de datos
Funciones de agregación
Son funciones que permite efectuar una operación aritmética que resume los
valores de una columna de toda la tabla o que resume los valores de una
columna agrupados según determinado criterio.
La función produce un solo valor que es el resumen de la tabla, o de cada una
de los grupos.
Función
AVG()
COUNT()
MAX()
MIN()
SUM()
Descripción
Retorna el promedio de los valores de una columna o
expresión.
Retorna la cuenta del número de filas de una consulta.
Retorna el valor máximo de una columna o expresión.
Retorna el valor mínimo de una columna o expresión.
Retorna la suma de los valores de una columna o expresión.
Puede usar las funciones de agregación con la declaración SELECT o en
combinación con la cláusula GROUP BY.
Utilizando el esquema COMERCIAL.
Uso de la función AVG()
Sintaxis
AVG ( [DISTINCT ] Expresión_Numerica)
DISTINCT indica que debe eliminarse los valores duplicados de
Expresión_Numerica antes de evaluar la función.
Ejemplo: Obtener el precio promedio de los productos.
SELECT AVG(PRE_PRO) AS PRECIO FROM PRODUCTO;
Pagina 78
ORACLE
Ejemplo: Obtener el precio promedio de los productos de la línea AUDIO.
SELECT AVG(PRE_PRO) AS PRECIO FROM PRODUCTO
WHERE COD_LIN='L008';
Ejemplo: Obtener el stock promedio de los productos cuyo precio sea mayor
a 600.
SELECT AVG(STO_ACT)AS STOCK FROM PRODUCTO
WHERE PRE_PRO > 600;
Uso de la función COUNT()
Sintaxis
COUNT ( [DISTINCT ] Expresión)
COUNT ( * )
DISTINCT indica que debe eliminarse los valores duplicados de la Expresión
antes de evaluar la función.
COUNT (Expresion) Ignora los valores NULL de expresión; COUNT (*) se utiliza
para contar filas, por lo que no ignora los valores NULL.
Ejemplo: Cuenta los productos registrados.
SELECT COUNT(*) AS PRODUCTO FROM PRODUCTO;
Uso de las funciones MAX () Y MIN ()
Pagina 79
ORACLE
Sintaxis
MAX (Expresión)
MIN (Expresión)
Expresión: indica los valores para los que se debe hallar el máximo y
mínimo valor.
Ejemplo: Stock mas alto y stock mas bajo.
SELECT MAX(STO_ACT) AS "STOCK MAXIMO", MIN(STO_ACT) AS
"STOCK MINIMO" FROM PRODUCTO;
Ejemplo: Nombre del primer producto y del ultimo producto.
SELECT MIN(NOM_PRO)AS "PRODUCTO MIN" ,MAX(NOM_PRO) AS
"PRODUCTO MAX" FROM PRODUCTO;
Uso de la función SUM ()
Pagina 80
ORACLE
Sintaxis
SUM ( [DISTINCT ] Expresión)
DISTINCT indica que debe eliminarse los valores duplicados de la Expresión
antes de evaluar la función.
Ejemplo: Stock total de los productos.
SELECT SUM(STO_ACT)AS "TOTAL STOCK" FROM PRODUCTO;
Ejemplo: Stock total de los productos que son de la línea AUDIO.
SELECT SUM(STO_ACT)AS "TOTAL STOCK" FROM PRODUCTO
WHERE COD_LIN='L008';
Pagina 81
ORACLE
Cláusula GROUP BY
Se utiliza para agrupar las filas en base a determinado criterio, y luego
ejecutar una operación que resume un atributo para cada uno de los grupos
así formados.
Sintaxis
SELECT lista_columnas, funcion_agregacion(columna),
funcion_agregacion(columna),
FROM n_tabla
[ WHERE condicion_filas ]
GROUP BY lista_columnas
[ HAVING condicion_grupos ]
Las columnas presentes en lista_columnas de la clausula GROUP BY deben
necesariamente estar presentes en la lista_columnas de SELECT.

Cualquier columna presente en SELECT, y que no se encuentre en la
lista_columnas de GROUP BY debe estar afectada por una función
de agregación.

condicion_grupos en la clausula HAVING permite establecer una
expresión logica que indica que los grupos a mostrar en el resultado son
aquellos para los que el valor de la expresión es verdadero.

Una consulta GROUP BY solo entrega una fila por cada grupo
generado. Esta fila muestra el resultado de la funcion_agregacion
aplicada sobre el grupo. No muestra el contenido del grupo.

Cuando se utiliza GROUP BY sobre una columna que contiene valores
NULL, estos se procesan como grupo.
Pagina 82
ORACLE
Ejemplo: Cantidad de productos registrados por cada línea.
SELECT COD_LIN AS LINEA,COUNT(COD_PRO)AS PRODUCTO
FROM PRODUCTO
GROUP BY COD_LIN;
Cláusula GROUP BY con el operador CUBE
Resume los valores de grupos. El operador CUBE se usa normalmente para
producir promedios acumulados o sumas acumuladas.
Ejemplo: GROUP BY agrupa las filas de la tabla PRODUCTO en base a la
combinación de los valores de las columnas, COD_LIN y para cada una de las
combinaciones obtenidas calcula el promedio de columna PRE_PRO.
SELECT COD_LIN AS LINEA,AVG(PRE_PRO)AS "PRECIO PROMEDIO"
FROM PRODUCTO
GROUP BY CUBE(COD_LIN)
ORDER BY COD_LIN;
Pagina 83
ORACLE
Uso de GROUP BY con el operador GROUPING SETS
Permite que una sola consulta GROUP BY se presente grupos formados por
distintas combinaciones de atributos.
Uso del operador GROUPING SETS
Este ejemplo muestra la suma acumulada del STO_ACT para tres
combinaciones de atributos.
 (COD_LIN, COD_PRV, PRE_PRO)
 (COD_LIN, PRE_PRO)
 (COD_PRV, PRE_PRO)
SELECT COD_LIN,COD_PRV,PRE_PRO,SUM(STO_ACT) AS "STOCK
ACTUAL" FROM PRODUCTO
GROUP BY GROUPING SETS(
(COD_LIN,COD_PRV,PRE_PRO),
(COD_LIN,PRE_PRO),
(COD_PRV,PRE_PRO))
ORDER BY COD_LIN,COD_PRV,PRE_PRO;
Pagina 84
ORACLE
Uso de la condición HAVING ()
Cuando ejecutamos una consulta GROUP BY es posible establecer un filtro de
grupos utilizando la cláusula HAVING.
Ejemplo: GROUP BY agrupa las filas de la tabla PRODUCTO en base a la
combinación de los valores de las columnas, COD_LIN y COD_MAR, y para
cada una de las combinaciones obtenidas calcula el promedio de columna
PRE_PRO. Luego, filtra los grupos para mostrar solo aquellos definidos.
SELECT COD_LIN AS LINEA,COD_MAR AS MARCA,AVG(PRE_PRO)AS
"PRECIO PROMEDIO" FROM PRODUCTO
GROUP BY CUBE(COD_LIN,COD_MAR)
HAVING COD_LIN='L005';
ORDER BY COD_LIN,COD_MAR;
Pagina 85
ORACLE
Laboratorio 07:
Utilizando el esquema COMERCIAL.
1. Mostrar el precio promedio de todos productos que sean de tipo
DIGITAL.
2. Incrementar el código del cliente más 1.
3. Mostrar el total del stock de los productos que pertenecen a la línea
ESCRITORIO.
4. Mostrar el total del stock de los productos por línea que sea menor a
150 unidades.
5. Mostrar el precio total de las líneas de productos que estén entre 1000
a 6000 soles.
Pagina 86
ORACLE
6. Mostrar los productos que se repitan y que cantidad
7. Mostrar el precio máximo a la raíz cuadrada, mostrando solo dos
decimales.
8. Mostrar el total de stock por cada línea de producto, si el stock es
mayor a 200 unidades muestra un mensaje en el siguiente campo
STOCK SUFICIENTE de lo contrario STOCK INSUFICIENTE.
9. Mostrar la cantidad de los productos más 1.
10.Mostrar el precio mínimo, el stock máximo y la cantidad de productos.
11.Mostrar los productos, donde realice cálculo del precio por cantidad (5
unidades) me da el importe, donde muestre los productos cocina y que
el importe sea mayor a 3000 soles y que sea de la marca INDURAMA.
Pagina 87
ORACLE
Consultas multitablas
Consultas correlacionadas
Un Join, combinación o consulta correlacionada es la consulta que selecciona
columnas de dos tablas o conjunto de filas, y las entrega en un único conjunto
de resultados. Las filas de las tablas o conjunto de filas se combinan
relacionando valores comunes, típicamente de clave primaria y clave foránea.
Sintaxis
SELECT lista_columnas
FROM tabla1
tipo_join JOIN tabla2 ON condicion_del_join

lista_columnas es la lista de columnas a mostrar en el resultado de la
consulta. Se recomienda que cada columna se calificada con alias de la
tabla a la cual pertenece.

tipo_join indica si el join es interior (INNER), exterior (OUTER) o
irrestricto (CROSS).

condicion_del_join es una expresión que indica en base a que
columnas de cada una de las tablas se establece la relación entre ellas.
Una combinación (join) puede ser cualquiera de los siguientes tipos.
 INNER JOIN
 OUTER JOIN
LEFT OUTER JOIN
RIGHT OUTER JOIN
FULL OUTER JOIN
 CROSS JOIN
INNER JOIN.
Un INNER JOIN es la consulta correlacionada que combina todas las filas que
están relacionadas de las dos tablas o conjunto de filas.
Pagina 88
ORACLE
Uso del INNER JOIN.
Mostrar los nombres de los distritos de la tabla cliente que vivan en LIMA.
SELECT CLIENTE.COD_CLI AS
CODIGO,CLIENTE.RAZON_SOCIAL,CLIENTE.RUC_CLI AS
RUC,DISTRITO.NOM_DIS AS DISTRITO FROM CLIENTE
INNER JOIN DISTRITO ON CLIENTE.COD_DIS=DISTRITO.COD_DIS
WHERE DISTRITO.NOM_DIS='LIMA';
Usando el alias como referencia a las tablas.
SELECT C.COD_CLI AS CODIGO,C.RAZON_SOCIAL,C.RUC_CLI AS
RUC,D.NOM_DIS AS DISTRITO FROM CLIENTE C
INNER JOIN DISTRITO D ON C.COD_DIS=D.COD_DIS
WHERE D.NOM_DIS='LIMA';
Pagina 89
ORACLE
Uso del INNER JOIN con 3 tablas.
Mostrar los datos de la tabla comprobante, que se ha el numero CP00000004,
que tipo de comprobante es, así como el importe.
SELECT COMPROBANTE.NUM_COMP AS
NUMERO,TIPOCOMPROBANTE.NOM_TIC AS
COMPROBANTE,COMPROBANTE.FECHA_EMISION AS FECHA,
SUM(DETALLE.PRECIO * DETALLE.CANT) AS IMPORTE
FROM COMPROBANTE
INNER JOIN DETALLE ON
COMPROBANTE.NUM_COMP=DETALLE.NUM_COMP
INNER JOIN TIPOCOMPROBANTE ON
COMPROBANTE.COD_TIC=TIPOCOMPROBANTE.COD_TIC
GROUP BY
COMPROBANTE.NUM_COMP,TIPOCOMPROBANTE.NOM_TIC,COMP
ROBANTE.FECHA_EMISION
HAVING COMPROBANTE.NUM_COMP='CP00000004';
Uso del OUTER JOIN
Un OUTER JOIN es la consulta correlacionada que entrega todas las filas
que están relacionadas, y además.
Las filas no relacionadas de la tabla izquierda (LEFT OUTER JOIN)
Las filas no relacionadas de la tabla derecha (RIGHT OUTER JOIN)
Las filas no relacionadas de ambas tablas (FULL OUTER JOIN)
Se considera como la tabla izquierda, a aquella que se menciona primero en
la cláusula FROM.
Pagina 90
ORACLE
Mostrar los productos que han sido vendidos.
SELECT PRODUCTO.COD_PRO AS CODIGO,PRODUCTO.NOM_PRO
AS PRODUCTO,DETALLE.CANT FROM PRODUCTO
LEFT OUTER JOIN DETALLE ON
PRODUCTO.COD_PRO=DETALLE.COD_PRO
WHERE NOT DETALLE.CANT IS NULL;
Uso de CROSS JOIN
Es una consulta correlacionada que combina cada una de la filas de una de las
tablas con cada una de las filas de la otra tabla.
No es necesario que exista una columna en común para ejecutar un CROSS
JOIN. Esta consulta también se le conoce como el producto cartesiano de
dos tablas.
Pagina 91
ORACLE
SELECT
MARCA.COD_MAR,MARCA.NOM_MAR,PRODUCTO.COD_PRO,PROD
UCTO.NOM_PRO FROM MARCA
CROSS JOIN PRODUCTO;
Operador UNION
Sintaxis
Sentencia_SELECT_1
UNION [ALL]
Sentencia_SELECT_2
UNION [ALL]
Sentencia_SELECT_3
El operador UNION une los resultados de dos o más instrucciones SELECT en
un solo conjunto de resultados.
Use el operador UNION cuando los datos que desea recuperar residen en
diferentes localizaciones y no puede acceder a ellos con una sola consulta.
Cuando use el operador UNION considere los siguiente.

SQL Server requiere que las consultas a las tablas referenciadas tenga
el mismo número de columnas, los mismos tipos de datos, y que las
columnas se encuentren en el mismo orden en la lista de cada uno de
los SELECT.
Pagina 92
ORACLE



SQL Server elimina las filas duplicadas en el resultado. Sin embargo, si
usa la opción ALL, todas las filas (incluso las duplicadas) son incluidas
en el resultado.
Debe especificar los nombres de las columnas en la primera instrucción
SELECT. Por consiguiente, si quiere definir los nuevos títulos de las
columnas para el resultado, debe crear los seudónimos de las columnas
en la primera instrucción SELECT.
Si quiere que el resultado completo sea devuelto en un orden
especifico, debe especificar el orden e incluir la cláusula ORDER BY
dentro de la sentencia UNION.
Uso del operador UNION
SELECT COD_PRO,PRE_PRO FROM PRODUCTO
UNION
SELECT COD_PRO,PRECIO FROM DETALLE;
Pagina 93
ORACLE
Para explicar como trabaja el operador UNION ALL y además los operadores
INTERSECT y MINUS, vamos a crear dos pequeñas tablas con algunos datos.
Crear la tabla OPERARIOS
CREATE TABLE OPERARIOS
(IDOPERARIO VARCHAR2(4),
NOMBRE VARCHAR2(15));
Insertando 5 registros
INSERT INTO OPERARIOS
INSERT INTO OPERARIOS
INSERT INTO OPERARIOS
INSERT INTO OPERARIOS
INSERT INTO OPERARIOS
VALUES('0967','ANTONIO');
VALUES('0245','NANCY');
VALUES('0376','CARLOS');
VALUES('0879','ROSA');
VALUES('0147','MARCOS');
Crear la tabla SUPERVISORES
CREATE TABLE SUPERVISORES
(IDSUPERVISOR VARCHAR2(4),
NOMBRE VARCHAR2(15));
Insertando 2 registros
INSERT INTO SUPERVISORES VALUES('0376','CARLOS');
INSERT INTO SUPERVISORES VALUES('0713','GUMERCINDO');
Ejecución de UNION
SELECT IDSUPERVISOR AS EMPLEADO,NOMBRE
FROM SUPERVISORES
UNION
SELECT IDOPERARIO,NOMBRE
FROM OPERARIOS;
Pagina 94
ORACLE
Ejecución de UNION ALL
SELECT IDSUPERVISOR AS EMPLEADO,NOMBRE
FROM SUPERVISORES
UNION ALL
SELECT IDOPERARIO,NOMBRE
FROM OPERARIOS;
Uso del operador INTERSECT
El operador INTERSECT, al igual que el operador UNION, permite procesar
filas de dos consultas. INTERSECT entrega las filas que son comunes a las
dos consultas.
SELECT IDSUPERVISOR AS EMPLEADO,NOMBRE
FROM SUPERVISORES
INTERSECT
SELECT IDOPERARIO,NOMBRE
FROM OPERARIOS;
Pagina 95
ORACLE
Uso del operador MINUS
El operador MINUS construye una relación de filas formado por las filas que
aparecen en el primer conjunto, pero que no aparecen en el segundo
conjunto.
SELECT IDOPERARIO AS EMPLEADO,NOMBRE
FROM OPERARIOS
MINUS
SELECT IDSUPERVISOR,NOMBRE
FROM SUPERVISORES;
Consulta AUTOJOIN
Es una consulta correlacionada en la que una tabla se combina consigo misma
para generar un nuevo conjunto de resultado.
Para generar un ejemplo crearemos una tabla que tenga autorelacion. Esta
tabla contiene clave foránea que apunta a la clave primaria en la misma
tabla.
Crear la tabla TRABAJADOR, establecer clave primaria.
CREATE TABLE TRABAJADOR
(IDTRABAJADOR NUMBER PRIMARY KEY,
APELLIDOS VARCHAR2(30)NOT NULL,
JEFE NUMBER NULL);
Estableciendo clave foránea.
ALTER TABLE TRABAJADOR
ADD CONSTRAINT FK_TRABAJADOR_TRABAJADOR
FOREIGN KEY(JEFE) REFERENCES TRABAJADOR;
Pagina 96
ORACLE
Insertando 7 registros.
INSERT INTO TRABAJADOR
INSERT INTO TRABAJADOR
SARAVIA',102);
INSERT INTO TRABAJADOR
INSERT INTO TRABAJADOR
INSERT INTO TRABAJADOR
INSERT INTO TRABAJADOR
INSERT INTO TRABAJADOR
VALUES(102,'ARDILES SOTO',NULL);
VALUES(101,'CAMACHO
VALUES(105,'VILCHEZ SANTOS',102);
VALUES(103,'SANCHEZ ALIAGA',101);
VALUES(104,'CASTRO AVILA',101);
VALUES(107,'URRUNAGA TAPIA',101);
VALUES(106,'JUAREZ PINTO',105);
Ejemplo: crear una consulta que muestre una lista de trabajadores. La lista
debe mostrar apellidos del jefe de cada trabajador.
SELECT T1.IDTRABAJADOR,T1.APELLIDOS,T2.APELLIDOS AS JEFE
FROM TRABAJADOR T1 INNER JOIN TRABAJADOR T2
ON T1.JEFE= T2.IDTRABAJADOR;
Modifique la consulta para que
también se muestre al
trabajador 102.
SELECT T1.IDTRABAJADOR,T1.APELLIDOS,T2.APELLIDOS AS JEFE
FROM TRABAJADOR T1 LEFT OUTER JOIN TRABAJADOR T2
ON t1.jefe= t2.idtrabajador;
Pagina 97
ORACLE
Subconsultas
Una subconsulta es una declaración SELECT anidada dentro de una sentencia
SELECT, INSERT, UPDATE o DELETE o dentro de otra subconsulta.
Las consultas son de los tipos siguientes:
Subconsulta que entrega un solo valor (1 fila, 1 columna)
Subconsulta que entrega un conjunto de valores (varias filas, 1 columna)
Una subconsulta se especifica entre paréntesis.
Test de pertenencia
SELECT COD_PRO,NOM_PRO FROM PRODUCTO
WHERE COD_PRO NOT IN(SELECT COD_PRO FROM DETALLE)
ORDER BY COD_PRO;
Pagina 98
ORACLE
Test de existencia – uso de EXISTS
Productos que han sido vendidos.
SELECT PRODUCTO.COD_PRO, PRODUCTO.NOM_PRO
FROM PRODUCTO
WHERE EXISTS(SELECT *FROM DETALLE
WHERE PRODUCTO.COD_PRO=DETALLE.COD_PRO);
Pagina 99
ORACLE
Inserción de filas con datos leídos por SELECT.
Sintaxis
INSERT [INTO] tabla_destino
SELECT lista_columnas
FROM tabla_origen
[WHERE condicion_filas_tabla_origen]
Inserción de filas.
Antes de empezar, crearemos una tabla.
CREATE TABLE TABLA_PRUEBA
(DISTRITO VARCHAR2(60));
Ahora insertaremos los datos de la tabla distrito a la tabla
tabla_prueba.
INSERT INTO TABLA_PRUEBA
SELECT NOM_DIS FROM DISTRITO;
Ahora revisemos la tabla TABLA_PRUEBA.
SELECT *FROM TABLA_PRUEBA;
Pagina 100
ORACLE
Laboratorio 08:
Utilizando el esquema COMERCIAL.
1. Mostrar los productos que sean de la línea MUSICA.
2. Mostar el cargo del personal, su nombre del personal que emitió
el comprobante numero CP00000001.
3. Mostrar los productos que su proveedor se a del país de MEXICO.
4. Mostrar el proveedor de los productos vendidos.
Pagina 101
ORACLE
5. Mostrar todos los clientes que todavía no han generado alguna compra.
6. Mostrar el total de los importes vendidos de la línea MUSICA.
7. Mostrar los productos procedentes del país de MEXICO y que no sean de
la marca SAMSUNG.
8. Mostrar el total redondeado de las compras por cada cliente.
9. Mostrar el total del precio por cada línea, que sea mayor a los 4000.
Pagina 102
ORACLE
10.Mostrar que tipo de
comprobante, número
del día, nombre del
mes que han sido
emitidos.
11.Mostrar el código del producto más 1.
12.Mostrar los productos vendidos que sean de la línea VIDEO.
13.Mostrar los comprobantes emitidos de los clientes que sean del
distrito de LIMA y que su razón social se a S.A.
Pagina 103
ORACLE
14.Mostrar los productos vendidos, el stock actual, el precio por unidad, y
el precio de todo el stock actual.
15.Mostrar el personal donde su teléfono no empiece con el número 3 y
que sea del distrito de ATE.
16.Mostrar los productos que en el penúltimo carácter sea 3 y que sean de
la marca MIRAY.
17.Mostar los productos donde usted pueda obtener la ganancia liquida de
los productos DVD, de la línea AUDIO, y la ganancia se mayor a 45.
Pagina 104
ORACLE
18.Mostrar el total de ventas por meses.
19.Mostrar el total de ventas por distrito, y que cantidad por distrito.
20.Mostrar la descripción de los tipos de comprobantes.
21.Mostrar los proveedores que pertenecen a la línea AUDIO.
22.Modificar la ciudad, estado del proveedor CORPORACION LIGHT GOOD.
23.Modificar los apellidos, nombres del cliente CLINICA SAN LUCAS S.A.
Pagina 105
ORACLE
24.Mostrar los clientes que
todavía no han generado
alguna compra, y que en
el distrito tenga la letra O.
25.Mostrar los productos que sean de la línea LINEA BLANCA, y que el stock
este entre 10 y 20.
26.Incrementar el stock máximo del producto con 30 unidades a la línea
MAQUINAS DE COSER.
Pagina 106
ORACLE
Pagina 107
ORACLE
Las vistas
Una vista es un objeto que almacena una consulta predefinida y que
proporciona un modo alternativo de visualización de datos sin tener que
redefinir la consulta.
Ejemplo:
Un subconjunto de filas o columnas de una tabla base.
Una unión de dos tablas o mas tablas base.
Un join de dos o más tablas.
Un resumen estadístico de una tabla base.
Un subconjunto de otra vista, o alguna combinación de vistas y tablas base.
Antes de poder crear una vista debemos conceder los permisos necesarios
para crear una vista.
GRANT CREATE VIEW, DROP ANY VIEW TO COMERCIAL;
Ejemplo de vista
CREATE VIEW V_LISTA_PRODUCTO
AS
SELECT L.NOM_LIN AS LINEA,P.NOM_PRO AS
PRODUCTO,P.PRE_PRO AS
PRECIO FROM PRODUCTO P
LEFT OUTER JOIN LINEA L ON P.COD_LIN=L.COD_LIN;
Ahora ejecuta la vista
SELECT *FROM V_LISTA_PRODUCTO
WHERE LINEA='MUSICA';
Pagina 108
ORACLE
Observe que para ejecutar la vista se utiliza la instrucción SELECT. Una vista
se manipula como si fuera una tabla; es decir, que se puede aplicar las
declaraciones SELECT, INSERT, UPDATE y DELETE. Sin embargo, no debe ver la
vista como una tabla, sino pensar en ella como un programa que ejecuta una
sola instrucción.
Ventajas de una vista
El usuario accede a la data importante o apropiada para el. Limita el
acceso a datos sensibles.
Oculta la complejidad del modelo de datos. Un Join de múltiples tablas
convierte en un simple SELECT para el usuario.
Desde el punto de vista del usuario, una vista es una “tabla” pues puede
ejecutar en ella todas las operaciones de datos: SELECT, INSERT, UPDATE y
DELETE.
Debido a que una vista es un objeto de la base de datos, puede asignarle
permisos de usuario. Esto es mucho más eficiente que colocar los mismos
permisos sobre columnas individuales en una tabla.
Sintaxis:
CREATE [ OR REPLACE ] [ FORCE | NOFORCE ] VIEW
nombre_vista [ ( lista_columnas ) ]
AS
sentencia_select
[ WITH CHECK OPTION ]
[ WITH READ ONLY ];
OR REPLACE indica que si la vista ya existe, debe ser remplazada por la nueva
definición de la tabla.
FORCE | NOFORCE indica que se debe verificar la existencia de las tablas
base antes de crear la vista. NOFORCE indica que la vista solo se debe crear si
las tablas bases existen (opción predeterminada). FORCE crea la vista aun si
las tablas base no existen.
WITH CHECK OPTION indica que si la definición de la vista contiene la
cláusula WHERE, y la vista se utiliza para operaciones de mantenimiento de
datos, estas operaciones deben respetar la condición definida en el WHERE.
WITH READ ONLY indica que la vista solo permite consultas solo se
puede ejecutar SELECT sobre la vista, y no puede ejecutarse INSERT, UPDATE
ni DELETE.
Pagina 109
ORACLE
Eliminación de una vista
Sintaxis:
DROP VIEW nombre _ vista;
Eliminación de una vista.
DROP VIEW V_LISTA_PRODUCTO;
Uso de WITH CHECK OPTION
Ejemplo de vista
CREATE VIEW V_LISTA_PRODUCTO_MUSICA
AS
SELECT L.NOM_LIN AS LINEA,P.NOM_PRO AS
PRODUCTO,P.PRE_PRO AS
PRECIO FROM PRODUCTO P
LEFT OUTER JOIN LINEA L ON P.COD_LIN=L.COD_LIN
WHERE L.NOM_LIN='MUSICA'
WITH CHECK OPTION;
Ahora ejecuta la vista
SELECT *FROM V_LISTA_PRODUCTO_MUSICA;
Pagina 110
ORACLE
Laboratorio 09:
Utilizando el esquema COMERCIAL.
1. Mostrar los productos.
2. Crear 7 vistas, utilice el esquema comercial (utilice JOINS, función
(agregación, criterios de búsqueda), etc.).
Nota: las vistas son independientes, no copie.
Pagina 111
ORACLE
Fundamentos de PL/SQL
SQL es un lenguaje de consulta para los sistemas de bases de datos
relaciónales, pero que no posee la potencia de los lenguajes de programación.
No permite el uso de variables, estructuras de control de flujo, bucles... y
demás elementos característicos de la programación. No es de extrañar, SQL
es un lenguaje de consulta, no un lenguaje de programación.
Sin embargo, SQL es la herramienta ideal para trabajar con bases de
datos. Cuando se desea realizar una aplicación completa para el manejo de
una base de datos relacional, resulta necesario utilizar alguna herramienta
que soporte la capacidad de consulta del SQL y la versatilidad de los lenguajes
de programación tradicionales. PL/SQL es el lenguaje de programación que
proporciona Oracle para extender el SQL estándar con otro tipo de
instrucciones y elementos propios de los lenguajes de programación.
Con PL/SQL vamos a poder programar las unidades de programa de la base de
datos ORACLE, están son:





Bloque anónimo
Procedimientos almacenados
Funciones
Triggers
Paquetes
Pagina 112
ORACLE
Bloque anónimo
Es la unidad básica de la programación en PL/SQL.
Sintaxis:
DECLARE
BEGIN
EXECEPTION
END;
BEGIN es un elemento obligatorio y define el inicio de la sección al ejecutable
del bloque que incluye las sentencias PL/SQL que el bloque debe ejecutarse.
DECLARE es una sección opcional y define objetos tales como variables
constantes, cursores, y excepciones definidas por el usuario a los que se hará
referencia dentro del bloque.
EXCEPTION define los manejadores de errores que soporta el bloque.
END es un elemento obligatorio y define el final del bloque.
Ejemplo del bloque anónimo:
Mostrar la fecha del sistema
DECLARE
V_FECHA DATE;
BEGIN
SELECT SYSDATE INTO V_FECHA FROM DUAL;
dbms_output.put_line('FECHA : ' || V_FECHA);
END;
Pagina 113
ORACLE
Pagina 114
ORACLE
Laboratorio 10:
1.
2.
3.
4.
Mostrar el igv como una constante.
Mostrar PI como una constante.
Crear un bloque anónimo donde muestre su edad actual.
Crear 5 bloques anónimos.
Nota: los bloques anónimos son independientes, no copie.
Pagina 115
ORACLE
Declaración de variables
Son elementos de lenguajes que se define en la memoria del sistema a los que
se pueden asignar valores para luego usarlos posteriormente.
Sintaxis
nombre_variable tipo_dato
[CONSTANT] [NOT NULL] [:=Valor];
nombre_variable: es el identificador de la variable.
tipo_dato: es cualquier tipo de dato.
CONSTANT: indica la definición de una constante. El valor no puede cambiar.
NOT NULL: indica que la variable debe ser inicializada obligatoriamente.
Valor: si una variable no es inicializada entonces toma el valor nulo como
valor inicial.
Ejemplo:
Declare nombre VARCHAR2 (60);
Uso de %TYPE
Este operador permite declarar una variable del mismo tipo que la otra
variable constante o columna.
Sintaxis
nombre_variable identificador%type;
nombre_variable: es el identificador de la variable.
Identificador: es el nombre de la variable, constante o columna que define el
tipo de dato o variable a declarar
Ejemplo:
Declare dFecha comprobante.fechaEmision%TYPE;
Pagina 116
ORACLE
Asignación de valores a variables
Hay dos formas de asignar valor a una variable:
Utilizando el operador de asignación
Utilizando la instrucción Select.
Sintaxis
nombre_variable :=valor;
nombre_variable: es el identificador de la variable.
Valor: es una expresión cuyo resultado se asigna a la variable.
Ejemplo:
v_Nombre := ’JUAN PABLO’;
n_Stock := 50;
Usando la instrucción Select
Sintaxis
SELECT columnaX columnaP
INTO variableX, variableP
FROM tabla WHERE condición;
columnaX, columnaP: son valores que lee la consulta.
variableX, variableP: son valores que almacenan los valores leídos.
Ejemplo:
SELECT SUM(precio * cantidad) INTO dImporte
FROM Comprobante_Detalle
WHERE numero_comprobante=25010;
Pagina 117
ORACLE
Procedimiento
Un bloque se puede almacenar como un objeto de la base de datos de modo
de modo que se puede ejecutar repetidamente invocándolo con la instrucción
EXECUTE. El bloque se puede almacenar como procedimiento o función.
Sintaxis
CREATE [ OR REPLACE ] PROCEDURE nombre_procedimiento
(parametro1 [ modo_parametro1 ] tipo_dato1,
parametro2 [ modo_parametro2 ] tipo_dato2,
…...)
IS | AS
BEGIN
EXECEPTIONS
END;
parametro1, parametro2 define los parámetros del procedimiento.
modo_parametro1, modo_parametro2 indica si el parámetro es de entrada
(IN), de la salida (OUT), o de entrada o salida (IN OUT), el modo
predeterminado es IN.
tipo_dato1, tipo_dato2 define el tipo de datos del parámetro.
La sección de declaraciones de un procedimiento no tiene la palabra
reservada DECLARE.
Pagina 118
ORACLE
Ejemplo:
Mostrar el monto total del comprobante CP00000002
CREATE OR REPLACE PROCEDURE USP_MONTO_COMPROBANTE
(C_COMPROBANTE CHAR)
AS
N_MONTO NUMBER(9,2);
BEGIN
SELECT SUM(PRECIO * CANT) INTO N_MONTO FROM DETALLE
WHERE NUM_COMP=C_COMPROBANTE;
dbms_output.put_line('MONTO: ' || N_MONTO);
END;
El procedimiento recibirá como parámetro un número de comprobante en la
variable C_COMPROBANTE. Luego calcula el monto de dicho comprobante, y
el resultado lo almacena en la variable N_MONTO. Finalmente muestra el
resultado en la variable N_MONTO.
Ejecute el procedimiento. (F9)
EXECUTE USP_MONTO_COMPROBANTE('CP00000002');
Pagina 119
ORACLE
Función
Una función es similar a un procedimiento con la diferencia que la función
retorna siempre un valor.
Sintaxis:
CREATE [ OR REPLACE ] FUNCTION nombre_funcion
(parametro1 [ modo_parametro1 ] tipo_dato1,
parametro2 [ modo_parametro2 ] tipo_dato2,
…...)
RETURN tipo_dato_valor_retorno
IS | AS
BEGIN
EXECEPTIONS
END;
parametro1, parametro2 define los parámetros del procedimiento.
modo_parametro1, modo_parametro2 indica si el parámetro es de entrada
(IN), de la salida (OUT), o de entrada o salida (IN OUT), el modo
predeterminado es IN.
tipo_dato1, tipo_dato2 define el tipo de datos del parámetro.
Pagina 120
ORACLE
Ejemplo:
Mostrar el monto total del comprobante CP00000002
CREATE OR REPLACE FUNCTION FN_MONTO_COMPROBANTE
(C_COMPROBANTE CHAR)
RETURN NUMBER
AS
N_MONTO NUMBER(9,2);
BEGIN
SELECT SUM(PRECIO * CANT)INTO N_MONTO FROM DETALLE
WHERE NUM_COMP=C_COMPROBANTE;
RETURN N_MONTO;
END;
Ejecute la función. (F9)
SELECT FN_MONTO_COMPROBANTE('CP00000002') AS MONTO
FROM DUAL;
Pagina 121
ORACLE
Laboratorio 11:
Utilizando el esquema COMERCIAL.
1. Crear una vista donde muestre los continentes de los proveedores, solo
mostrar los proveedores que sean de los continentes ASIA y EUROPA.
2. Crear un bloque anónimo donde pueda insertar una nueva línea, donde
el código de la línea se tiene que incrementar.
3. Crear una función donde muestre el total del mes de marzo.
4. Crear una función donde se pueda obtener el número al cubo de 5 o n
número.
5. Crear un Store Procedure donde pueda insertar un nuevo cargo, donde
el código del cargo se tiene que incrementar.
6. Crear un Store Procedure donde pueda actualizar los datos de tabla
cliente.
7. Crear un Store Procedure donde pueda eliminar la nueva línea
ingresada.
8. Crear un Store Procedure donde pueda cargar toda la data de la tabla
personal y testearla en Visual Studio.Net (Visual Basic)
9. Genere un mantenimiento a la tabla cliente en Visual Studio.Net (Visual
Basic).
10.Generar un vista y testearlo en Visual Studio.Net (Visual Basic)
Pagina 122
ORACLE
Estructuras de control de flujo
Se tiene 2 estructuras de control básicas: los condicionales, que permiten
ejecutar un conjunto de instrucciones u otro en función del valor de una
expresión lógica; y los bucles, que permiten la ejecución repetitiva de un
conjunto de instrucciones.
El condicional IF
Caso 01: ejecución condicional de un grupo de instrucciones
Sintaxis:
IF (expresión_logica) THEN
END IF;
El conjunto de instrucciones entre IF y END IF se ejecuta solo si la
expresión_logica es verdadera (TRUE).
Caso 02: ejecución condicional de un grupo de instrucciones o de otro grupo
de instrucciones alternativo
Sintaxis:
IF (expresión_logica) THEN
ELSE
END IF;
El conjunto de instrucciones entre IF y ELSE se ejecuta solo si la
expresión_logica es verdadera (TRUE). El conjunto de instrucciones entre
ELSE y END IF se ejecuta cuando la expresión_logica se evalúa a FALSE o
NULL.
Pagina 123
ORACLE
Caso 03: ejecución condicional de un grupo de instrucciones entre muchos
grupos de instrucciones
Sintaxis:
IF (expresión_logica1) THEN
ELSEIF (expresion_logica2) THEN
ELSEIF (expresion_logica3) THEN
ELSE
END IF;
En este caso, si la expression_logica1 se evalúa a FALSE o NULL, la clausula
ELSEIF prueba la expresion_logica2; si esta resulta TRUE, se ejecuta el
conjunto de instrucciones entre este ELSEIF y el siguiente; en caso contrario,
se evalúa la expresión_logica3.
Pagina 124
ORACLE
Ejemplo:
Crear una función que evalué el stock actual del producto, comparando con el
stock mínimo.
CREATE OR REPLACE FUNCTION FX_EVALUCION_STOCK
(C_COD_PRO PRODUCTO.COD_PRO%TYPE)
RETURN CHAR
AS
N_STOCK_ACTUAL PRODUCTO.STO_ACT%TYPE;
N_STOCK_MINIMO PRODUCTO.STO_MIN%TYPE;
V_MENSAJE VARCHAR2(50);
BEGIN
SELECT STO_ACT,STO_MIN
INTO N_STOCK_ACTUAL,N_STOCK_MINIMO FROM PRODUCTO
WHERE COD_PRO=C_COD_PRO;
IF(N_STOCK_ACTUAL < N_STOCK_MINIMO) THEN
V_MENSAJE :='HAY QUE REPONER MERCADERIA';
END IF;
IF (N_STOCK_ACTUAL > N_STOCK_MINIMO)THEN
V_MENSAJE :='TENEMOS MERCADERIA';
END IF;
RETURN V_MENSAJE;
END;
Ahora procedemos a ejecutar.
SELECT FX_EVALUCION_STOCK ('P0000004') AS MENSAJE FROM
DUAL;
Pagina 125
ORACLE
El condicional CASE
Permite la ejecución de un conjunto de instrucciones en base al valor de una
variable o campo (el selector) o en base al valor de una expresión lógica.
Caso 01: ejecución condicional según el valor de una variable o campo
Sintaxis:
CASE selector
WHEN valor1 THEN
WHEN valor2 THEN
ELSE
END CASE;
Caso 02: ejecución condicional según el valor de un conjunto de expresiones
lógicas
Sintaxis:
CASE selector
WHEN expression_logica1 THEN
WHEN expression_logica2 THEN
ELSE
END CASE;
Pagina 126
ORACLE
Ejemplo:
Consulta muestra una lista de los proveedores con una columna computada
cuyo valor depende del valor encontrado en columna PAIS de la tabla
proveedor.
SELECT COD_PRV,RAZON_SOCIAL,
CASE PAIS
WHEN 'ESPAÑA' THEN 'CONTINENTE EUROPEO'
WHEN 'CHINA' THEN 'CONTINENTE ASIATICO'
WHEN 'MEXICO' THEN 'CONTINENTE AMERICANO'
ELSE
'FALTA ESTABLECER'
END AS CONDICION
FROM PROVEEDOR;
Pagina 127
ORACLE
Ejemplo:
Consulta califica el nivel de las unidades vendidas de los productos de la línea
L002.
SELECT P.COD_PRO,P.NOM_PRO,
CASE
WHEN SUM(D.CANT) < 20 THEN 'NIVEL MUY BAJO, < 20
UNIDADES'
WHEN SUM(D.CANT) >=20 AND SUM(D.CANT) < 35 THEN 'NIVEL
BAJO, < 20 UNIDADES'
END AS CONDICION
FROM PRODUCTO P
LEFT OUTER JOIN DETALLE D ON P.COD_PRO=D.COD_PRO
WHERE P.COD_LIN='L002'
GROUP BY P.COD_PRO,P.NOM_PRO;
Pagina 128
ORACLE
Ejemplo:
Función que establece si el precio del producto esta por encima o por debajo
del precio promedio de todos los productos.
CREATE OR REPLACE FUNCTION FX_PRECIO_ALTO_BAJO
(C_COD_PRO PRODUCTO.COD_PRO%TYPE)
RETURN CHAR
AS
N_PRE_PRO PRODUCTO.PRE_PRO%TYPE;
N_PRE_PRO_PROM PRODUCTO.PRE_PRO%TYPE;
V_MENSAJE VARCHAR2(60);
BEGIN
SELECT AVG(PRE_PRO)INTO N_PRE_PRO_PROM
FROM PRODUCTO;
SELECT PRE_PRO INTO N_PRE_PRO
FROM PRODUCTO
WHERE COD_PRO=C_COD_PRO;
CASE
WHEN (N_PRE_PRO > N_PRE_PRO_PROM) THEN
V_MENSAJE := 'PRECIO POR ENCIMA DEL PROMEDIO';
WHEN (N_PRE_PRO = N_PRE_PRO_PROM) THEN
V_MENSAJE := 'PRECIO PROMEDIO';
WHEN (N_PRE_PRO < N_PRE_PRO_PROM) THEN
V_MENSAJE := 'PRECIO POR DEBAJO DEL PROMEDIO';
END CASE;
V_MENSAJE := 'PRODUCTO: ' || C_COD_PRO || ' ' ||
TO_CHAR(N_PRE_PRO) || ' - ' || V_MENSAJE;
RETURN V_MENSAJE;
END;
Ahora procedemos a ejecutar.
SELECT FX_PRECIO_ALTO_BAJO ('P0000004') AS MENSAJE FROM
DUAL;
Pagina 129
ORACLE
Ejecución de una función o procedimiento utilizando el IDE de
Oracle SQL Developer
En el cuadro de dialogo Conexiones expanda el nodo Functions. Click derecho
del mouse sobre la función – Ejecutar.
Pagina 130
ORACLE
Observe que la función tiene un parámetro de entrada (IN) de nombre
C_COD_PRO, ubique el bloque del código la instrucción que inicializa el
parámetro.
El parámetro esta inicializado con valor NULL. Remplace este por el código
del producto.
En el cuadro de dialogo click en el botón Aceptar para ejecutar la función.
El bucle LOOP
Pagina 131
ORACLE
Permite ejecutar un conjunto de instrucciones en forma repetida. El número
de repeticiones se controla mediante un condicional definido en el bloque del
bucle.
Sintaxis:
LOOP
IF (expresion_logica) THEN
EXIT
END IF;
EXIT WHEN (expresion_logica)
END LOOP;
Ejemplo:
Calcula el factorial de N número.
CREATE OR REPLACE FUNCTION FX_FACTORIAL
(N_NUMERO NUMBER)
RETURN NUMBER
AS
N_FACTOR NUMBER :=1;
N_CONTROL NUMBER :=N_NUMERO;
BEGIN
LOOP
N_FACTOR := N_FACTOR * N_CONTROL;
N_CONTROL := N_CONTROL - 1;
EXIT WHEN (N_CONTROL=0);
END LOOP;
RETURN N_FACTOR;
END;
Ahora procedemos a ejecutar.
SELECT FX_FACTORIAL (5) AS MENSAJE FROM DUAL;
El bucle WHILE
Pagina 132
ORACLE
Permite ejecutar un conjunto de instrucciones en forma repetida. La
ejecución del bucle se controla evaluando una expresión lógica antes del
inicio de cada una de las repeticiones. Como la evaluación es previa a la
ejecución del conjunto de instrucciones se puede presentar una situación en
la que el bucle no ejecuta nunca el conjunto de instrucciones si la expresión
lógica se evalúa inicialmente a FALSE o NULL.
Sintaxis:
WHILE (expresion_logica) LOOP
END LOOP;
Ejemplo:
Usaremos un bucle WHILE para insertar filas en una tabla que tiene una llave
primaria numérica cuyo valor es generado automáticamente por el sistema.
Para ello haremos uso del objeto secuencia.
Creación de la secuencia sqClave
CREATE SEQUENCE SQCLAVE;
Creación de la tabla temporal Prueba_Claves
CREATE GLOBAL TEMPORARY TABLE PRUEBA_CLAVES (
CODIGO NUMBER PRIMARY KEY,
NOMBRE VARCHAR2 (30))
ON COMMIT PRESERVE ROWS;
Creación del procedimiento que inserta filas en la tabla
CREATE OR REPLACE PROCEDURE PRCARGARTABLA(NFILAS
NUMBER)AS
NCONTROL NUMBER := 0;
BEGIN
WHILE(NCONTROL < NFILAS) LOOP
INSERT INTO PRUEBA_CLAVES
VALUES(SQCLAVE.NEXTVAL, 'NO DISPONIBLE');
NCONTROL := NCONTROL + 1;
END LOOP;
COMMIT;
DBMS_OUTPUT.PUT_LINE('PROCESO EJECUTADO');
END;
Probar el procedimiento
Pagina 133
ORACLE
EXECUTE PRCARGARTABLA(5);
SELECT *FROM PRUEBA_CLAVES;
El bucle FOR
Permite ejecutar un conjunto de instrucciones en forma repetitiva
estableciendo de antemano el número de repeticiones a ejecutar.
Sintaxis:
FOR contador IN [ REVERSE ]
limite_inferior … limite_superior LOOP
END LOOP;
contador es la variable que controla la ejecución de las repeticiones, su valor
se incrementa después de cada repetición.
limite_inferior, limite_superior definen el rango de valores que puede
asumir el contador durante la ejecución del bucle.
Ejemplo:
Pagina 134
ORACLE
Crearemos un procedimiento que inserte filas en la tabla temporal creada en
el ejercicio anterior, pero haciendo uso del bucle FOR.
CREATE OR REPLACE PROCEDURE PRINSERTAR_FILAS
(N_FILAS NUMBER)
AS
BEGIN
FOR NCONTADOR IN 1 .. N_FILAS LOOP
INSERT INTO PRUEBA_CLAVES
VALUES(SQCLAVE.NEXTVAL,'DATO FALTANTE');
END LOOP;
DBMS_OUTPUT.PUT_LINE('PROCESO TERMINADO');
END;
EXECUTE PRINSERTAR_FILAS(6);
SELECT *FROM PRUEBA_CLAVES;
Ejemplo:
Bucle FOR – Uso de REVERSE
De modo predeterminado, el valor de la variable de control se incrementa
después de la ejecución de cada repetición hasta llegar al límite superior del
rango. La clausula REVERSE hace que la variable del control se inicie en el
limite superior y su valor disminuya en uno luego de cada repetición hasta
llegar al limite inferior.
El siguiente ejemplo hace el uso de REVERSE mediante un procedimiento que
crea una tabla de multiplicar.
Pagina 135
ORACLE
CREATE OR REPLACE PROCEDURE PRTABLAMULTIPLICAR
(NFACTOR NUMBER)
AS
V_TEXTO VARCHAR2(20);
BEGIN
FOR NCONTADOR IN REVERSE 1..12 LOOP
V_TEXTO :=NFACTOR || ' X ' || NCONTADOR || ' = ' ||
(NFACTOR * NCONTADOR);
DBMS_OUTPUT.PUT_LINE(V_TEXTO);
END LOOP;
END;
EXECUTE PRTABLAMULTIPLICAR(10);
Pagina 136

Documentos relacionados