128
1 Ingeniería en sistemas computacionales Practica 1: Creación de Base de datos en Oracle Profesor: Pizarro Gurrola Rubén Integrantes: Nombre N° Control Benítez favela Julieta Anahí 10040316 Galindo Payan Daniela 10040325 Hernández Simental Adilene Zamira 10040335 Fecha de entrega: martes 20 de noviembre del 2012

vistas procedimientos y funciones BD

Embed Size (px)

DESCRIPTION

investigacion y practica

Citation preview

Page 1: vistas procedimientos y funciones BD

1

Ingeniería en sistemas

computacionales

Practica 1: Creación de Base de datos en Oracle

Profesor: Pizarro Gurrola Rubén

Integrantes:

Nombre N° Control

Benítez favela Julieta Anahí 10040316

Galindo Payan Daniela 10040325

Hernández Simental Adilene Zamira 10040335

Fecha de entrega: martes 20 de noviembre del 2012

Page 2: vistas procedimientos y funciones BD

2

Antes de empezar con la creación de nuestra base de datos es necesario crear un usuario

llamado admin con su correspondiente contraseña con privilegios de DBA que por lo

menos pueda crear tablas, índices, vistas, funciones, procedimientos, disparadores,

secuencias etc.

PASO 1 CREACIÓN DE TABLAS

Ya que hemos accedido con el usuario admin procederemos a crear las siguientes

tablas:

Categorías

Productos

Clientes

Empleados

Puestos

Ventas

Detalle_ venta

Facturas

Bitácora

Page 3: vistas procedimientos y funciones BD

3

1. CREACIÓN DE LA TABLA CATEGORIAS La tabla de categorías esta formada por dos columnas; la columna de id categoría

el cual será la llave primaria o bien el índice único de la tabla este puede ser

varchar ya que no se realizaran operaciones aritméticas con este campo, la otra

columna es la descripción de la categoría el tipo es varchar y en esta columna se

especifican los tipos de categorías que se manejaran en la empresa en nuestro

caso insertamos las categorías de: ropa interior, perfumería, zapatería, joyería,

línea blanca, farmacia, cosméticos, cereales, lácteos, carnes frías, panadería y

dulcería

DDL DE CATEGORIAS drop table categorias; create table categorias ( id_categoria varchar (10) not null primary key, descripcion varchar (50) not null ); --inserción de 10 categorias insert into categorias(id_categoria,descripcion) values (234588, 'ropa interior'); insert into categorias(id_categoria,descripcion) values (335678, ' PERFUMERIA'); insert into categorias(id_categoria,descripcion) values (445678, 'ZAPATERIA'); insert into categorias(id_categoria,descripcion) values (556789, 'JOYERIA'); insert into categorias(id_categoria,descripcion) values (6612345, 'LINEA BLANCA'); insert into categorias(id_categoria,descripcion) values (7790123, 'FARMACIA'); insert into categorias(id_categoria,descripcion) values (8823456, 'COSMETICOS'); insert into categorias(id_categoria,descripcion) values (9956432, 'CEREALES'); insert into categorias(id_categoria,descripcion) values (10023459, 'LACTEOS'); insert into categorias(id_categoria,descripcion)

Page 4: vistas procedimientos y funciones BD

4

values (200456781, 'CARNES FRIAS'); insert into categorias(id_categoria,descripcion) values (1100779, 'PANADERIA'); insert into categorias(id_categoria,descripcion) values (11007779, 'DULCERIA');

EJECUCIÓN DEL DDL DE LA TABLA CATEGORÍAS

2. CREACIÓN DE LA TABLA DE PRODUCTOS La tabla de productos esta conformada por los siguientes campos:

Clave_Producto: esta es la llave primaria de la tabla y representa el índice

único

Nombre: en esta columna se almacenara el nombre del producto.

Descripción: en este campo almacenaremos una breve descripción del

producto

Costo: este campo representa un valor numérico (es el gasto económico que

genera la fabricación de un producto).

Existencia: es un campo numérico, en este se almacena cuanta cantidad de

un producto se tiene en el inventario.

Id_categoria: este campo es una llave foránea referente a la tabla de

categorías este hace referencia a que categoría pertenece cualquier

Page 5: vistas procedimientos y funciones BD

5

producto que se agregue a esta tabla, no se puede agregar un producto que

no pertenezca a alguna de las categorías que agregamos a categorías.

DDL DE LA TABLA PRODUCTOS

En esta tabla insertaremos 50 productos los cuales estarán relacionados con la tabla de categorías por medio del id_categoria.

drop table productos; create table productos ( clave_producto number(10) primary key, nombre_producto varchar(20), descripcion varchar(60), costo number(10), precio number(10), existencia number(10), id_categoria varchar(10) ); insert into productos(clave_producto,nombre_producto,descripcion,costo,precio,existencia,id_categoria) values (125690,'leche','leche deslactosada',20,22,34,10023459); insert into productos(clave_producto,nombre_producto,descripcion,costo,precio,existencia,id_categoria) values (120690,'DIESEL','PERFUME FLORAL, RUTAL',1100,1050,8,335678); insert into productos(clave_producto,nombre_producto,descripcion,costo,precio,existencia,id_categoria) values (235690,'CREMA','CREMA ANTI ACNE',150,200,74,8823456); insert into productos(clave_producto,nombre_producto,descripcion,costo,precio,existencia,id_categoria) values (553377,'ZAPATOS','ZAPATOS DE PIEL SINTETICA COLOR CAFE DEL NUMERO 4',500,600,9,445678); insert into productos(clave_producto,nombre_producto,descripcion,costo,precio,existencia,id_categoria) values (667799,'PULSERA','PULSERA CON PIEDRAS DE CUARSO COLOR ROJO',200,230,19,556789); insert into productos(clave_producto,nombre_producto,descripcion,costo,precio,existencia,id_categoria)

Page 6: vistas procedimientos y funciones BD

6

values (6654321,'LAVADORA','LAVADORA CON CAPACIDAD DE 20KG COLOR VINO',4000,5000,10,6612345);

Ejecución del DDL de la tabla productos

La tabla se ha creado con éxito y contiene los siguientes registros

Page 7: vistas procedimientos y funciones BD

7

3. CREACIÓN DE LA TABLA DE CLIENTES Esta tabla contiene información sobre los clientes de la empresa los campos de

la tabla son los siguientes:

Clave cliente: este campo es la llave primaria de la tabla puede ser numérico

o varchar

RFC: este es de tipo varchar ya que el rfc contiene letras y números

Razon_Social: tipo de dato varchar (es la denominación por la cual se conoce colectivamente a una empresa. Se trata de un nombre oficial y legal )

Calle_No: tipo de dato varchar

Colonia: tipo de dato varchar

Ciudad: tipo de dato varchar

Estado: tipo de dato varchar

E_Mail: tipo de dato varchar

Teléfono: tipo de dato varchar

DDL DE LA TABLA CLIENTES

En esta tabla daremos de alta 10 clientes con sus respectivas claves drop table clientes; create table clientes ( clave_cliente number(10) not null primary key, rfc varchar (20), razon_social varchar(60), calle_no varchar(50), colonia varchar (20), ciudad varchar (20), estado varchar (20), e_mail varchar (60), telefono varchar (20) ); --------------------------------REGISTROS-------------------------------- insert into clientes(clave_cliente,rfc,razon_social,calle_no,colonia,ciudad,estado,e_mail,telefono) values (1000,'GESY34568','JULIADIDANI S.A.de C.V','CIELO AXUL 223','ARCOIRIX','DURANGO','DURANGO','[email protected]','6181585713'); insert into clientes(clave_cliente,rfc,razon_social,calle_no,colonia,ciudad,estado,e_mail,telefono) values (2000,'RESU34569','JULIADIDANI S.A.de C.V','GUACAMAYA 923','FAUNA','LA PAZ','BAJA CALIFORNA SUR','[email protected]','6181585714');

Page 8: vistas procedimientos y funciones BD

8

insert into clientes(clave_cliente,rfc,razon_social,calle_no,colonia,ciudad,estado,e_mail,telefono) values (3000,'HTRE34570','JULIADIDANI S.A.de C.V','JACARANDA 423','FLORIDA','MONTERREY','NUEVO LEON','[email protected]','6181585715'); insert into clientes(clave_cliente,rfc,razon_social,calle_no,colonia,ciudad,estado,e_mail,telefono) values (4000,'WSCT34571','JULIADIDANI S.A.de C.V','MEXICO 390','MILPAS','MORELIA','MICHOACAN','[email protected]','6181585716'); insert into clientes(clave_cliente,rfc,razon_social,calle_no,colonia,ciudad,estado,e_mail,telefono) values (5000,'HESA345755','JULIADIDANI S.A.de C.V','NIEBLA 407','CIELO NEGRO','ERMOSILLO','SONORA','[email protected]','6181585718'); insert into clientes(clave_cliente,rfc,razon_social,calle_no,colonia,ciudad,estado,e_mail,telefono) values (6000,'HESA34573','JULIADIDANI S.A.de C.V','MAR NEGRO 467','MARES','ERMOSILLO','SONORA','[email protected]','6181585718'); insert into clientes(clave_cliente,rfc,razon_social,calle_no,colonia,ciudad,estado,e_mail,telefono) values (7000,'HESA34574','JULIADIDANI S.A.de C.V','CIELO GRIS 125','NUBES','CHIHUAHUA','CHIHUAHUA','[email protected]','6181585719'); insert into clientes(clave_cliente,rfc,razon_social,calle_no,colonia,ciudad,estado,e_mail,telefono) values (8000,'HESA34575','JULIADIDANI S.A.de C.V','TORMENTA 623','GRANADOS','COLIMA','COLIMA','[email protected]','6181585720'); insert into clientes(clave_cliente,rfc,razon_social,calle_no,colonia,ciudad,estado,e_mail,telefono) values (9000,'HESA34576','JULIADIDANI S.A.de C.V','TERREMOTO 923','MORIBUNDOS','CULIACAN','SINALOA','[email protected]','6181585721'); insert into clientes(clave_cliente,rfc,razon_social,calle_no,colonia,ciudad,estado,e_mail,telefono) values (11000,'HESA34577','JULIADIDANI S.A.de C.V','OLAS TURBIAS 708','ARCOIRIX','JALAPA','VERACRUZ','[email protected]','6181585722');

Page 9: vistas procedimientos y funciones BD

9

Ejecución del DDL de la tabla clientes

La tabla se creo correctamente y podemos observar que ya contiene los 10 registros que insertamos.

Page 10: vistas procedimientos y funciones BD

10

4. CREACIÓN DE LA TABLA DE EMPLEADOS En esta tabla se almacenara información sobre los empleados de una empresa x

La tabla esta formada por los siguientes campos:

No_Empleado: este puede ser un campo numérico o varchar y será la llave

primaria de la tabla.

Paterno: es un campo tipo varchar

Materno: varchar

Nombre: varchar

Sexo: char

Fecha_Nacimiento: date

Sueldo: number

Puesto: puede ser numérico o varchar en él se almacena la clave del puesto

es llave foránea en esta tabla y primaria en la tabla de puestos.

DDL DE LA TABLA EMPLEADOS drop table empleados; create table empleados ( no_empleado varchar(10)not null primary key, paterno varchar(20) not null, materno varchar(60)not null, nombre varchar(50)not null, sexo char not null, fecha_nacimiento date, sueldo number(10)not null, puesto number(10)not null ); ----------------------------------INCERCION DE 10 REGISTROS--------------------- insert into empleados(no_empleado,paterno,materno,nombre,sexo,fecha_nacimiento,sueldo,puesto) values (18302,'GANDARA','LOPEZ','MARIA NICOLASA','F','12/03/11','700',120011 ); insert into empleados(no_empleado,paterno,materno,nombre,sexo,fecha_nacimiento,sueldo,puesto) values (18303,'RETANA','CHAVEZ','JUAN PABLO','M','15/06/1985','6000',120012); insert into empleados(no_empleado,paterno,materno,nombre,sexo,fecha_nacimiento,sueldo,puesto) values (18311,'DOLORES','DEL ORTO','MARIA','F','21/05/1991','1000',120012); insert into empleados(no_empleado,paterno,materno,nombre,sexo,fecha_nacimiento,sueldo,puesto)

Page 11: vistas procedimientos y funciones BD

11

