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: vbnet_developer@hotmail.com
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: vbnet_developer@hotmail.com
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: vbnet_developer@hotmail.com
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テ前 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