values (18304,'PEREZ','LAZO','RITA','F','30/07/1990','1500',120013); insert into empleados(no_empleado,paterno,materno,nombre,sexo,fecha_nacimiento,sueldo,puesto) values (18305,'TRADO','HITTLER','BARTOLOMEO','M','15/05/1890','2500',1200190); insert into empleados(no_empleado,paterno,materno,nombre,sexo,fecha_nacimiento,sueldo,puesto) values (18306,'LEDEZMA','PEREZ','WACHI','M','21/09/1992','1800',120015); insert into empleados(no_empleado,paterno,materno,nombre,sexo,fecha_nacimiento,sueldo,puesto) values (18307,'GOMEZ','PERALTA','TOSHIBA FIDELINA','F','01/03/1989','9300',120017); insert into empleados(no_empleado,paterno,materno,nombre,sexo,fecha_nacimiento,sueldo,puesto) values (18308,'SANCHEZ','FERNANDEZ','LEOPOLDO','M','13/11/1986','2000',120018); insert into empleados(no_empleado,paterno,materno,nombre,sexo,fecha_nacimiento,sueldo,puesto) values (18309,'GRANADOS','BRIOS','PANDOLFO','M','10/12/1987','3000',12001200); insert into empleados(no_empleado,paterno,materno,nombre,sexo,fecha_nacimiento,sueldo,puesto) values (18310,'SARMIENTO','DORADO','ANTONIO','M','25/12/1990','3500',120013);

Ejecución del DDL de la tabla empleados

Page 12: vistas procedimientos y funciones BD

12

Tabla después de la inserción

5. CREACIÓN DE LA TABLA DE PUESTOS La tabla de puestos contiene los campos de puesto el cual representa la clave del

puesto y es la llave primaria de la tabla, el nombre del puesto, y el sueldo base.

DDL de la tabla de puestos drop table puestos; create table puestos ( puesto number(10)not null primary key, nombre varchar(50)not null, sueldo_base number(10)not null ); insert into puestos(puesto,nombre,sueldo_base) values (120011,'LIMPIEZA',500); insert into puestos(puesto,nombre,sueldo_base) values (120012,'SECRETARIO',1000); insert into puestos(puesto,nombre,sueldo_base) values (120013,'CAJERO',950); insert into puestos(puesto,nombre,sueldo_base) values (120014,'CARNICERO',800); insert into puestos(puesto,nombre,sueldo_base) values (120015,'VENDEDOR',750); insert into puestos(puesto,nombre,sueldo_base) values (120016,'CONTADOR',6000); insert into puestos(puesto,nombre,sueldo_base) values (120017,'GERENTE',7000);

Page 13: vistas procedimientos y funciones BD

13

insert into puestos(puesto,nombre,sueldo_base) values (120018,'SUPERVISOR',5500); insert into puestos(puesto,nombre,sueldo_base) values (12088190,'ADMINISTRADOR',6500); insert into puestos(puesto,nombre,sueldo_base) values (1300034,'PANADERO',1200); Ejecución del DDL de la tabla puestos

Después de la creación

Page 14: vistas procedimientos y funciones BD

14

6. CREACIÓN DE LA TABLA DE VENTAS Para la creación de la tabla de ventas es necesario crear antes una secuencia o

consecutivo el cual será la llave primaria de la tabla el código SQL para la creación

de la secuencia es el siguiente:

--consecutivo para la tabla de ventas

drop sequence sq_consecutivo_ventas;

create sequence sq_consecutivo_ventas --es un valor predefinido

MINVALUE 1

MAXVALUE 999999999999999999999999999

start with 1

increment by 1;

--DDL de la tabla de ventas

La tabla de ventas tiene los campos de consecutivo_ ventas el cual se creo

anteriormente este campo es la llave primaria de la tabla, la fecha tipo date, la

clave del cliente la cual es llave foránea referente a la tabla de clientes, el numero

del empleado el cual también es llave foránea con referencia a la tabla de

empleados y el total que es un campo numérico. Las llaves foráneas deben ser del

mismo tipo y del mimo tamaño que como se declararon en las tablas a las que se

hace referencia.

Al insertar en la tabla mandamos llamar el consecutivo que creamos ya que forma

parte de los campos de la tabla en el total ponemos cualquier valor o bien cero ya

que este campo se llenara automáticamente mas adelante. Insertamos 20 ventas.

drop table ventas;

create table ventas

(

consecutivo_ventas number not null primary key,

fecha date not null,

clave_cliente number(10)not null,

no_empleado number(10)not null,

total number not null

);

insert into ventas(consecutivo_ventas,fecha,clave_cliente,no_empleado,total)

values (sq_consecutivo_ventas.nextval,'09/09/11',1000,18302,0);

insert into ventas(consecutivo_ventas,fecha,clave_cliente,no_empleado,total)

Page 15: vistas procedimientos y funciones BD

15

values (sq_consecutivo_ventas.nextval,'10/05/12',2000,18303,0);

insert into ventas(consecutivo_ventas,fecha,clave_cliente,no_empleado,total)

values (sq_consecutivo_ventas.nextval,'15/06/12',3000,18311,0);

insert into ventas(consecutivo_ventas,fecha,clave_cliente,no_empleado,total)

values (sq_consecutivo_ventas.nextval,'21/05/12',4000,18304,0);

Ejecución del DDL de la tabla ventas

Page 16: vistas procedimientos y funciones BD

16

Tabla de ventas con registros:

7. CREACIÓN DE LA TABLA DE DETALLE_VENTAS En la tabla de detalle ventas se tienen los siguientes campos:

Consecutivo_ventas: el cual es una llave foránea referente a la tabla de ventas.

Clave_producto: es llave foránea referente a la tabla de productos.

Cantidad: es un campo numérico.

Precio: es un campo numérico.

Importe: es un campo numérico el cual es el resultado de la multiplicación de la

cantidad por el precio.

drop table detalle_venta;

create table detalle_venta ( consecutivo_ventas number not null, clave_producto number(10)not null, cantidad number(10)not null, precio number (10) not null, importe number (10) not null );

Page 17: vistas procedimientos y funciones BD

17

Después de que tenemos creada

la tabla es necesario crear un

procedimiento para realizar el

cálculo del importe.

DDL del procedimiento para el cálculo del importe

create or replace procedure pa_agregar_detalle_ventas

( v_consecutivo_ventas number,

v_clave_producto number,

v_cantidad number,

v_precio number

)

as

v_importe number;

v_total number;

begin

v_importe:= (v_cantidad * v_precio);

insert into detalle_venta (consecutivo_ventas,clave_producto,cantidad,precio,importe)

values(v_consecutivo_ventas,v_clave_producto,v_cantidad,v_precio,v_importe);

select sum(importe) into v_total

from detalle_venta

where consecutivo_ventas = v_consecutivo_ventas;

update ventas

Page 18: vistas procedimientos y funciones BD

18

set ventas.total = v_total-- variable

where ventas.consecutivo_ventas = v_consecutivo_ventas;

end;

Ejecución del procedimiento para agregar en la tabla de detalle venta

Después de ejecutar el procedimiento lo único que hace falta es mandarlo llamar

para poder insertar en la tabla de detalle venta empleando los consecutivos de la

tabla de ventas. Se insertaran tres detalles por venta y con el procedimiento se

actualizara el campo de total. El cual se calculo con la sumatoria de los importes.

Llamada al procedimiento para agregar en la tabla de detalle venta y

actualizar el total en ventas

begin

pa_agregar_detalle_ventas(115, 125690,2,22);

pa_agregar_detalle_ventas(115,120690,3,1050);

pa_agregar_detalle_ventas(115,235690,5,200);

pa_agregar_detalle_ventas(116,550088,9,200);

Page 19: vistas procedimientos y funciones BD

19

pa_agregar_detalle_ventas(116,553377,1,600);

pa_agregar_detalle_ventas(116,235690,2,200);

pa_agregar_detalle_ventas(117, 770088,1,3500);

pa_agregar_detalle_ventas(117,220022,2,58);

pa_agregar_detalle_ventas(117,330033,3,62);

pa_agregar_detalle_ventas(118,667799,2,800);

pa_agregar_detalle_ventas(118,220022,2,58);

pa_agregar_detalle_ventas(118,440033,5,60);

pa_agregar_detalle_ventas(119,550088,9,200);

pa_agregar_detalle_ventas(119,447799,2,40);

pa_agregar_detalle_ventas(119,667799,1,230);

pa_agregar_detalle_ventas(120, 6654321,1,5000);

pa_agregar_detalle_ventas(120,112277,2,60);

pa_agregar_detalle_ventas(120,223344,1,46);

pa_agregar_detalle_ventas(121,550088 ,1,45);

pa_agregar_detalle_ventas(121,33441277,1,2500);

pa_agregar_detalle_ventas(121,2244778800,1,65);

pa_agregar_detalle_ventas(121,551122007 ,1,600);

pa_agregar_detalle_ventas(121,661122005,3,22);

pa_agregar_detalle_ventas(121,66002244,1,500);

end;

Page 20: vistas procedimientos y funciones BD

20

Como podemos observar en base al consecutivo existente en ventas se

llena la tabla de detalle venta y el importe es calculado automático por

el procedimiento.

Page 21: vistas procedimientos y funciones BD

21

Después de esto la tabla de ventas se ha actualizado y en la columna del total

nos aparece la suma de los importes por cada detalle_venta teniendo en

cuenta que son tres detalles por venta.

8. CREACIÓN DE LA TABLA DE FACTURAS La tabla de facturas tiene los siguientes campos:

No de factura: este campo es la llave primaria de la tabla puede ser number o

varchar.

Fecha: la fecha representa un tipo de dato (date) en el cual almacenaremos la

fecha en que se expidió la factura.

Cantidad: representa un valor numérico

Consecutivo_ ventas: este campo es llave foránea referente a la tabla de ventas

Rfc: representa un valor varchar y es foránea de la tabla de clientes.

En el DDL de facturas insertaremos 20 registros de facturas, como se puede

observar en el código que se muestra a continuación.

Page 22: vistas procedimientos y funciones BD

22

DDL de la tabla de facturas

drop table facturas;

create table facturas

(

no_factura number primary key not null,

fecha date,

cantidad number(10),

consecutivo_ventas number,

rfc varchar (20)

);

--insercion de 20 registros

insert into facturas(no_factura,fecha,cantidad,consecutivo_ventas,rfc)

values (13001,'15/10/12',4,115,'GAEL0902D');

insert into facturas(no_factura,fecha,cantidad,consecutivo_ventas,rfc)

values (13009,'16/11/11',3,116,'HECA0934K');

insert into facturas(no_factura,fecha,cantidad,consecutivo_ventas,rfc)

values (13008,'25/12/11',2,117,'JAEH0602J');

insert into facturas(no_factura,fecha,cantidad,consecutivo_ventas,rfc)

values (13007,'01/10/12',1,118,'FART0760J');

insert into facturas(no_factura,fecha,cantidad,consecutivo_ventas,rfc)

values (13006,'03/11/11',5,119,'HESA910510');

insert into facturas(no_factura,fecha,cantidad,consecutivo_ventas,rfc)

values (13005,'02/12/11',10,120,'BEFA8123G');

insert into facturas(no_factura,fecha,cantidad,consecutivo_ventas,rfc)

values (13004,'25/12/11',12,121,'RORO0213H');

insert into facturas(no_factura,fecha,cantidad,consecutivo_ventas,rfc)

values (13003,'05/10/12',5,121,'YOUL7865G');

Page 23: vistas procedimientos y funciones BD

23

Ejecución del DDL de la tabla de facturas

Tabla Después de la ejecución del

DDL

9. CREACIÓN DE LA TABLA DE BITACORA Para la creación de la Tabla bitácora vamos a crear un consecutivo el cual será la

llave primaria de la tabla. El DDL de la creación del consecutivo es el siguiente.

--consecutivo bitacora drop sequence sq_consecutivo_bitacora; create sequence sq_consecutivo_bitacora --es un valor predefinido MINVALUE 1 MAXVALUE 9999999999999999999999999999 start with 1 increment by 1; Después de crear el consecutivo, creamos la tabla con los siguientes campos:

consecutivo_bitacora; el cual es el consecutivo que hicimos y es la llave primaria,

de la tabla, la fecha en que se realizo alguna operación, la tabla; representa la

tabla en la que se realizo la operación. Campo afectado;

Page 24: vistas procedimientos y funciones BD

24

DDL de la creación de la tabla de bitácora

drop table bitacora;

create table bitacora

(

consecutivo_bitacora number not null primary key,

fecha date not null,

tabla varchar(20)not null,

operacion char not null,

campo_afectado varchar(50) not null

);

Para llenar la tabla de bitácora necesitamos crear disparadores para cada tabla o

bien para cada operación que vallamos a realizar sobre las tablas. Por ejemplo

para insertar en la tabla de categorías y que a su vez se registre en la bitácora la

inserción, hacemos lo siguiente.

Disparador para insertar en bitácora.

create or replace trigger tr_bit_agregar_categorias

after insert on categorias –-indica que después de la inserción llene bitácora

for each row

declare

v_fecha date;

begin

select sysdate into v_fecha

from dual;

insert into bitacora(consecutivo_bitacora,fecha,tabla,operacion,campo_afectado)

values(sq_consecutivo_bitacora.nextval,v_fecha,'categorias','a',:new.id_categori

a);

end;

Ejecución del disparador para insertar en bitácora.

Para esto hacemos una inserción en categorías y se puede ver en bitácora.

insert into categorias(id_categoria,descripcion)

values(9004138,'DESORODANTE DE LIMON');

Page 25: vistas procedimientos y funciones BD

25

Tabla bitácora después de insertar en categorías.

Se puede ver que en la tabla bitácora nos almacena la fecha el consecutivo, la

tabla en la cual insertamos, la operación que es un alta, y el campo afectado es el

id_categoria.

PASO 2 CREACIÓN DE ÍNDICES:

Los índices de una base de datos representan una estructura de datos que

mejora la velocidad de las operaciones, permitiendo un rápido acceso a los

registros de una tabla. Al aumentar drásticamente la velocidad de acceso, se

suelen usar sobre aquellos campos sobre los cuales se vayan a realizar búsquedas

frecuentes. Los índices pueden ser creados usando una o más columnas,

preparando la base de datos tanto para búsquedas rápidas al azar como para

ordenaciones eficientes de los registros.

Al crear las llaves primarias automáticamente se crean índices primarios únicos

de cada tabla, pero es necesario crear otros índices para ello creamos los

siguientes para cada tabla:

Tabla Índices:

Categorías 1. Índice único por el campo Id_categoria. 2. Índice normal por el campo descripción.

Productos 3. Índice normal por nombre. 4. Indice normal por costo de producto. 5. Indice normal compuesto por los campos de

Id_categoria y clave_producto.

Clientes 6. Indice único por el campo RFC 7. Indice normal por el campo razón social 8. Indice normal compuesto por los campos

estado, ciudad y colonia.

Empleados 9. Indice normal compuesto por los campos de Apellido_paterno, materno y nombre.

10. Indice normal por fecha de nacimiento 11. Indice normal por sueldo 12. Indice normal por puesto

Puestos 13. Indice normal por nombre 14. Indice normal por sueldo_base

Ventas 15. Indice normal por fecha de venta

Page 26: vistas procedimientos y funciones BD

26

16. Indice normal por clave de cliente 17. Indice normal por no_empleado 18. Indice normal por total de venta

Detalle_Ventas 19. Indice normal por clave de producto 20. Indice normal por importe

Facturas 21. Indice normal compuesto por RFC de cliente y fecha factura

22. Indice normal por fecha de factura 23. Indice normal por consecutivo de no_de_venta

Bitacora 24. Indice normal por fecha 25. Indice normal compuesto por usuario, fecha y

tabla

Índices para la tabla de categorías

1. Índice único por el campo Id_categoria. Debido a que este campo es la llave

primaria de la tabla de categorías se ha creado automáticamente al crear la tabla.

2. DDL del Índice normal por el campo descripción

create index categorias_descripcion on categorías

(descripcion);

Ejecución del DDL del índice 2 de categorías

Page 27: vistas procedimientos y funciones BD

27

INDICES DE LA TABLA DE PRODUCTOS

3.DDL Indice normal por nombre

create index productos_nombre on productos(

nombre_producto

);

Ejecucion del DDL del índice 3 de productos

4.DDL Indice normal por costo de producto create index costo_producto on productos(costo);

Page 28: vistas procedimientos y funciones BD

28

Ejecucion del DDL del índice 4 de productos

5. DDL Indice normal compuesto por los campos de Id_categoria y clave_producto. create index productos_id_clave on productos(id_categoria,clave_producto); Ejecucion del DDL del índice 5 de productos

Page 29: vistas procedimientos y funciones BD

29

6.Índice único por el campo RFC. Debido a que este campo es la llave primaria de la tabla clientes se ha creado automáticamente al crear la tabla.

7.DDL Indice normal por el campo razón social create index clientes_razon on clientes(razon_social);

Ejecucion del DDL del índice 7 de clientes

8. DDL Índice normal compuesto por los campos estado, ciudad y colonia create index clientes_compuesto on clientes (estado,ciudad,colonia); Ejecucion del DDL del índice 8 de clientes

Page 30: vistas procedimientos y funciones BD

30

INDICES DE LA TABLA DE EMPLEADOS

9. DDL Indice normal compuesto por los campos de Apellido_paterno,

materno y nombre

create index empleados_amn on empleados(paterno,materno,nombre);

Ejecucion del DDL del índice 9 de empleados

10.DDL Indice normal por fecha de nacimiento create index empleados_compuesto on empleados(fecha_nacimiento); Ejecucion del DDL del índice 10 de empleados

Page 31: vistas procedimientos y funciones BD

31

11. DDL Indice normal por sueldo create index empleados_sueldo on empleados(sueldo); Ejecucion del DDL del índice 11 de empleados

12. DDL Indice normal por puesto create index empleados_puesto on empleados(puesto); Ejecucion del DDL del índice 12 de empleados

Page 32: vistas procedimientos y funciones BD

32

INDICES DE LA TABLA DE PUESTOS

13. DDL Indice normal por nombre

create index puestos_nombre on puestos(nombre); Ejecucion del DDL del índice 13 de puestos

14. DDL Indice normal por sueldo_base

create index puestos_sueldobase on puestos(sueldo_base); Ejecucion del DDL del índice 14 de puestos

Page 33: vistas procedimientos y funciones BD

33

INDICES DE LA TABLA DE VENTAS

15. DDL Indice normal por fecha de venta create index ventas_fecha_venta on ventas(fecha); Ejecucion del DDL del índice 15 de ventas

16. DDL Indice normal por clave de cliente create index ventas_clave on ventas(clave_cliente);

Ejecucion del DDL del índice 16 de ventas

Page 34: vistas procedimientos y funciones BD

34

17. DDL Indice normal por no_empleado create index ventas_no_empleado on ventas(no_empleado); Ejecucion del DDL del índice 17 de ventas

18. DDL Indice normal por total de venta create index ventas_totalv on ventas(total); Ejecucion del DDL del índice 18 de ventas

Page 35: vistas procedimientos y funciones BD

35

INDICES DE LA TABLA DE DETALLE_VENTA

19.DDL Indice normal por clave de producto create index detalle_venta_clave_producto on detalle_venta(clave_producto); Ejecucion del DDL del índice 19 detalle_venta

20.DDL Indice normal por importe create index detalle_importe on detalle_venta(importe); Ejecucion del DDL del índice 20 detalle_venta

Page 36: vistas procedimientos y funciones BD

36

INDICES DE LA TABLA DE FACTURAS

21. DDL Indice normal compuesto por RFC de cliente y fecha factura

create index facturas_rfcfecha on facturas(fecha,rfc); Ejecucion del DDL del índice 21 tabla facturas

22.DDL Indice normal por fecha de factura create index facturas_fecha on facturas(fecha); Ejecucion del DDL del índice 22 tabla facturas

Page 37: vistas procedimientos y funciones BD

37

23.DDL Indice normal por consecutivo de no_de_venta create index no_venta on facturas(consecutivo_ventas); Ejecucion del DDL del índice 23 tabla facturas

INDICES DE LA TABLA DE BITACORA

24.DDL Indice normal por fecha create index bitacora_fecha on bitacora(fecha); Ejecución del DDL del índice 24 tabla bitacora

Page 38: vistas procedimientos y funciones BD

38

25. DDL Indice normal compuesto por usuario, fecha y tabla create index bitacora_fecha_tabla on bitacora(fecha,tabla); Ejecucion del DDL del índice 25 tabla bitacora

PASO 3 CREACIÓN DE VISTAS Una vista es una alternativa para mostrar datos de varias tablas; es como una tabla virtual que

almacena una consulta. Los datos accesibles a través de la vista no están almacenados en la base de

datos. Las vistas permiten: simplificar la administración de los permisos de usuario: se pueden dar al

usuario permisos para que solamente pueda acceder a los datos a través de vistas, en lugar de

concederle permisos para acceder a ciertos campos, así se protegen las tablas base de cambios en su

estructura.

CREAR LAS SIGUIENTES VISTAS PARA CADA TABLA:

Tabla Vistas

Categorías 1. Vista de los campos Id_categoria y descripción

Productos 2. Vista de los campos clave producto, nombre y descripción

3. Vista de los campos clave de producto, costo, precio y existencia.

Page 39: vistas procedimientos y funciones BD

39

4. Vista de dos tablas (productos y categorías), de los campos clave de producto, nombre descripción, id_categoria y descripción de la categoría.

Clientes 5. Vista de los campos clave de cliente, razón social, ciudad y estado.

6. Vista de los campos clave de cliente, calle, colonia, teléfono email.

Empleados 7. Vista de los campos no_empleado, paterno, materno y nombre

8. Vista de los campos no_empleado, sexo y fecha de nacimiento

9. Vista de dos tablas (empleados y puestos) de los campos no_empleado, puesto y sueldo. Así como de la tabla puestos el nombre del puesto y el sueldo base del puesto.

Puestos 10. Vista de puesto, y nombre 11. Vista de puesto y sueldo base

Ventas 12. Vista de consecutivo venta, fecha venta y total 13. Vista de consecutivo venta, clave_cliente y fecha de

venta. 14. Vista de dos tablas (ventas con empleados):

Consecutivo venta, no_empleado, paterno materno y nombre

15. Vista de dos tablas (ventas con clientes): consecutivo venta, fecha venta, rfc o clave de cliente, razón social del cliente y total de la venta

Detalle_Ventas 16. Vista de consecutivo venta, clave_producto, cantidad, precio, importe

17. Vista de tres tablas (detalle_ventas, ventas y productos): consecutivo_ventas, fecha_venta, clave_producto,

nombre_producto, cantidad, precio, importe, total de

cada venta.

Facturas 18. Vista de número factura, fecha de factura, y consecutivo venta.

19. Vista de dos tablas (factura y clientes):no factura, rfc cliente ó clave cliente, razón social, fecha y total factura.

Bitácora 20. Vista con los campos de fecha, usuario, operación, tabla

VISTAS DE LA TABLA DE CATEGORIAS

1. DDL de la creación de la vista de los campos Id_categoria y descripción

--Vista de los campos Id_categoria y descripción

--aquí se crea la vista

drop view vis_categorias;

create view vis_categorias

as

select id_categoria,descripcion

from categorias;

Page 40: vistas procedimientos y funciones BD

40

--insertar

insert into categorias(id_categoria,descripcion)

values (123456000,'ELECTRONICA');

Ejecución del DDL de la vista 1 de categorias

Vista después de la inserción

VISTAS DE LA TABLA DE PRODUCTOS

1. DDL de la creación de la vista de los campos clave producto, nombre y descripción.

DDL de la vista 2 de la tabla de productos. --2. Vista de los campos clave producto, nombre y descripción

drop view vis_productos;

create view vis_productos

as

select clave_producto,nombre_producto,descripcion

from productos;

--insertar

Page 41: vistas procedimientos y funciones BD

41

insert into productos(clave_producto,nombre_producto,descripcion)

values(123478800,'GOMAS','GOMAS SABOR MANGO CON CHILE'); Ejecución del DDL de la vista 2 de productos

Después de insertar en la tabla de productos en la vista solo se extraen los datos

que se encuentren en los campos que pusimos en la vista.

2. DDL de la creación de la vista de los campos clave de producto, costo, precio y existencia. --3. Vista de los campos clave de producto, costo, precio y

existencia.

drop view vis_productos3;

create view vis_productos3

as

select clave_producto,costo,precio,existencia

from productos;

--insertar

insert into productos(clave_producto,costo,precio,existencia)

values(1256900,45,48,19);

Page 42: vistas procedimientos y funciones BD

42

Ejecución del DDL de la vista 3 de productos

Después de insertar en la tabla

productos se extraen solo los

campos seleccionados en la vista.

3. DDL de la Vista de dos tablas (productos y categorías), de los campos

clave de producto, nombre descripción, id_categoria y descripción de

la categoría.

--4. Vista de dos tablas (productos y categorías), de los campos

clave de producto, nombre descripción,

--id_categoria y descripción de la categoría.

drop view vis_productos_categorias;

create view vis_productos_categorias

as

select

clave_producto,nombre_producto,descripcion,categorias.descripcion_ca

tegoria,categorias.id_categoria

from productos,categorías

Page 43: vistas procedimientos y funciones BD

43

Después de ejecutar el DDL de la vista se extraen los campos seleccionados

de la tabla de productos se extraen los datos que se encuentran en el campo

de clave de producto, así como la descripción del producto y de la tabla de

categorías se extrae el id_categoria y la descripción de todas las categorías.

VISTAS DE LA TABLA DE CLIENTES

4. DDL de la creación de la vista de los campos clave de cliente, razón social, ciudad y estado.

La vista se puede ver de la siguiente manera.

Page 44: vistas procedimientos y funciones BD

44

5. DDL de la vista de los campos clave de cliente, calle, colonia, teléfono

email.

drop view vista_clientes;

create view vista_clientes

as

select clave_cliente,calle_no,colonia,telefono,e_mail

from clientes;

Ejecución del DDL de la vista 6 de clientes

Page 45: vistas procedimientos y funciones BD

45

VISTAS DE LA TABLA DE EMPLEADOS

6. DDL de la vista de los campos no_empleado, paterno, materno y

nombre. drop view VISTA7_EMPLEADOS;

create view VISTA7_EMPLEADOS

as

select no_empleado,paterno,materno,nombre

from empleados

Ejecución del DDL de la vista 7 de empleados

Page 46: vistas procedimientos y funciones BD

46

7. DDL de la vista de los campos no_empleado, sexo y fecha de nacimiento --VISTA 8

drop view VISTA8_EMPLEADOS;

create view VISTA8_EMPLEADOS

as

select no_empleado,sexo,fecha_nacimiento

from empleados

Ejecución del DDL de la vista 8 de empleados

Page 47: vistas procedimientos y funciones BD

47

8. DDL de la vista de dos tablas (empleados y puestos) de los campos no_empleado, puesto y sueldo. Así como de la tabla puestos el nombre

del puesto y el sueldo base del puesto. --VISTA 9 drop view VISTA9_EMPLEADOS; create view VISTA9_EMPLEADOS as select no_empleado,empleados.puesto,sueldo, puestos.nombre,puestos.sueldo_base from empleados,puestos

Ejecución del DDL de la vista 9 de empleados y puestos

VISTAS DE LA TABLA DE PUESTOS

9. DDL de la vista de puesto, y nombre --VISTA10

drop view VISTA10_PUESTOS;

create view VISTA10_PUESTOS

as

select puesto,nombre

from puestos

Ejecución del DDL de la vista 10 de puestos

Page 48: vistas procedimientos y funciones BD

48

10. DDL de la vista de puesto y sueldo base --VISTA11 drop view VISTA11_PUESTOS; create view VISTA11_PUESTOS as select puesto,sueldo_base from puestos

Ejecución del DDL de la vista 11 de puestos

VISTAS DE LA TABLA DE VENTAS

11. DDL de la vista de consecutivo venta, fecha venta y total drop view VISTA12_VENTAS;

create view VISTA12_VENTAS

as

select consecutivo_ventas,fecha,total

from ventas

Ejecución del DDL de la vista 12 de ventas

Page 49: vistas procedimientos y funciones BD

49

12. DDL de la vista de consecutivo_ventas, clave_cliente y fecha de venta. drop view vista13_ventas;

create view vista13_ventas

as

select consecutivo_ventas,clave_cliente,fecha

from ventas;

Ejecución del DDL de la vista 13 de ventas

13. DDL de la vista de dos tablas (ventas y empleados) consecutivo_ventas, no_empleado, paterno, materno y nombre. drop view VISTA14_VENTAS_EMP;

create view VISTA14_VENTAS_EMP

as

select

consecutivo_ventas,empleados.no_empleado,empleados.paterno,empleados.mater

no,empleados.nombre

from ventas,empleados;

Ejecución del DDL de la vista 14 de ventas y empleados

Page 50: vistas procedimientos y funciones BD

50

Vista después de la ejecución del DDL

14. DDL de la Vista de dos tablas (ventas con clientes): consecutivo venta, fecha venta, rfc o clave de cliente, razón social del cliente y total de la

venta. drop view VISTA15_VENTAS_CLI;

create view VISTA15_VENTAS_CLI

as

select

consecutivo_ventas,fecha,clientes.rfc,ventas.clave_cliente,clientes.razon_

social,ventas.total

from ventas,clientes;

Ejecución del DDL de la Vista 15 de ventas y clientes

Page 51: vistas procedimientos y funciones BD

51

Salida después de la Ejecución del DDL 15

VISTAS DE LA TABLA DE DETALLE_VENTAS

15. DDL de la Vista de consecutivo venta, clave_producto, cantidad, precio, importe.

drop view vista_detalle_venta; create view vista_detalle_venta as select clave_producto,cantidad,precio,importe from detalle_venta; Ejecución del DDL de la vista 16 de detalle_venta

Page 52: vistas procedimientos y funciones BD

52

16. Vista de tres tablas (detalle_ventas, ventas y productos):

consecutivo_ventas, fecha_venta, clave_producto, nombre_producto,

cantidad, precio, importe, total de cada venta.

drop view VISTA17_VENTAS_DV_PR;

create view VISTA17_VENTAS_DV_PR

as

select ventas.consecutivo_ventas,ventas.fecha,productos.clave_producto,

productos.nombre_producto,detalle_venta.cantidad,

detalle_venta.precio,detalle_venta.importe,ventas.total

from ventas,detalle_venta,productos;

Ejecución del DDL de la vista 17 de tres tablas

Después de la ejecución del DDL tenemos la siguiente vista.

Page 53: vistas procedimientos y funciones BD

53

VISTAS DE LA TABLA DE FACTURAS

17. DDL de la vista de los campos número_factura, fecha de factura, y

consecutivo venta.

--18. Vista de número_factura, fecha de factura,

--y consecutivo venta.

drop view vista18_facturas;

create view vista18_facturas

as

select no_factura,fecha,consecutivo_ventas

from facturas

Ejecución del DDL de la vista 18 de facturas

Page 54: vistas procedimientos y funciones BD

54

18. DDL de la vista de dos tablas (factura y clientes): no_factura, rfc cliente ó clave cliente, razón social, fecha y total factura. drop view vista19_facturas_clientes; create view vista19_facturas_clientes as select no_factura,clientes.rfc,fecha,clientes.razon_social from facturas,clientes Ejecución del DDL de la vista 19 de facturas y clientes.

VISTAS DE LA TABLA DE BITÁCORA

19. DDL de la vista con los campos de fecha, operación y tabla drop view vista20_bitacora; create view vista20_bitacora as select fecha,operacion,tabla from bitácora Ejecución del DDL de la vista 20 de bitácora.

Page 55: vistas procedimientos y funciones BD

55

PASO 4 CREAR PROCEDIMIENTOS Un procedimiento es un conjunto de comandos SQL que pueden almacenarse en el

servidor.

Los procedimientos pueden mejorar el rendimiento ya que se necesita enviar menos

información entre el servidor y el cliente.

CREAR LAS SIGUIENTES PROCEDIMIENTOS PARA CADA TABLA:

Tabla Procedimientos:

Categorias

1. Procedimiento para agregar nueva categoría: todos los campos.

2. Procedimiento para modifica una categoría existente: todos los campos excepto el id_categoría

3. Procedimiento para eliminar una categoría existente proporcionando el id_categoría, el registro a eliminar se borrará siempre y cuando ésta categoría no tenga referencia en la tabla de productos

Productos

4. Procedimiento para agregar nuevo producto de una categoría existente.

5. Procedimiento para modificar un producto existente todos los campos excepto la clave del producto.

6. Procedimiento para eliminar un producto existente: proporcionando la clave del producto se borrará el registro siempre y cuando éste producto no tenga referencia en la tabla de detalle_ventas.

Clientes

7. Procedimiento para agregar nuevo cliente con todos sus campos.

8. Procedimiento para modificar un cliente existente todos los campos excepto la clave de cliente y respetando la unicidad de la misma clave y del RFC.

9. Procedimiento para eliminar un cliente existente: proporcionando la clave del cliente se borrará el registro siempre y cuando éste cliente no tenga referencia en la tabla de ventas ni de facturas.

Empleados

10. Procedimiento para agregar nuevo empleado con todos sus campos.

11. Procedimiento para modificar un empleado existente modificando todos los campos excepto la clave de empleado y respetando la unicidad del no_empleado y la referencia del puesto

12. Procedimiento para eliminar un empleado existente: proporcionando el no_empleado se borrará el registro siempre y cuando éste empleado no tenga referencia en la tabla de ventas.

Puestos 13. Procedimiento para agregar nuevo puesto: todos los

campos. 14. Procedimiento para modifica un puesto existente:

Page 56: vistas procedimientos y funciones BD

56

todos los campos excepto la clave del puesto. 15. Procedimiento para eliminar un puesto existente

proporcionando el puesto, el registro a eliminar se borrará siempre y cuando éste puesto no tenga referencia en la tabla de empleados.

Ventas

16. Procedimiento para agregar nueva venta: todos los campos respetando llaves primarias y foráneas.

17. Procedimiento para modifica un venta existente: todos los campos excepto el consecutivo de ventas.

18. Procedimiento para eliminar una venta existente proporcionando el consecutivo, el registro a eliminar se borrará siempre y cuando ésta venta no tenga referencia en la tabla de detalle_ventas y con

facturas también.

Detalle_Ventas

19. Procedimiento para agregar un nuevo detalle_ventas.

Como esta tabla depende necesariamente de las ventas se

deben capturar al menos los campos de consecutivo,

clave_producto, y cantidad y precio. El campo de importe

debe ser generado a partir de la operación cantidad *

precio. En este procedimiento debe actualizarse el total de

la venta que corresponda con el consecutivo de venta

haciendo un update de la siguiente manera:

Update ventas

Set total = sum(importe)

Where consecutivo = 1000;

Siempre y cuando exista la venta consecutivo número

1000.

20. Procedimiento para actualizar o modificar un detalle de venta: Proporcionando el consecutivo de venta que no se puede modificar, la cantidad y el precio solamente, se debe modificar solo el importe y el total de la venta (tabla ventas)

Update ventas

Set total = sum(importe)

Where consecutivo = 1000;

Facturas

21. Procedimiento para agregar nueva factura: todos los campos respetando llaves primarias y foráneas.

22. Procedimiento para modifica una factura existente: todos los campos excepto el número de factura.

23. Procedimiento para eliminar una factura existente proporcionando el número de factura, el registro a eliminar se borrará indistintamente.

Page 57: vistas procedimientos y funciones BD

57

Bitacora 24. Se almacenan los registros automáticamente utilizando disparadores.

DDL de procedimiento para la tabla categoría 1. DDL del procedimiento para una nueva categoría con todos los campos. create or replace procedure pa_agregar_categoria ( v_id_categoria varchar, v_descripcion_categoria varchar ) as begin insert into categorias (id_categoria,descripcion_categoria) values ( v_id_categoria,v_descripcion_categoria); dbms_output.put_line('Registro agregado correctamente revisar tabla categorias'); end; El DDL para mandar llamar el procedimiento anterior es el siguiente: begin pa_agregar_categoria('89890','FARMACIA'); end;

Para verificar que se agrego el registro correctamente revisamos la tabla de categorías y podemos ver que nuestro registro se encuentra el dicha tabla.

Page 58: vistas procedimientos y funciones BD

58

2. DDL del procedimiento para modifica una categoría existente: todos los campos excepto el id_categoría.

create or replace

procedure pa_actualizar_categorias(

v_id_categoria varchar,

v_descripcion_categoria varchar

) as

begin

update categorias set descripcion_categoria=(v_descripcion_categoria)

where id_categoria=(v_id_categoria);

dbms_output.put_line('EL REGISTRO SE ACTUALIZO CORRECTAMENTE');

end; Para poder llevar a cabo el procedimiento anterior necesitamos del siguiente DDL. begin

pa_actualizar_categorias(335678,'PERFUMERIA Y COSMETICOS');

end;

Verificamos nuestra tabla y comprobemos que nuestro registro este actualizado.

Page 59: vistas procedimientos y funciones BD

59

3. DDL del procedimiento para eliminar una categoría existente proporcionando el id_categoría, el registro a eliminar se borrará siempre

y cuando ésta categoría no tenga referencia en la tabla de productos create or replace

procedure pa_eliminar_categoria

(

v_id_categoria varchar

)

as

begin

delete categorias where id_categoria=v_id_categoria;

dbms_output.put_line('EL REGISTRO SE ELIMINO CORRECTAMENTE');

end; El DDL que empleamos para poder ejecutar nuestro procedimiento es parecido a los anteriores. begin

pa_eliminar_categoria(335678);

end;

En la tabla correspondiente ya no debe existir el id 335678 perteneciente a la descripción de perfumería y farmacia.

Page 60: vistas procedimientos y funciones BD

60

DDL DE PROCEDIMIENTOS PARA LA TABLA DE PRODUCTOS 4. DDL del procedimiento para agregar nuevo producto.

create or replace procedure pa_agregar_producto

(

v_nombre_producto varchar,

v_clave_producto number,

v_descripcion varchar,

v_costo number,

v_precio number,

v_existencia number ,

v_id_categoria varchar

)

a

begin

insert into

productos(clave_producto,nombre_producto,descripcion,costo,precio,existenc

ia,id_categoria)

values(v_clave_producto,v_nombre_producto,v_descripcion,v_costo,v_precio,v

_existencia,v_id_categoria);

end; Para poder observar cambios necesitamos de lo siguiente; begin

pa_agregar_producto( 'desodorante',121413,'desodorante en aerosol para

dama',19,42,280 ,9004135);

end;

Page 61: vistas procedimientos y funciones BD

61

5. DDL del procedimiento para modificar un producto existente. create or replace procedure pa_modificar_producto

(

v_nombre_producto varchar,

v_clave_producto number,

v_descripcion varchar,

v_costo number,

v_precio number,

v_existencia number,

v_id_categoria varchar

)

as

begin

update productos set

nombre_producto=(v_nombre_producto),descripcion=(v_descripcion),costo=(v_c

osto),precio=(v_precio),existencia=(v_existencia),id_categoria=(v_id_categ

oria)

where clave_producto=v_clave_producto;

end;

DDL para ejecutar el procedimiento anterior. begin

pa_modificar_producto ('diesel', 120690, 'perfume extractos cítricos',

1100, 2700, 450, '335678');

end;

Enseguida vemos los cambios que se realizaron con los DDL anteriores.

Page 62: vistas procedimientos y funciones BD

62

6. DDL del procedimiento para eliminar un producto existente create or replace procedure pa_eliminar_producto (

v_clave_producto number

)

as

begin

delete from productos where clave_producto=v_clave_producto;

end; DDL para ejecutar la eliminación del producto. begin

pa_eliminar_producto(125690);

end;

La tabla modificada queda de la siguiente manera.

Page 63: vistas procedimientos y funciones BD

63

DDL de procedimientos para la tabla de clientes 7. DDL de procedimiento para agregar nuevo cliente con todos sus campos.

create or replace

procedure pa_agregar_clientes

(

v_clave_cliente number,

v_rfc varchar,

v_razon_social varchar,

v_calle_no varchar,

v_colonia varchar,

v_ciudad varchar,

v_estado varchar,

v_e_mail varchar,

v_telefono varchar

)

as

begin

insert into clientes

(clave_cliente,rfc,razon_social,calle_no,colonia,ciudad,estado,e_mail,tele

fono)

values (v_clave_cliente,v_rfc,v_razon_social, v_calle_no, v_colonia,

v_ciudad, v_estado, v_e_mail,v_telefono);

Page 64: vistas procedimientos y funciones BD

64

dbms_output.put_line('Registro agregado correctamente revisar tabla

categorias');

end; DDL para llamar el procedimiento de insertar clientes. begin

pa_agregar_clientes(133333,'HESA910510','WEBMASTERING','BENITO JUAREZ

100','BENITO JUAREZ','DURANGO','DURANGO','[email protected]','675-

123-34-50');

end;

La tabla queda de la siguiente manera.

8. DDL del procedimiento para modificar un cliente existente. create or replace

procedure pa_actualizar_clientes(

v_clave_cliente number,

v_rfc varchar,

v_razon_social varchar,

Page 65: vistas procedimientos y funciones BD

65

v_calle_no varchar,

v_colonia varchar,

v_ciudad varchar,

v_estado varchar,

v_e_mail varchar,

v_telefono varchar

) as

begin

update clientes set rfc=(v_rfc), razon_social=(v_razon_social),

calle_no=(v_calle_no), colonia=(v_colonia), ciudad=(v_ciudad),

estado=(v_estado), e_mail=(v_e_mail), telefono=(v_telefono)

where clave_cliente=(v_clave_cliente);

dbms_output.put_line('EL REGISTRO SE ACTUALIZO CORRECTAMENTE');

end; DDL para ejecutar el DDL anterior. begin

pa_actualizar_clientes(133333,'HESA910510','LABORATORIOS CLINICOS SA.de

C.V','BENIGNO MONTOYA 124','MURIENDO

LENTO','CHIHUAHUA','CHIHUAHUA','[email protected]','618-129-65-57');

end;

la tabla anteriormente estaba asi:

Page 66: vistas procedimientos y funciones BD

66

Al ejecutar los DDL anteriores nos queda como se muestra a continuación:

9. DDL del procedimiento para eliminar un cliente existente. create or replace

procedure pa_eliminar_clientes

(

v_clave_cliente varchar

)

as

begin

delete clientes where clave_cliente=v_clave_cliente;

dbms_output.put_line('EL REGISTRO SE ELIMINO CORRECTAMENTE');

end; El DDL para ejecutarlo es: begin

pa_eliminar_clientes(133333);

end;

Page 67: vistas procedimientos y funciones BD

67

La tabla antes y después de los DDL

DDL de los procedimientos de la tabla empleados 10. DDL para el procedimiento de agregar nuevo empleado con todos sus

campos. create or replace procedure pa_agregar_empleado

( v_no_empleado number,

v_paterno varchar,

v_materno varchar,

v_nombre varchar,

Page 68: vistas procedimientos y funciones BD

68

v_fecha_nacimiento date,

v_sueldo number,

v_sexo char,

v_puesto number

)

as

begin

insert into empleados( no_empleado, paterno, materno, nombre, sexo,

fecha_nacimiento, sueldo, puesto)

values(v_no_empleado,v_paterno,v_materno,v_nombre,v_sexo,v_fecha_nacimient

o,v_sueldo,v_puesto);

end; DDL para ejecutar el anterior. begin

pa_agregar_empleado( ( 1234, 'GOMEZ', 'PEREZ', 'LUIS', '12/09/1988', 2789,

'M', 89060);

end;

Page 69: vistas procedimientos y funciones BD

69

11. DDL del procedimiento para modificar un empleado existente.

create or replace

procedure pa_modificar_empleado

(

v_no_empleado number,

v_paterno varchar,

v_materno varchar,

v_nombre varchar,

v_fecha_nacimiento date,

v_sueldo number,

v_sexo char,

v_puesto number

) as

begin

update empleados set

paterno=(v_paterno),materno=(v_materno),nombre=(v_nombre),fecha_nacimiento

=(v_fecha_nacimiento),sueldo=(v_sueldo),sexo=(v_sexo),puesto=(v_puesto)

where no_empleado=(v_no_empleado);

dbms_output.put_line('EL REGISTRO SE ACTUALIZO CORRECTAMENTE');

end; DDL para ejecutar

Page 70: vistas procedimientos y funciones BD

70

12. DDL del procedimiento para eliminar un empleado existente.

create or replace

procedure pa_eliminar_empleado

(

v_no_empleado number

) as

begin

delete empleados where no_empleado=v_no_empleado;

dbms_output.put_line('EL REGISTRO SE ELIMINO CORRECTAMENTE');

end; DDL para ejecución.

Page 71: vistas procedimientos y funciones BD

71

Resultados.

DDL para los procedimientos de la tabla de puestos 13. Procedimiento para agregar nuevo puesto.

create or replace

procedure pa_agregar_puesto

(

v_puesto number,

v_nombre varchar,

v_sueldo_base number

)

as

begin

insert into puestos (puesto,nombre,sueldo_base)

values ( v_puesto,v_nombre,v_sueldo_base);

dbms_output.put_line('Registro agregado correctamente revisar tabla

categorias');

end; DDL para ejecutarlo.

Page 72: vistas procedimientos y funciones BD

72

14. Procedimiento para modifica un puesto existente.

create or replace

procedure pa_actualizar_puestos

(

v_puesto number,

v_nombre varchar,

v_sueldo_base number

) as

begin

update puestos set nombre=(v_nombre),sueldo_base=(v_sueldo_base)

where puesto=(v_puesto);

dbms_output.put_line('EL REGISTRO SE ACTUALIZO CORRECTAMENTE');

end;

DDL para ejecución.

Page 73: vistas procedimientos y funciones BD

73

15. Procedimiento para eliminar un puesto existente. create or replace

procedure pa_eliminar_puestos

(

v_puesto varchar

)

as

begin

delete puestos where puesto=v_puesto;

Page 74: vistas procedimientos y funciones BD

74

dbms_output.put_line('EL REGISTRO SE ELIMINO CORRECTAMENTE');

end;

DDL para los procedimientos de la tabla de ventas. 16. Procedimiento para agregar nueva venta.

create or replace procedure pa_agregar_venta

(

--v_consecutivo_ventas number,

v_fecha date,

v_clave_cliente number,

v_no_empleado number,

v_total number

Page 75: vistas procedimientos y funciones BD

75

)

as

begin

insert into

ventas(consecutivo_ventas,fecha,clave_cliente,no_empleado,total)

values(sq_consecutivo_ventas.nextval,v_fecha,v_clave_cliente,v_no_empleado

,v_total);

end;

Para ejecutar el DDL anterior se emplea otro como se muestra a continuación.

Los resultados se muestran a continuación.

17. Procedimiento para modifica una venta existente.

create or replace

procedure pa_actualizar_ventas(

v_consecutivo_ventas number,

Page 76: vistas procedimientos y funciones BD

76

v_fecha date,

v_clave_cliente number,

v_no_empleado number

) as

begin

update ventas set

fecha=(v_fecha),clave_cliente=(v_clave_cliente),no_empleado=(v_no_empleado

)

where consecutivo_ventas=(v_consecutivo_ventas);

dbms_output.put_line('EL REGISTRO SE ACTUALIZO CORRECTAMENTE');

end;

DDL y resultados de la ejecución.

18. Procedimiento para eliminar una venta existente.

create or replace

procedure pa_eliminar_ventas

( v_consecutivo_ventas varchar)

as

begin

delete ventas where consecutivo_ventas=v_consecutivo_ventas;

dbms_output.put_line('EL REGISTRO SE ELIMINO CORRECTAMENTE');

end

Page 77: vistas procedimientos y funciones BD

77

Ejecución del DDL y resultados.

DDL PARA PROCEDIMIENTOS DE LA TABLA DETALLE_VENTAS 19. Procedimiento para agregar un nuevo detalle_ventas.

create or replace procedure pa_agregar_detalle_ventas

( v_consecutivo_ventas number,

v_clave_producto number,

v_cantidad number,

v_precio number

)

as

v_importe number;

v_total number;

begin

v_importe:= (v_cantidad * v_precio);

insert into detalle_venta (consecutivo_ventas,clave_producto,cantidad,precio,importe) values(v_consecutivo_ventas,v_clave_producto,v_cantidad,v_precio,v_importe);

select sum(importe) into v_total

from detalle_venta

where consecutivo_ventas = v_consecutivo_ventas;

Page 78: vistas procedimientos y funciones BD

78

update ventas

set ventas.total = v_total-- variable

where ventas.consecutivo_ventas = v_consecutivo_ventas;

end;

Para mandar llamar este procedimiento se necesita lo siguiente.

begin

pa_agregar_detalle_ventas(115, 125690,2,22);

pa_agregar_detalle_ventas(115,120690,3,1050);

pa_agregar_detalle_ventas(115,235690,5,200);

pa_agregar_detalle_ventas(116,550088,9,200);

pa_agregar_detalle_ventas(116,553377,1,600);

pa_agregar_detalle_ventas(116,235690,2,200);

pa_agregar_detalle_ventas(117, 770088,1,3500);

pa_agregar_detalle_ventas(117,220022,2,58);

pa_agregar_detalle_ventas(117,330033,3,62);

Page 79: vistas procedimientos y funciones BD

79

pa_agregar_detalle_ventas(118,667799,2,800);

pa_agregar_detalle_ventas(118,220022,2,58);

pa_agregar_detalle_ventas(118,440033,5,60);

pa_agregar_detalle_ventas(119,550088,9,200);

pa_agregar_detalle_ventas(119,447799,2,40);

pa_agregar_detalle_ventas(119,667799,1,230);

pa_agregar_detalle_ventas(120, 6654321,1,5000);

pa_agregar_detalle_ventas(120,112277,2,60);

pa_agregar_detalle_ventas(120,223344,1,46);

pa_agregar_detalle_ventas(121,550088 ,1,45);

pa_agregar_detalle_ventas(121,33441277,1,2500);

pa_agregar_detalle_ventas(121,2244778800,1,65);

pa_agregar_detalle_ventas(121,551122007 ,1,600);

pa_agregar_detalle_ventas(121,661122005,3,22);

pa_agregar_detalle_ventas(121,66002244,1,500);

end;

Después de mandar llamar el código la tabla de detalle_ventas nos queda de la siguiente

manera.

Page 80: vistas procedimientos y funciones BD

80

Al ejecutar el DDL principal automáticamente se llena el campo de importe de la tabla de ventas, así nuestra tabla queda de la siguiente manera.

20. Procedimiento para actualizar o modificar un detalle de venta.

create or replace procedure pa_actualizar_detalle_ventas

( v_consecutivo_ventas number,

v_clave_producto number,

v_cantidad number,

v_precio number

)

as

v_importe number;

v_total number;

begin

v_importe:= (v_cantidad * v_precio);

update detalle_venta set clave_producto=v_clave_producto,

cantidad=v_cantidad, precio=v_precio, importe=v_importe

where consecutivo_ventas = v_consecutivo_ventas;

select sum(importe) into v_total

from detalle_venta

Page 81: vistas procedimientos y funciones BD

81

where consecutivo_ventas = v_consecutivo_ventas;

update ventas

set ventas.total = v_total-- variable

where ventas.consecutivo_ventas = v_consecutivo_ventas;

end; El procedimiento para ejecutar y los resultados se muestran a continuación.

DDL de los procedimientos de la tabla de facturas

21. Procedimiento para agregar nueva factura. create or replace procedure pa_agregar_factura

(

v_no_factura number,

v_fecha date,

v_rfc varchar,

v_consecutivo_ventas number

)

as

begin

insert into facturas(no_factura,fecha,consecutivo_ventas,rfc)

values(v_no_factura,v_fecha,v_consecutivo_ventas,v_rfc);

end; Para poder ejecutar este código es necesario realizar el siguiente. begin

pa_agregar_factura ( 9393, '04/09/2012','HESA34574',4658);

end;

Page 82: vistas procedimientos y funciones BD

82

22. Procedimiento para modifica una factura existente. create or replace procedure pa_agregar_factura

(

v_no_factura number,

v_fecha date,

v_rfc varchar,

v_consecutivo_ventas number

)

as

begin

delete from facturas where no_factura=v_no_factura;

update facturas set fecha=(v_fecha), rfc=(v_rfc),

consecutivo_ventas=(v_consecutivo_ventas)

where no_factura=(v_no_factura);

end; Ejecución y resultados. begin

pa_agregar_factura ( 13006,'12/04/2012','HESA910510',119);

end;

Page 83: vistas procedimientos y funciones BD

83

23. Procedimiento para eliminar una factura existente. create or replace

procedure pa_eliminar_factura

(

v_no_factura number

)

as

begin

delete facturas where no_factura=v_no_factura;

dbms_output.put_line('EL REGISTRO SE ELIMINO CORRECTAMENTE');

end; Ejecusion y resultados.

La tabla antes del DDL.

Page 84: vistas procedimientos y funciones BD

84

La tabla después del DDL

DDL para procedimiento de la tabla bitácora 24. Se almacenan los registros automáticamente utilizando disparadores. Al emplear disparadores la tabla de bitácora se irá actualizando después de agregar, modificar o eliminar algún elemento de las tablas creadas anteriormente. A continuación podemos observar cómo queda nuestra tabla después de haber realizado algunas operaciones en los campos.

PASO 5 CREAR FUNCIONES

Las Funciones de Bases de Datos permiten hacer operaciones sobre valores de una base de dato.

Page 85: vistas procedimientos y funciones BD

85

DDL para la función de la tabla categoría.

1. Función para contar cuantas categorías se tienen. create or replace function fn_cuantas_categorias

return number

as

vcategorias number;

begin

select count(*)

into vcategorias

from categorias;

return vcategorias;

end; Es necesario ejecutar y así saber la cantidad de categorías que se tienen. Para ello necesitamos lo siguiente. declare

cuantas_cat number;

begin

cuantas_cat :=fn_cuantas_categorias;

dbms_output.put_line('el numero total de categorias es: ' || cuantas_cat);

end; El resultado que obtendremos es el siguiente.

DDL para las funciones de la tabla productos 2. Función para desplegar el promedio de costos de todos los productos.

create or replace

function fn_cuantos_productos (v_id_categoria varchar)

return number

as

c_productos number;

begin

Page 86: vistas procedimientos y funciones BD

86

select count(existencia) into c_productos from productos where id_categoria=

v_id_categoria;

return c_productos;

end; ahora realizaremos la ejecución con el siguiente código. declare

cuantas number;

begin

cuantas :=fn_cuantos_productos (112277);

dbms_output.put_line('el numero total de productos es: ' || cuantas);

end; El resultado que se muestra es:

3. Función para conocer cuántos productos existen. create or replace function fn_suma_costo

return number

as

vcosto number;

begin

select sum(costo)

into vcosto

from productos;

return vcosto;

end;

la ejecusion y los resultados se muestran a continuación: declare

suma_cost number;

begin

suma_cost :=fn_suma_costo;

dbms_output.put_line('la suma de los costos es: ' || suma_cost);

end;

Page 87: vistas procedimientos y funciones BD

87

4. Función para desplegar el total de costos de todos los productos create or replace function fn_prom_cost_productos

return number

as

vcosto number;

vcantidad number;

vsuma number;

begin

select count(costo)

into vcantidad

from productos;

select sum(costo)

into vcosto

from productos;

vsuma:= vcosto/vcantidad;

return vsuma;

end;

nuestra ejecusion la realizaremos de la siguiente manera. declare

promedio_costo number;

begin

promedio_costo :=fn_prom_cost_productos;

dbms_output.put_line('el promedio de costos es: ' || promedio_costo);

end; el resultado que debe aparecer es el siguiente:

Page 88: vistas procedimientos y funciones BD

88

DDL para realizar la fincion de la tabla clientes 5. Función para saber cuántos clientes hay. create or replace

function fn_cuantos_clientes

return number

as

cuantos number;

begin

select count(*)

into cuantos

from clientes;

return cuantos;

end; para poder tener el resultado correcto necesitamos de algo como lo siguiente. declare

cantidad number;

begin

cantidad :=fn_cuantos_clientes;

dbms_output.put_line('LA CANBTIDAD DE CLIENTES ES DE: ' || cantidad);

end;

6. Función para conocer el nombre completo de un cliente.

Page 89: vistas procedimientos y funciones BD

89

create or replace function fn_nombre_empleados(v_sno_empleado number)

return varchar

as

v-materno varchar;

v_paterno varchar;

v_nombre varchar;

begin

select paterno,materno,nombre into v_total

from empleados

where v_no_empleado=no_empleado;

dbms_output.put_line('nombre completo '||v_paterno1||'

'||v_materno||' '||v_nombre);

returm 'm';

end; DDL para ejecutar y resultados. declare

nombre number;

begin

nombre:=fn_nombre_empleados(18302);

end;

DDL para realizar la fincion de la tabla empleados

7. Función para conocer cuántos empleados ganan o tienen un sueldo mayor

o superior a un proporcionado. El sueldo se proporciona como argumento en la función y ésta devuelve cuántos empleados ganan igual o superior. create or replace function fn_cuantos_empleados(v_sueldo number)

return number

as

agnioventa number;

v_total number;

Page 90: vistas procedimientos y funciones BD

90

begin

select count (suedo) into v_total

from empleados

where v_total=<v_sueldo;

dbms_output.put_line('los empleados con menor sueldo son

'||v_total);

select count (sueldo) into v_total

from empleados

where v_total=>v_sueldo;

dbms_output.put_line('los empleados con mayor sueldo son

'||v_totall);

return 0;

end; DDL para la ejecución.

declare

cantidadtotal number;

begin

cantidadtotal:=fn_cuantos_empleados(2700);

end;

8. Función para conocer los años cumplidos de un empleado. create or replace function fn_cuantos_agnios_emp(v_no_empleado varchar)

return number

as

v_fecha_nacimiento number; --año nacimiento

agnio_ac number; --año actual

edad number;

begin

agnio_ac :=2012;

select extract(YEAR FROM fecha_nacimiento) --convierte la fecha de nac. en

caracter

into v_fecha_nacimiento

from empleados

Page 91: vistas procedimientos y funciones BD

91

where no_empleado=v_no_empleado;

edad := (agnio_ac - v_fecha_nacimiento);

return edad;

end;

para poder ejecutarla necesitamos lo siguiente. begin

dbms_output.put_line(fn_cuantos_agnios_emp('18309'));

end;

9. Función para conocer cuántos empleados son del sexo Masculino ó del sexo femenino. La función debe recibir el parámetro del sexo para conocer cuántos

empleados hay de cada sexo según sea el caso. create or replace

function fn_sexo_empleados(vsexo char)

return number

as

vempleados number;

begin

select count(*)

into vempleados

from empleados

where sexo = vsexo;

return vempleados;

end; El siguiente código lo emplearemos para ejecuterlo. declare

cuantos number;

begin

cuantos := fn_sexo_empleados ('M');

dbms_output.put_line('Alumnos hombres son '|| cuantos);

cuantos := fn_sexo_empleados ('F');

Page 92: vistas procedimientos y funciones BD

92

dbms_output.put_line('Alumnos mujeres son '|| cuantos);

end;

DDL para realizar la fincion de la tabla puestos 10. Función para conocer Cuántos puestos hay create or replace

function fn_cuantos_puestos

return number

as

cuantos_puestos number;

begin

select count(*)

into cuantos_puestos

from puestos;

return cuantos_puestos;

end; lo siguiente no s permitirá ejecutar y saber el resultado. declare

cuant_puestos number;

begin

cuant_puestos :=fn_cuantos_puestos;

dbms_output.put_line('EL NUMERO TOTAL DE PUESTOS ES: ' || cuant_puestos);

end;

DDL para realizar la fincion de la tabla ventas 11. Función para conocer el total de todas las ventas que se hicieron de un año en

particular.

Page 93: vistas procedimientos y funciones BD

93

create or replace function fn_total_ventasagnio(v_agnio number)

return number

as

agnioventa number;

v_total number;

begin

select to_number(substr(to_char(fecha, 'dd/mm/yyyy'),7,4)) --convierte

la fecha de nac. en caracter

into agnioventa

from ventas

where agnioventa=v_agnio;

select sum(total) into v_total from ventas

where agnioventa=v_agnio;

return v_total;

end;

DDL para ejecutar y resultados. declare

cantidadtotal number;

begin

cantidadtotal:=fn_total_ventasagnio(2012);

dbms_output.put_line('total de las ventas en el año: '||cantidadtotal);

end;

12. Función para conocer el total de ventas de un cliente en particular. create or replace function fn_cuantas_ventas(v_clave_cliente varchar) return number

as

v_total number;

begin

select sum(total) into v_total from ventas where

clave_cliente=v_clave_cliente;

return v_total;

end;

Page 94: vistas procedimientos y funciones BD

94

A continuacion se muestra el código de ejecución y los resultados declare

cuantas_cat1 number;

begin

cuantas_cat1 :=fn_cuantas_ventas(1000);

dbms_output.put_line('EL NUMERO TOTAL DE LAS VENTAS ES: ' ||

cuantas_cat1);

end;

DDL para realizar la fincion de la tabla detalle_ventas 13. Función para conocer de un producto cuantas veces se ha vendido. create or replace function fn_cuantas_veces(v_clave_producto number)

return number

as

v_total1 number;

begin

select count(cantidad) into v_total1 from detalle_venta where

clave_producto=v_clave_producto;

return v_total1;

end; En seguida se encuentra la ejecución y los resultados declare

cuantas_cat2 number;

begin

cuantas_cat2 :=fn_cuantas_veces(120690);

dbms_output.put_line('el numero total vendido del producto es: '

|| cuantas_cat2);

end;

Page 95: vistas procedimientos y funciones BD

95

DDL para realizar la fincion de la tabla facutras 14. Función que devuelve cuántas facturas son de un día en particular y el total

de ellas. create or replace function fn_total_facturasdia(v_fecha date)

return numeric

as

v_dia date;

cantidad number;

begin

select sum(total)

into v_dia

from ventas

where fecha = v_fecha;

dbms_output.put_line('cantidad total: '||v_dia);

select count(no_factura)

into cantidad

from facturas

where fecha = v_fecha;

dbms_output.put_line('total de factura: '||cantidad);

return 0;

end; lo siguiente es para ejecutar. declare

cuantos date;

begin

cuantos:=fn_total_facturasdia(21/05/1990);

dbms_output.put_line(cuantos);

end;

Page 96: vistas procedimientos y funciones BD

96

DDL para realizar la fincion de la tabla facutras 15. Función que devuelve cuantas operaciones existen o se han hecho sobre una

tabla en particular. create or replace function fn_cuantas_funciones(v_tabla varchar)

return number

as

v_total1 number;

begin

select count(operacion) into v_total1 from bitacora where tabla=v_tabla;

return v_total1;

end; ejecutaremos para observar los resultados declare

cuantas number;

begin

cuantas :=fn_cuantas_funciones('CATEGORIAS');

dbms_output.put_line('EL NUMERO TOTAL DE OPERACIONES DE LA TABLA ES: '

|| cuantas);

end;

PASO 6 CREAR DISPARADORES Crear tres disparadores para cada tabla.

Para cada tabla cuando se registre una alta almacenar el movimiento

en la tabla bitácora. A Alta para insert

Page 97: vistas procedimientos y funciones BD

97

Para cada tabla cuando se registre una alta almacenar el movimiento

en la tabla bitácora. B Alta para delete

Para cada tabla cuando se registre una alta almacenar el movimiento

en la tabla bitácora. M Modificación para update.

Tabla Disparadores

Categorías 1. Cuando se registre un nuevo registro almacenar en bitácora. 2. Cuando se elimine un registro registrar en bitácora 3. Cuando se modifique o actualice un registro almacenar en

bitácora.

Productos 4. Cuando se registre un nuevo registro almacenar en bitácora. 5. Cuando se elimine un registro registrar en bitácora 6. Cuando se modifique o actualice un registro almacenar en

bitácora.

Clientes 7. Cuando se registre un nuevo registro almacenar en bitácora. 8. Cuando se elimine un registro registrar en bitácora 9. Cuando se modifique o actualice un registro almacenar en

bitácora.

Empleados 10. Cuando se registre un nuevo registro almacenar en bitácora. 11. Cuando se elimine un registro registrar en bitácora 12. Cuando se modifique o actualice un registro almacenar en

bitácora.

Puestos 13. Cuando se registre un nuevo registro almacenar en bitácora. 14. Cuando se elimine un registro registrar en bitácora 15. Cuando se modifique o actualice un registro almacenar en

bitácora.

Ventas 16. Cuando se registre un nuevo registro almacenar en bitácora. 17. Cuando se elimine un registro registrar en bitácora 18. Cuando se modifique o actualice un registro almacenar en

bitácora.

Detalle_Ventas 19. Cuando se registre un nuevo registro almacenar en bitácora. 20. Cuando se modifique o actualice un registro almacenar en

bitácora.

Facturas 21. Cuando se registre un nuevo registro almacenar en bitácora. 22. Cuando se elimine un registro registrar en bitácora 23. Cuando se modifique o actualice un registro almacenar en

bitácora.

Bitácora

DISPARADORES DE LA TABLA DE CATEGORÍAS

Un disparador (o trigger) es un tipo especial de procedimiento

almacenado asociado a una tabla que se ejecuta al realizar una operación “básica”

(insert, un delete o un update) sobre ésta. La operación básica que despierta al

Page 98: vistas procedimientos y funciones BD

98

trigger es conocida como sentencia disparadora. La ejecución del disparador puede

ser antes (before) o después (after) de llevar a cabo la sentencia disparadora.

A continuación crearemos disparadores para que después de la sentencia se

actualice la tabla de bitácora.

1. DDL del disparador1: Cuando se inserte un nuevo registro en la tabla de

categorías almacenar en bitácora. create or replace trigger tr_bit_agregar_categorias

after insert on categorias

for each row

declare

v_fecha date;

begin

select sysdate into v_fecha

from dual;

insert into

bitacora(consecutivo_bitacora,fecha,tabla,operacion,campo_afectado)

values(sq_consecutivo_bitacora.nextval,v_fecha,'categorias','a',:new.id_ca

tegoria);

end;

Ejecución del DDL del disparador1 insertar

Page 99: vistas procedimientos y funciones BD

99

Para poder observar el funcionamiento del disparador es necesario realizar una inserción en la tabla de categorías y posteriormente revisar la tabla de bitácora.

Como se muestra a continuación.

Primero insertamos una nueva categoría.

Y posteriormente revisamos la tabla de bitácora y queda de la siguiente manera. En donde el registro que agregamos a la tabla categorías esta marcado con el recuadro amarillo.

Page 100: vistas procedimientos y funciones BD

100

2. DDL del disparador 2: Cuando se actualice o modifique un registro

existente de la tabla de categorías almacenar en bitácora. --DISPARADOR PARA MODIFICAR CATEGORIAS Y LLENAR BITACORA create or replace trigger tr_bit_modificar_categoria after update on categorias for each row declare v_fecha date; begin select sysdate into v_fecha from dual; insert into bitacora(consecutivo_bitacora,fecha,tabla,operacion,campo_afectado) values(sq_consecutivo_bitacora.nextval,v_fecha,'CATEGORIAS','M',:old.id_categoria); dbms_output.put_line('SE HA MODIFICADO EN CATEGORIAS CHECAR LA BITACORA'); end; Ejecución del DDL del disparador2 modificar

Page 101: vistas procedimientos y funciones BD

101

Después de esto

realizamos un update sobre la tabla de categorías y empleando

la salida del dbms nos indica que chequemos la bitácora.

Revisamos la bitácora y se encuentra registrada la operación M que representa el update que realizamos sobre la tabla de categorías.

Page 102: vistas procedimientos y funciones BD

102

3. DDL del disparador 3: Cuando se elimine registro existente de la tabla de categorías almacenar en bitácora. create or replace

TRIGGER TR_BIT_ELIMINAR_CATEGORIAS

after delete on categorias

for each row

declare

v_fecha date;

begin

select sysdate into v_fecha

from dual;

insert into

bitacora(consecutivo_bitacora,fecha,tabla,operacion,campo_afectado)

values(sq_consecutivo_bitacora.nextval,v_fecha,'CATEGORIAS','B',:old.id_ca

tegoria);

end;

Ejecución del DDL del disparador 3 eliminar

Al realizar una operación delete sobre la tabla de

categorías se registra en bitácora. Por ejemplo

eliminaremos la categoría que tiene el id_ categoría

marcado en azul.

Page 103: vistas procedimientos y funciones BD

103

Después de realizar una baja de categorías se registra en la bitácora

Resultado en la bitácora después de la

operación delete.

DISPARADORES DE LA TABLA DE PRODUCTOS

4. DDL del disparador4: Cuando se inserte un nuevo registro en la tabla de productos almacenar en bitácora.

--DISPARADOR PARA INSERTAR EN PRODUCTOS Y LLENAR BITACORA

create or replace trigger tr_bit_agregar_productos

after insert on productos

for each row

declare

v_fecha date;

Page 104: vistas procedimientos y funciones BD

104

begin

select sysdate into v_fecha

from dual;

insert into bitacora(consecutivo_bitacora,fecha,tabla,operacion,campo_afectado)

values(sq_consecutivo_bitacora.nextval,v_fecha,'PRODUCTOS','A',:new.clave_produc

to);

dbms_output.put_line('SE HA INSERTADO EN PRODUCTOS CHECAR LA BITACORA');

end;

Ejecución del DDL del disparador 4 insertar

Realizamos una inserción en productos

begin

insert into

productos(clave_producto,nombre_producto,descripcion,costo,precio,existencia,id_

categoria)

values(777888999,'PAN CALCETIN','PAN DE DULCE ',4,5,50,'1100779');

end;

Y se puede observar en la tabla de bitácora

5. DDL del disparador5: Cuando se modifique un registro en la tabla de

productos almacenar en bitácora. --DISPARADOR PARA MODIFICAR PRODUCTOS Y LLENAR BITACORA

create or replace trigger tr_bit_modificar_productos

after update on productos

Page 105: vistas procedimientos y funciones BD

105

for each row

declare

v_fecha date;

begin

select sysdate into v_fecha

from dual;

--select sq_consecutivo_bitacora.nextval,

--sq_consecutivo_bitacora.currval

--from dual;

insert into

bitacora(consecutivo_bitacora,fecha,tabla,operacion,campo_afectado)

values(sq_consecutivo_bitacora.nextval,v_fecha,'CLIENTES','M',:old.

clave_producto);

dbms_output.put_line('SE HA MODIFICADO EN PRODUCTOS CHECAR LA

BITACORA');

end; Ejecución del disparador 5 modificar

Page 106: vistas procedimientos y funciones BD

106

Update sobre la tabla de productos

Bitácora después del update sobre la tabla de productos.

6. DDL del disparador 6: Cuando se elimine un registro en la tabla de

productos almacenar en bitácora. --5. Cuando se elimine un registro registrar en bitácora

create or replace

TRIGGER TR_BIT_ELIMINAR_PRODUCTOS

after delete on productos

for each row

declare

Page 107: vistas procedimientos y funciones BD

107

v_fecha date;

begin

select sysdate into v_fecha

from dual;

insert into

bitacora1(consecutivo_bitacora,fecha,tabla,operacion,campo_afectado)

values(sq_consecutivo_bitacora.nextval,v_fecha,'PRODUCTOS','B',:old.clave_

producto);

end;

Ejecución del DDL del disparador 6 eliminar delete productos where clave_producto=330033; Tabla de bitácora después de la operación delete

DISPARADORES DE LA TABLA DE CLIENTES

7. DDL del disparador 7: Cuando se inserte un registro en la tabla de

clientes almacenar en bitácora. Como hemos visto en los procedimientos anteriores realizamos una inserción en la tabla de clientes y observamos el resultado en la tabla de

bitácora.

Page 108: vistas procedimientos y funciones BD

108

create or replace trigger tr_bit_agregar_clientes

after insert on clientes

for each row

declare

v_fecha date;

begin

select sysdate into v_fecha

from dual;

insert into

bitacora(consecutivo_bitacora,fecha,tabla,operacion,campo_afectado)

values(sq_consecutivo_bitacora.nextval,v_fecha,'CLIENTES','A',:new.clave_c

liente);

end;

Realizamos una inserción y en bitácora podemos ver el resultado.

8. DDL del disparador 8: Cuando se modifique un registro en la tabla de clientes almacenar en bitácora.

create or replace trigger tr_bit_modificar_clientes

after update on clientes

for each row

Page 109: vistas procedimientos y funciones BD

109

declare

v_fecha date;

begin

select sysdate into v_fecha

from dual;

insert into

bitacora(consecutivo_bitacora,fecha,tabla,operacion,campo_afectado)

values(sq_consecutivo_bitacora.nextval,v_fecha,'CLIENTES','M',:old.clave_c

liente);

dbms_output.put_line('SE HA MODIFICADO EN CLIENTES CHECAR LA BITACORA');

end;

Después de realizar un update sobre la tabla de clientes podemos ver que

se sigue llenando la tabla de bitácora ya que cada vez que realizamos una operación el disparador se activa y llena automáticamente la bitácora.

9. DDL del disparador 9: Cuando se elimine un registro en la tabla de

clientes almacenar en bitácora

create or replace

TRIGGER TR_BIT_ELIMINAR_CLIENTES

after delete on clientes

Page 110: vistas procedimientos y funciones BD

110

for each row

declare

v_fecha date;

begin

select sysdate into v_fecha

from dual;

insert into

bitacora(consecutivo_bitacora,fecha,tabla,operacion,campo_afectado)

values(sq_consecutivo_bitacora.nextval,v_fecha,'CLIENTES','B',:old.clave_c

liente);

end;

Delete de un cliente

delete clientes where clave_cliente=5555566666;

Después de realizar un delete sobre la tabla la bitácora queda de la

siguiente manera.

DISPARADORES DE LA TABLA DE EMPLEADOS

10. DDL del disparador 10: Cuando se inserte un registro en la tabla de empleados almacenar en bitácora.

Page 111: vistas procedimientos y funciones BD

111

--DISPARADOR PARA INSERTAR EN EMPLEADOS Y LLENAR BITACORA

create or replace trigger tr_bit_agregar_empleados

after insert on empleados

for each row

declare

v_fecha date;

begin

select sysdate into v_fecha

from dual;

insert into

bitacora(consecutivo_bitacora,fecha,tabla,operacion,campo_afectado)

values(sq_consecutivo_bitacora.nextval,v_fecha,'EMPLEADOS','A',:new.no_emp

leado);

dbms_output.put_line('SE HA INSERTADO EN EMPLEADOS CHECAR LA BITACORA');

end;

Después de realizar una inserción sobre la tabla de empleados la bitácora

queda de la siguiente manera.

11. DDL del disparador 11: Cuando se modifique un registro existente de la tabla de empleados almacenar en bitácora. --DISPARADOR PARA MODIFICAR EMPLEADOS Y LLENAR BITACORA

Page 112: vistas procedimientos y funciones BD

112

create or replace trigger tr_bit_modificar_empleados

after update on empleados

for each row

declare

v_fecha date;

begin

select sysdate into v_fecha

from dual;

insert into

bitacora(consecutivo_bitacora,fecha,tabla,operacion,campo_afectado)

values(sq_consecutivo_bitacora.nextval,v_fecha,'EMPLEADOS',

'M',:old.no_empleado);

dbms_output.put_line ('SE HA MODIFICADO EN EMPLEADOS CHECAR LA BITACORA');

end;

Después de realizar la operación update sobre la tabla de empleados la

bitácora se ve de la siguiente manera.

12. DDL del disparador 12: Cuando se elimine un registro en la tabla de

empleados almacenar en bitácora

create or replace

TRIGGER TR_BIT_ELIMINAR_EMPLEADOS

Page 113: vistas procedimientos y funciones BD

113

after delete on empleados

for each row

declare

v_fecha date;

begin

select sysdate into v_fecha

from dual;

insert into

bitacora1(consecutivo_bitacora,fecha,tabla,operacion,campo_afectado)

values(sq_consecutivo_bitacora.nextval,v_fecha,'EMPLEADOS','B',:old.no_emp

leado);

end;

Ejecución del DDL del disparador 12 eliminar empleados

delete empleados where no_empleado=222333444;

Bitácora después del delete en empleados

DISPARADORES DE LA TABLA DE PUESTOS

13. DDL del disparador 13: Cuando se inserte un registro en la tabla de puestos almacenar en bitácora.

--DISPARADOR PARA INSERTAR EN PUESTOS Y LLENAR BITACORA

Page 114: vistas procedimientos y funciones BD

114

create or replace trigger tr_bit_agregar_puestos

after insert on puestos

for each row

declare

v_fecha date;

begin

select sysdate into v_fecha

from dual;

insert into

bitacora(consecutivo_bitacora,fecha,tabla,operacion,campo_afectado)

values(sq_consecutivo_bitacora.nextval,v_fecha,'PUESTOS','A',:new.puesto);

dbms_output.put_line('SE HA INSERTADO EN PUESTOS CHECAR LA BITACORA');

end;

Después de realizar un insert sobre la tabla de puestos la bitácora

queda de la siguiente manera.

14. DDL del disparador 14: Cuando se modifique un registro existente de la tabla de puestos almacenar en bitácora. --DISPARADOR PARA MODIFICAR PUESTOS Y LLENAR BITACORA

create or replace trigger tr_bit_modificar_puesto

after update on puestos

Page 115: vistas procedimientos y funciones BD

115

for each row

declare

v_fecha date;

begin

select sysdate into v_fecha

from dual;

insert into

bitacora(consecutivo_bitacora,fecha,tabla,operacion,campo_afectado)

values(sq_consecutivo_bitacora.nextval,v_fecha,'PUESTOS','M',:old.puesto);

dbms_output.put_line('SE HA MODIFICADO EN PUESTOS CHECAR LA BITACORA');

end;

Después de modificar un registro de puestos la bitácora queda como se muestra a continuación:

update puestos set nombre=('FERRETERO'),sueldo_base=(850)

where puesto=112233445;

15. DDL del disparador 15: Cuando se elimine un registro en la tabla de

puestos almacenar en bitácora

create or replace

Page 116: vistas procedimientos y funciones BD

116

TRIGGER TR_BIT_ELIMINAR_PUESTOS

after delete on puestos

for each row

declare

v_fecha date;

begin

select sysdate into v_fecha

from dual;

insert into

bitacora(consecutivo_bitacora,fecha,tabla,operacion,campo_afectado)

values(sq_consecutivo_bitacora.nextval,v_fecha,'PUESTOS','B',:old.puesto);

end;

Operación delete sobre la tabla de puestos

delete puestos where puesto=1122334455;

Bitácora después de eliminar en la tabla de puestos

DISPARADORES DE LA TABLA DE VENTAS

Page 117: vistas procedimientos y funciones BD

117

16. DDL del disparador 16: Cuando se inserte un registro en la tabla de ventas almacenar en bitácora. --DISPARADOR PARA INSERTAR EN VENTAS Y LLENAR BITACORA

create or replace trigger tr_bit_agregar_ventas

after insert on ventas

for each row

declare

v_fecha date;

begin

select sysdate into v_fecha

from dual;

insert into

bitacora(consecutivo_bitacora,fecha,tabla,operacion,campo_afectado)

values(sq_consecutivo_bitacora.nextval,v_fecha,'VENTAS','A',:new.consecuti

vo_ventas);

dbms_output.put_line ('SE HA INSERTADO EN VENTAS CHECAR LA BITACORA');

end;

Hacemos una inserción en la tabla de ventas de la siguiente manera.

--LLAMA TR_INSERT_BITACORA_VENTAS

begin

insert into

ventas(consecutivo_ventas,fecha,clave_cliente,no_empleado,total)

values (sq_consecutivo_ventas.nextval,'15/12/12',3000,18302,0);

end;

Después de esto la tabla de bitácora queda de la siguiente manera:

Page 118: vistas procedimientos y funciones BD

118

17. DDL del disparador 17: Cuando se modifique un registro existente de la tabla de ventas almacenar en bitácora.

--DISPARADOR PARA MODIFICAR VENTAS Y LLENAR BITACORA

create or replace trigger tr_bit_modificar_ventas

after update on ventas

for each row

declare

v_fecha date;

begin

select sysdate into v_fecha

from dual;

--select sq_consecutivo_bitacora.nextval,

--sq_consecutivo_bitacora.currval

--from dual;

insert into

bitacora(consecutivo_bitacora,fecha,tabla,operacion,campo_afectado)

values(sq_consecutivo_bitacora.nextval,v_fecha,'

VENTAS','M',:old.consecutivo_ventas);

dbms_output.put_line('SE HA MODIFICADO EN VENTAS CHECAR LA BITACORA');

end;

Operación update para la tabla de ventas update ventas set

fecha=('18/09/2012'),clave_cliente=(11000),no_empleado=(18310),total=(300)

where consecutivo_ventas=134 ;

Resultado en la Bitácora

Page 119: vistas procedimientos y funciones BD

119

18. DDL del

disparador 18:

Cuando se

elimine un registro existente de la tabla de ventas almacenar en bitácora.

create or replace

TRIGGER TR_BIT_ELIMINAR_VENTAS

after delete on ventas

for each row

declare

v_fecha date;

begin

select sysdate into v_fecha

from dual;

insert into

bitacora(consecutivo_bitacora,fecha,tabla,operacion,campo_afectado)

values(sq_consecutivo_bitacora.nextval,v_fecha,'VENTAS','B',:old.consecuti

vo_ventas);

end;

Delete de la tabla de ventas

Delete ventas where consecutivo_ventas= (134);

Bitácora después de la operación delete.

Page 120: vistas procedimientos y funciones BD

120

DISPARADORES DE LA TABLA DE DETALLE_ VENTA

19. DDL del disparador 19: Cuando se inserte un registro en la tabla de detalle_ventas almacenar en bitácora. create or replace trigger tr_bit_agregar_detalle_vent

after insert on detalle_venta

for each row

declare

v_fecha date;

begin

select sysdate into v_fecha

from dual;

insert into

bitacora(consecutivo_bitacora,fecha,tabla,operacion,campo_afectado)

values(sq_consecutivo_bitacora.nextval,v_fecha,'DETALLE_VENTA','A',:new.co

nsecutivo_ventas);

dbms_output.put_line('SE HA INSERTADO EN CATEGORIAS CHECAR LA BITACORA');

end;

Mandamos llamar el disparador de la siguiente manera

--LLAMA TR_INSERT_BITACORA_DETALLE

begin

pa_agregar_detalle_ventas(115,235690,2,200);

end;

La salida en la bitácora es:

Page 121: vistas procedimientos y funciones BD

121

20. DDL del disparador 20: Cuando se actualice un registro de la tabla de

detalle_ventas almacenar en bitácora. --DISPARADOR PARA MODIFICAR detalle_venta Y LLENAR BITACORA

create or replace trigger tr_bit_modificar_detalle_vent

after update on detalle_venta

for each row

declare

v_fecha date;

begin

select sysdate into v_fecha

from dual;

insert into

bitacora(consecutivo_bitacora,fecha,tabla,operacion,campo_afectado)

values(sq_consecutivo_bitacora.nextval,v_fecha,'DETALLE

VENTA','M',:old.consecutivo_ventas);

dbms_output.put_line('SE HA MODIFICADO EN DETALLE_VENTA CHECAR LA

BITACORA');

end;

Operación update sobre la tabla detalle_venta. update detalle_venta set clave_producto=(550088),cantidad=(2),precio=(200) where consecutivo_ventas=115;

Bitácora después del update

Page 122: vistas procedimientos y funciones BD

122

21. DDL del disparador 21: Cuando se elimine un registro de la tabla de

detalle_ventas almacenar en bitácora. create or replace

TRIGGER TR_BIT_ELIMINAR_DETALLE_VENT

after delete on detalle_venta

for each row

declare

v_fecha date;

begin

select sysdate into v_fecha

from dual;

insert into

bitacora(consecutivo_bitacora,fecha,tabla,operacion,campo_afectado)

values(sq_consecutivo_bitacora.nextval,v_fecha,'DETALLE

VENTAS','B',:old.consecutivo_ventas);

end;

Operación delete para detalle_ventas delete detalle_venta where consecutivo_ventas=129;

Bitácora después de la operación delete

Page 123: vistas procedimientos y funciones BD

123

DISPARADORES DE LA TABLA DE FACTURAS

22. DDL del disparador 22: Cuando se inserte un registro en la tabla de

facturas almacenar en bitácora.

--DISPARADOR PARA INSERTAR EN FACTURAS Y LLENAR BITACORA

create or replace trigger tr_bit_agregar_facturas

after insert on facturas

for each row

declare

v_fecha date;

begin

select sysdate into v_fecha

from dual;

insert into

bitacora(consecutivo_bitacora,fecha,tabla,operacion,campo_afectado)

values(sq_consecutivo_bitacora.nextval,v_fecha,'FACTURAS','A',:new.no_fact

ura);

dbms_output.put_line('SE HA INSERTADO EN FACTURAS CHECAR LA BITACORA');

end;

Page 124: vistas procedimientos y funciones BD

124

Operación insert sobre la tabla facturas --LLAMA TR_INSERT_BITACORA_FACTURAS

begin

insert into facturas(no_factura,fecha,consecutivo_ventas,rfc)

values(555111666,'30/08/1993',176,'GACR56789N');

end;

Bitácora después de insertar en facturas

23. DDL

del disparador 23: Cuando se modifique un registro en la tabla de facturas almacenar en bitácora.

--DISPARADOR PARA MODIFICAR FACTURAS Y LLENAR BITACORA create or replace trigger tr_bit_modificar_facturas after update on facturas for each row declare v_fecha date; begin select sysdate into v_fecha from dual; --select sq_consecutivo_bitacora.nextval, --sq_consecutivo_bitacora.currval --from dual; insert into bitacora(consecutivo_bitacora,fecha,tabla,operacion,campo_afectado) values(sq_consecutivo_bitacora.nextval,v_fecha,'FACTURAS','M',:old.no_factura); dbms_output.put_line('SE HA MODIFICADO EN FACTURAS CHECAR LA BITACORA'); end;

Page 125: vistas procedimientos y funciones BD

125

Operación update sobre facturas update facturas set fecha=('16/09/2012'),consecutivo_ventas=(171),rfc=('MAN89r45') where no_factura= 555111666;

Bitácora después del update

24. DDL del disparador 24: Cuando se elimine un registro en la tabla de facturas almacenar en bitácora. create or replace

TRIGGER TR_BIT_ELIMINAR_FACTURAS

after delete on facturas

for each row

declare

v_fecha date;

begin

select sysdate into v_fecha

from dual;

insert into

bitacora(consecutivo_bitacora,fecha,tabla,operacion,campo_afectado)

values(sq_consecutivo_bitacora.nextval,v_fecha,'FACTURAS','B',:old.

no_factura);

end;

Page 126: vistas procedimientos y funciones BD

126

Operación delete sobre facturas delete facturas where no_factura=555111664;

Bitácora después del delete

Finalmente la tabla de bitácora queda de la siguiente manera y esta se

actualiza cada que realizamos un insert un update o delete.

Page 127: vistas procedimientos y funciones BD

127

CONCLUSIONES

Durante el desarrollo de esta práctica pudimos implementar tanto la creación de

tablas a si como la creación de vistas, índices, procedimientos, funciones y

disparadores, todo esto en conjunto nos permite llevar un mejor control sobre

nuestras bases de datos especialmente cuando estas contienen gran cantidad de

información en las cuales se requiere realizar consultas rápidas. Con la creación

de las vistas pudimos observar que se pueden extraer campos de distintas tablas

esto por si requerimos información que involucre mas de una tabla o bien extraer

solo algunos campos de la tabla base en la cual haya muchos campos. En

nuestra opinión la realización de esta practica nos sirve mucho ya que se puede

relacionar no solo con otras materias si no con un ámbito real de trabajo y al final

de cuentas es lo mas importante ya que cualquier conocimiento que logremos

adquirir tiene mas valor si este nos puede servir en el ámbito laboral. El tener

Page 128: vistas procedimientos y funciones BD

128

conocimiento sobre el manejo de las bases de datos es de gran ayuda ya que en la

actualidad la mayor parte de la información que se maneja si no es que toda se

administra a través de las bases de datos lo cual nos abre un espacio en el cual

podríamos laborar.

BIBLIOGRAFÍA: http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=449#.UKp30OQsC70 http://www.paginasprodigy.com.mx/evaristopacheco/taller/disparadores.html http://www.oracleya.com.ar/temarios/descripcion.php?cod=255&punto=97 http://www.lsi.us.es/docencia/get.php?id=5784