You are on page 1of 128

Ingeniera en sistemas computacionales

Practica 1: Creacin de Base de datos en Oracle Profesor: Pizarro Gurrola Rubn Integrantes:
Nombre N Control

Bentez favela Julieta Anah Galindo Payan Daniela Hernndez Simental Adilene Zamira

10040316 10040325 10040335

Fecha de entrega: martes 20 de noviembre del 2012

Antes de empezar con la creacin de nuestra base de datos es necesario crear un usuario llamado admin con su correspondiente contrasea con privilegios de DBA que por lo menos pueda crear tablas, ndices, vistas, funciones, procedimientos, disparadores, secuencias etc.

PASO 1 CREACIN DE TABLAS


Ya que hemos accedido con el usuario admin procederemos a crear las siguientes tablas: Categoras Productos Clientes Empleados Puestos Ventas Detalle_ venta Facturas Bitcora

1. CREACIN DE LA TABLA CATEGORIAS La tabla de categoras esta formada por dos columnas; la columna de id categora el cual ser la llave primaria o bien el ndice nico de la tabla este puede ser varchar ya que no se realizaran operaciones aritmticas con este campo, la otra columna es la descripcin de la categora el tipo es varchar y en esta columna se especifican los tipos de categoras que se manejaran en la empresa en nuestro caso insertamos las categoras de: ropa interior, perfumera, zapatera, joyera, lnea blanca, farmacia, cosmticos, cereales, lcteos, carnes fras, panadera y dulcera DDL DE CATEGORIAS
drop table categorias; create table categorias ( id_categoria varchar (10) not null primary key, descripcion varchar (50) not null ); --insercin 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)

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

EJECUCIN DEL DDL DE LA TABLA CATEGORAS

2. CREACIN 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. Descripcin: en este campo almacenaremos una breve descripcin del producto Costo: este campo representa un valor numrico (es el gasto econmico que genera la fabricacin de un producto). Existencia: es un campo numrico, en este se almacena cuanta cantidad de un producto se tiene en el inventario. Id_categoria: este campo es una llave fornea categoras este referente a la tabla de hace referencia a que categora pertenece cualquier

producto que se agregue a esta tabla, no se puede agregar un producto que no pertenezca a alguna de las categoras que agregamos a categoras. DDL DE LA TABLA PRODUCTOS En esta tabla insertaremos 50 productos los cuales estarn relacionados con la tabla de categoras 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,ex istencia,id_categoria) values (125690,'leche','leche deslactosada',20,22,34,10023459); insert into productos(clave_producto,nombre_producto,descripcion,costo,precio,ex istencia,id_categoria) values (120690,'DIESEL','PERFUME FLORAL, RUTAL',1100,1050,8,335678); insert into productos(clave_producto,nombre_producto,descripcion,costo,precio,ex istencia,id_categoria) values (235690,'CREMA','CREMA ANTI ACNE',150,200,74,8823456); insert into productos(clave_producto,nombre_producto,descripcion,costo,precio,ex istencia,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,ex istencia,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,ex istencia,id_categoria) 5

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

Ejecucin del DDL de la tabla productos

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

3. CREACIN DE LA TABLA DE CLIENTES Esta tabla contiene informacin 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 numrico o varchar RFC: este es de tipo varchar ya que el rfc contiene letras y nmeros Razon_Social: tipo de dato varchar (es la denominacin 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 Telfono: 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,te lefono) values (1000,'GESY34568','JULIADIDANI S.A.de C.V','CIELO AXUL 223','ARCOIRIX','DURANGO','DURANGO','ABUELITO@HOTMAIL.COM','6181585713'); insert into clientes(clave_cliente,rfc,razon_social,calle_no,colonia,ciudad,estado,e_mail,te lefono) values (2000,'RESU34569','JULIADIDANI S.A.de C.V','GUACAMAYA 923','FAUNA','LA PAZ','BAJA CALIFORNA SUR','QUEBRADO@HOTMAIL.COM','6181585714');

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

Ejecucin del DDL de la tabla clientes

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

4. CREACIN DE LA TABLA DE EMPLEADOS En esta tabla se almacenara informacin sobre los empleados de una empresa x La tabla esta formada por los siguientes campos: No_Empleado: este puede ser un campo numrico o varchar y primaria de la tabla. Paterno: es un campo tipo varchar Materno: varchar Nombre: varchar Sexo: char Fecha_Nacimiento: date Sueldo: number Puesto: puede ser numrico o varchar en l se almacena la clave del puesto es llave fornea 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 )

ser la llave

10

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);

Ejecucin del DDL de la tabla empleados

11

Tabla despus de la insercin

5. CREACIN 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); 12

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); Ejecucin del DDL de la tabla puestos
Despus de la creacin

13

6. CREACIN DE LA TABLA DE VENTAS Para la creacin de la tabla de ventas es necesario crear antes una secuencia o consecutivo el cual ser la llave primaria de la tabla el cdigo SQL para la creacin 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 fornea referente a la tabla de clientes, el numero del empleado el cual tambin es llave fornea con referencia a la tabla de empleados y el total que es un campo numrico. Las llaves forneas deben ser del mismo tipo y del mimo tamao 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 automticamente 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)

14

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);

Ejecucin del DDL de la tabla ventas

15

Tabla de ventas con registros:

7. CREACIN DE LA TABLA DE DETALLE_VENTAS En la tabla de detalle ventas se tienen los siguientes campos: Consecutivo_ventas: el cual es una llave fornea referente a la tabla de ventas. Clave_producto: es llave fornea referente a la tabla de productos. Cantidad: es un campo numrico. Precio: es un campo numrico. Importe: es un campo numrico el cual es el resultado de la multiplicacin 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 );

16

Despus

de que tenemos creada

la tabla es necesario crear un procedimiento para realizar el clculo del importe.

DDL del procedimiento para el clculo 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

17

set ventas.total = v_total-- variable where ventas.consecutivo_ventas = v_consecutivo_ventas; end;

Ejecucin del procedimiento para agregar en la tabla de detalle venta

Despus 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);

18

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;

19

Como podemos observar en base al consecutivo existente en ventas se llena la tabla de detalle venta y el importe es calculado automtico por el procedimiento.

20

Despus 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. CREACIN 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 numrico Consecutivo_ ventas: este campo es llave fornea referente a la tabla de ventas Rfc: representa un valor varchar y es fornea de la tabla de clientes. En el DDL de facturas insertaremos 20 registros de facturas, como se puede observar en el cdigo que se muestra a continuacin.

21

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');

22

Ejecucin del DDL de la tabla de facturas


Tabla Despus de la ejecucin del DDL

9. CREACIN DE LA TABLA DE BITACORA Para la creacin de la Tabla bitcora vamos a crear un consecutivo el cual ser la llave primaria de la tabla. El DDL de la creacin 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; Despus 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 operacin, la tabla; representa la tabla en la que se realizo la operacin. Campo afectado;

23

DDL de la creacin de la tabla de bitcora 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 bitcora necesitamos crear disparadores para cada tabla o bien para cada operacin que vallamos a realizar sobre las tablas. Por ejemplo para insertar en la tabla de categoras y que a su vez se registre en la bitcora la insercin, hacemos lo siguiente.

Disparador para insertar en bitcora.


create or replace 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; trigger tr_bit_agregar_categorias after insert on categorias -indica que despus de la insercin llene bitcora

Ejecucin del disparador para insertar en bitcora.


Para esto hacemos una insercin en categoras y se puede ver en bitcora. insert into categorias(id_categoria,descripcion) values(9004138,'DESORODANTE DE LIMON');

24

Tabla bitcora despus de insertar en categoras.


Se puede ver que en la tabla bitcora nos almacena la fecha el consecutivo, la tabla en la cual insertamos, la operacin que es un alta, y el campo afectado es el id_categoria.

PASO 2 CREACIN DE
Los

NDICES:
una estructura de datos que

ndices de una base de datos representan

mejora la velocidad de las operaciones, permitiendo un rpido acceso a los registros de una tabla. Al aumentar drsticamente la velocidad de acceso, se suelen usar sobre aquellos campos sobre los cuales se vayan a realizar bsquedas frecuentes. Los ndices pueden ser creados usando una o ms columnas, preparando la base de datos tanto para bsquedas rpidas al azar como para ordenaciones eficientes de los registros. Al crear las llaves primarias automticamente se crean ndices primarios nicos de cada tabla, pero es necesario crear otros ndices para ello creamos los siguientes para cada tabla:

Tabla
Categoras Productos 1. 2. 3. 4. 5.

ndices:
ndice nico por el campo Id_categoria. ndice normal por el campo descripcin. ndice normal por nombre. Indice normal por costo de producto. Indice normal compuesto por los campos de Id_categoria y clave_producto. 6. Indice nico por el campo RFC 7. Indice normal por el campo razn social 8. Indice normal compuesto por los campos estado, ciudad y colonia. 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 13.Indice normal por nombre 14.Indice normal por sueldo_base 15.Indice normal por fecha de venta

Clientes

Empleados

Puestos Ventas

25

Detalle_Ventas Facturas

Bitacora

16.Indice normal por clave de cliente 17.Indice normal por no_empleado 18.Indice normal por total de venta 19.Indice normal por clave de producto 20.Indice normal por importe 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 24.Indice normal por fecha 25.Indice normal compuesto por usuario, fecha y tabla

ndices para la tabla de categoras


1. ndice nico por el campo Id_categoria. Debido a que este campo es la llave primaria de la tabla de categoras se ha creado automticamente al crear la tabla. 2. DDL del ndice normal por el campo descripcin

create index categorias_descripcion on categoras (descripcion); Ejecucin del DDL del ndice 2 de categoras

26

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);

27

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

28

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

7.DDL Indice normal por el campo razn 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

29

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

30

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

31

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

32

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

33

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

34

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

35

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

36

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); Ejecucin del DDL del ndice 24 tabla bitacora

37

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 CREACIN 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 travs de la vista no estn almacenados en la base de datos. Las vistas permiten: simplificar la administracin de los permisos de usuario: se pueden dar al usuario permisos para que solamente pueda acceder a los datos a travs 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
Categoras Productos

Vistas
1. Vista de los campos Id_categoria y descripcin 2. Vista de los campos clave producto, nombre y descripcin 3. Vista de los campos clave de producto, costo, precio y existencia.

38

Clientes

Empleados

Puestos Ventas

Detalle_Ventas

4. Vista de dos tablas (productos y categoras), de los campos clave de producto, nombre descripcin, id_categoria y descripcin de la categora. 5. Vista de los campos clave de cliente, razn social, ciudad y estado. 6. Vista de los campos clave de cliente, calle, colonia, telfono email. 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. 10. Vista de puesto, y nombre 11. Vista de puesto y sueldo base 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, razn social del cliente y total de la venta 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. 18. Vista de nmero factura, fecha de factura, y consecutivo venta. 19. Vista de dos tablas (factura y clientes):no factura, rfc cliente clave cliente, razn social, fecha y total factura. 20. Vista con los campos de fecha, usuario, operacin, tabla

Facturas

Bitcora

VISTAS DE LA TABLA DE CATEGORIAS

1. DDL de la creacin de la vista de los campos Id_categoria y descripcin


--Vista de los campos Id_categoria y descripcin --aqu se crea la vista drop view vis_categorias; create view vis_categorias as select id_categoria,descripcion from categorias;

39

--insertar insert into categorias(id_categoria,descripcion) values (123456000,'ELECTRONICA');

Ejecucin del DDL de la vista 1 de categorias

Vista despus de la insercin

VISTAS DE LA TABLA DE PRODUCTOS

1. DDL de la creacin de la vista de los campos clave producto, nombre y descripcin. DDL de la vista 2 de la tabla de productos. --2. Vista de los campos clave producto, nombre y descripcin drop view vis_productos; create view vis_productos as select clave_producto,nombre_producto,descripcion from productos; --insertar 40

insert into productos(clave_producto,nombre_producto,descripcion) values(123478800,'GOMAS','GOMAS SABOR MANGO CON CHILE'); Ejecucin del DDL de la vista 2 de productos

Despus 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 creacin de la vista de los campos clave de producto, costo, precio y existencia. --3. Vista de los campos clave de producto, existencia. drop view vis_productos3; create view vis_productos3 as select clave_producto,costo,precio,existencia from productos; costo, precio y

--insertar insert into productos(clave_producto,costo,precio,existencia) values(1256900,45,48,19);

41

Ejecucin del DDL de la vista 3 de productos Despus 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 categoras), de los campos clave de producto, nombre descripcin, id_categoria y descripcin de la categora. --4. Vista de dos tablas (productos y categoras), de los campos clave de producto, nombre descripcin, --id_categoria y descripcin de la categora.

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,categoras

42

Despus 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 descripcin del producto y de la tabla de categoras se extrae el id_categoria y la descripcin de todas las categoras.

VISTAS DE LA TABLA DE CLIENTES

4. DDL de la creacin de la vista de los campos clave de cliente, razn social, ciudad y estado.

La vista se puede ver de la siguiente manera.

43

5. DDL de la vista de los campos clave de cliente, calle, colonia, telfono email. drop view vista_clientes; create view vista_clientes as select clave_cliente,calle_no,colonia,telefono,e_mail from clientes; Ejecucin del DDL de la vista 6 de clientes

44

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

Ejecucin del DDL de la vista 7 de empleados

45

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

Ejecucin del DDL de la vista 8 de empleados

46

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

Ejecucin 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

Ejecucin del DDL de la vista 10 de puestos

47

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

Ejecucin 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

Ejecucin del DDL de la vista 12 de ventas

48

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;

Ejecucin 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;

Ejecucin del DDL de la vista 14 de ventas y empleados

49

Vista despus de la ejecucin del DDL

14. DDL de la Vista de dos tablas (ventas con clientes): consecutivo venta, fecha venta, rfc o clave de cliente, razn 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;

Ejecucin del DDL de la Vista 15 de ventas y clientes

50

Salida despus de la Ejecucin del DDL 15

VISTAS DE LA TABLA DE DETALLE_VENTAS

15. DDL de la Vista precio, importe.

de consecutivo venta, clave_producto,

cantidad,

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

51

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;

Ejecucin del DDL de la vista 17 de tres tablas

Despus de la ejecucin del DDL tenemos la siguiente vista.

52

VISTAS DE LA TABLA DE FACTURAS

17. DDL de la vista de los campos nmero_factura, fecha de factura, y consecutivo venta.
--18. Vista de nmero_factura, --y consecutivo venta. fecha de factura,

drop view vista18_facturas; create view vista18_facturas as select no_factura,fecha,consecutivo_ventas from facturas

Ejecucin del DDL de la vista 18 de facturas

53

18. DDL de la vista de dos tablas (factura y clientes): no_factura, rfc cliente clave cliente, razn 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 Ejecucin del DDL de la vista 19 de facturas y clientes.

VISTAS DE LA TABLA DE BITCORA

19. DDL de la vista con los campos de fecha, operacin y tabla drop view vista20_bitacora; create view vista20_bitacora as select fecha,operacion,tabla from bitcora Ejecucin del DDL de la vista 20 de bitcora.

54

PASO 4 CREAR PROCEDIMIENTOS


servidor.

Un procedimiento es un conjunto de comandos SQL que pueden almacenarse en el Los procedimientos pueden mejorar el rendimiento ya que se necesita enviar menos informacin entre el servidor y el cliente. CREAR LAS SIGUIENTES PROCEDIMIENTOS PARA CADA TABLA: Tabla Procedimientos: 1. Procedimiento para agregar nueva categora: todos los campos. 2. Procedimiento para modifica una categora existente: todos los campos excepto el id_categora 3. Procedimiento para eliminar una categora existente proporcionando el id_categora, el registro a eliminar se borrar siempre y cuando sta categora no tenga referencia en la tabla de productos 4. Procedimiento para agregar nuevo producto de una categora 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. 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. 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. 13.Procedimiento para agregar nuevo puesto: todos los campos. 14.Procedimiento para modifica un puesto existente:

Categorias

Productos

Clientes

Empleados

Puestos

55

Ventas

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. 16.Procedimiento para agregar nueva venta: todos los campos respetando llaves primarias y forneas. 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 tambin. 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 operacin 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)

Detalle_Ventas

Where consecutivo = 1000; Siempre y cuando exista la venta consecutivo nmero 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; 21.Procedimiento para agregar nueva factura: todos los campos respetando llaves primarias y forneas. 22.Procedimiento para modifica una factura existente: todos los campos excepto el nmero de factura. 23.Procedimiento para eliminar una factura existente proporcionando el nmero de factura, el registro a eliminar se borrar indistintamente.

Facturas

56

Bitacora

24. Se almacenan los registros utilizando disparadores.

automticamente

DDL de procedimiento para la tabla categora 1. DDL del procedimiento para una nueva categora 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 categoras y podemos ver que nuestro registro se encuentra el dicha tabla.

57

2. DDL del procedimiento para modifica una categora existente: todos los campos excepto el id_categora.
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.

58

3. DDL del procedimiento para eliminar una categora existente proporcionando el id_categora, el registro a eliminar se borrar siempre y cuando sta categora 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 descripcin de perfumera y farmacia.

59

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 dama',19,42,280 ,9004135); end;

en

aerosol

para

60

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, 1100, 2700, 450, '335678'); end;

'perfume extractos

ctricos',

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

61

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 eliminacin del producto. begin pa_eliminar_producto(125690); end;

La tabla modificada queda de la siguiente manera.

62

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);

63

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','WEBMASTERING@HOTMAIL.COM','675123-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,

64

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','CABEZA@HOTMAIL.COM','618-129-65-57'); end;

la tabla anteriormente estaba asi:

65

Al ejecutar los DDL anteriores nos queda como se muestra a continuacin:

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;

66

La tabla antes y despus 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,

67

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;

68

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

69

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 ejecucin.

70

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 categorias'); end; DDL para ejecutarlo.

revisar

tabla

71

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 ejecucin.

72

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;

73

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

74

) 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 continuacin.

Los resultados se muestran a continuacin.

17. Procedimiento para modifica una venta existente. create or replace procedure pa_actualizar_ventas( v_consecutivo_ventas number,

75

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 ejecucin.

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

76

Ejecucin 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;

77

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);

78

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; Despus de mandar llamar el cdigo la tabla de detalle_ventas nos queda de la siguiente manera.

79

Al ejecutar el DDL principal automticamente 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

80

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 continuacin.

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 cdigo es necesario realizar el siguiente. begin pa_agregar_factura ( 9393, '04/09/2012','HESA34574',4658); end;

81

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; Ejecucin y resultados. begin pa_agregar_factura ( 13006,'12/04/2012','HESA910510',119); end;

82

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.

83

La tabla despus del DDL

DDL para procedimiento de la tabla bitcora 24. Se almacenan los registros automticamente utilizando disparadores. Al emplear disparadores la tabla de bitcora se ir actualizando despus de agregar, modificar o eliminar algn elemento de las tablas creadas anteriormente. A continuacin podemos observar cmo queda nuestra tabla despus 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.

84

DDL para la funcin de la tabla categora. 1. Funcin para contar cuantas categoras 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 categoras 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. Funcin 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

85

select count(existencia) into c_productos from productos where id_categoria= v_id_categoria; return c_productos; end; ahora realizaremos la ejecucin con el siguiente cdigo. 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. Funcin para conocer cuntos 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 continuacin: declare suma_cost number; begin suma_cost :=fn_suma_costo; dbms_output.put_line('la suma de los costos es: ' || suma_cost); end;

86

4. Funcin 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:

87

DDL para realizar la fincion de la tabla clientes


5. Funcin para saber cuntos 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. Funcin para conocer el nombre completo de un cliente.

88

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. Funcin para conocer cuntos empleados ganan o tienen un sueldo mayor o superior a un proporcionado. El sueldo se proporciona como argumento en la funcin y sta devuelve cuntos empleados ganan igual o superior. create or replace function fn_cuantos_empleados(v_sueldo number) return number as agnioventa number; v_total number; 89

begin select count (suedo) into v_total from empleados where v_total=<v_sueldo; dbms_output.put_line('los empleados '||v_total); select count (sueldo) into v_total from empleados where v_total=>v_sueldo; dbms_output.put_line('los empleados '||v_totall); return 0; end; DDL para la ejecucin.

con

menor

sueldo

son

con

mayor

sueldo

son

declare cantidadtotal number; begin cantidadtotal:=fn_cuantos_empleados(2700); end;

8. Funcin para conocer los aos cumplidos de un empleado.


create or replace function fn_cuantos_agnios_emp(v_no_empleado varchar) return number as v_fecha_nacimiento number; --ao nacimiento agnio_ac number; --ao 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

90

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. Funcin para conocer cuntos empleados son del sexo Masculino del sexo

femenino. La funcin debe recibir el parmetro del sexo para conocer cuntos empleados hay de cada sexo segn 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 cdigo 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');

91

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

DDL para realizar la fincion de la tabla puestos 10.


Funcin para conocer Cuntos 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. Funcin para conocer el total de todas las ventas que se hicieron de un ao en
particular.

92

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 ao: '||cantidadtotal); end;

12.

Funcin 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 clave_cliente=v_clave_cliente; return v_total; end;

where

93

A continuacion se muestra el cdigo de ejecucin y los resultados declare cuantas_cat1 number; begin cuantas_cat1 :=fn_cuantas_ventas(1000); dbms_output.put_line('EL NUMERO TOTAL DE LAS VENTAS cuantas_cat1); end;

ES:

'

||

DDL para realizar la fincion de la tabla detalle_ventas 13. Funcin 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 ejecucin 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;

94

DDL para realizar la fincion de la tabla facutras 14. Funcin que devuelve cuntas facturas son de un da 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;

95

DDL para realizar la fincion de la tabla facutras 15. Funcin 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 tres disparadores para cada tabla. Para cada tabla cuando se registre una alta almacenar el movimiento en la tabla bitcora. A Alta para insert

CREAR DISPARADORES

96

Para cada tabla cuando se registre una alta almacenar el movimiento en la tabla bitcora. B Alta para delete Para cada tabla cuando se registre una alta almacenar el movimiento en la tabla bitcora. M Modificacin para update. Tabla Categoras Disparadores
1. Cuando se registre un nuevo registro almacenar en bitcora. 2. Cuando se elimine un registro registrar en bitcora 3. Cuando se modifique o actualice un registro almacenar en bitcora. 4. Cuando se registre un nuevo registro almacenar en bitcora. 5. Cuando se elimine un registro registrar en bitcora 6. Cuando se modifique o actualice un registro almacenar en bitcora. 7. Cuando se registre un nuevo registro almacenar en bitcora. 8. Cuando se elimine un registro registrar en bitcora 9. Cuando se modifique o actualice un registro almacenar en bitcora. 10. Cuando se registre un nuevo registro almacenar en bitcora. 11. Cuando se elimine un registro registrar en bitcora 12. Cuando se modifique o actualice un registro almacenar en bitcora. 13. Cuando se registre un nuevo registro almacenar en bitcora. 14. Cuando se elimine un registro registrar en bitcora 15. Cuando se modifique o actualice un registro almacenar en bitcora. 16. Cuando se registre un nuevo registro almacenar en bitcora. 17. Cuando se elimine un registro registrar en bitcora 18. Cuando se modifique o actualice un registro almacenar en bitcora. 19. Cuando se registre un nuevo registro almacenar en bitcora. 20. Cuando se modifique o actualice un registro almacenar en bitcora. 21. Cuando se registre un nuevo registro almacenar en bitcora. 22. Cuando se elimine un registro registrar en bitcora 23. Cuando se modifique o actualice un registro almacenar en bitcora.

Productos

Clientes

Empleados

Puestos

Ventas

Detalle_Ventas

Facturas

Bitcora
DISPARADORES DE LA TABLA DE CATEGORAS

Un

disparador

(o trigger)

es

un

tipo

especial

de procedimiento

almacenado asociado a una tabla que se ejecuta al realizar una operacin bsica (insert, un delete o un update) sobre sta. La operacin bsica que despierta al 97

trigger es conocida como sentencia disparadora. La ejecucin del disparador puede ser antes (before) o despus (after) de llevar a cabo la sentencia disparadora. A continuacin crearemos disparadores para que despus de la sentencia se actualice la tabla de bitcora. 1. DDL del disparador1: Cuando se inserte un nuevo registro en la tabla de categoras almacenar en bitcora.
create or replace 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; trigger tr_bit_agregar_categorias after insert on categorias

Ejecucin del DDL del disparador1 insertar

98

Para poder observar el funcionamiento del disparador es necesario realizar una insercin en la tabla de categoras y posteriormente revisar la tabla de bitcora. Como se muestra a continuacin. Primero insertamos una nueva categora.

Y posteriormente revisamos la tabla de bitcora y queda de la siguiente manera. En donde el registro que agregamos a la tabla categoras esta marcado con el recuadro amarillo.

99

2. DDL del disparador 2: Cuando se actualice o modifique existente de la tabla de categoras almacenar en bitcora. --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;

un registro

insert into bitacora(consecutivo_bitacora,fecha,tabla,operacion,campo_afectado) values(sq_consecutivo_bitacora.nextval,v_fecha,'CATEGORIAS','M',:old.i d_categoria); dbms_output.put_line('SE HA MODIFICADO EN CATEGORIAS CHECAR LA BITACORA'); end; Ejecucin del DDL del disparador2 modificar

100

Despus de esto realizamos un update sobre la tabla de categoras y empleando la salida del dbms nos indica que chequemos la bitcora.

Revisamos la bitcora y se encuentra registrada la operacin M que representa el update que realizamos sobre la tabla de categoras.

101

3. DDL del disparador 3: Cuando se elimine registro existente de la tabla de categoras almacenar en bitcora.
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;

Ejecucin del DDL del disparador 3 eliminar

Al realizar una operacin delete sobre la tabla de categoras se registra en bitcora. Por ejemplo eliminaremos la categora que tiene el id_ categora marcado en azul.

102

Despus de realizar una baja de categoras se registra en la bitcora

Resultado en la bitcora despus de la operacin delete.

DISPARADORES DE LA TABLA DE PRODUCTOS

4. DDL del disparador4: Cuando se inserte un nuevo registro en la tabla de productos almacenar en bitcora.
--DISPARADOR PARA INSERTAR EN PRODUCTOS Y LLENAR BITACORA create or replace for each row declare v_fecha date; trigger tr_bit_agregar_productos

after insert on productos

103

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;

Ejecucin del DDL del disparador 4 insertar Realizamos una insercin 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 bitcora

5. DDL del disparador5: Cuando se modifique un registro en la tabla de productos almacenar en bitcora. --DISPARADOR PARA MODIFICAR PRODUCTOS Y LLENAR BITACORA create or replace trigger tr_bit_modificar_productos after update on productos 104

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; Ejecucin del disparador 5 modificar

105

Update sobre la tabla de productos

Bitcora despus del update sobre la tabla de productos.

6. DDL del disparador 6: Cuando se elimine un registro en la tabla de productos almacenar en bitcora.
--5. Cuando se elimine un registro registrar en bitcora create or replace TRIGGER TR_BIT_ELIMINAR_PRODUCTOS

after delete on productos


for each row declare

106

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;

Ejecucin del DDL del disparador 6 eliminar delete productos where clave_producto=330033; Tabla de bitcora despus de la operacin delete

DISPARADORES DE LA TABLA DE CLIENTES

7. DDL del disparador 7: Cuando se inserte un registro en la tabla de clientes almacenar en bitcora. Como hemos visto en los procedimientos anteriores realizamos una insercin en la tabla de clientes y observamos el resultado en la tabla de bitcora. 107

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 insercin y en bitcora podemos ver el resultado.

8. DDL del disparador 8: Cuando se modifique un registro en la tabla de clientes almacenar en bitcora.
create or replace trigger tr_bit_modificar_clientes after update on clientes for each row

108

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;

Despus de realizar un update sobre la tabla de clientes podemos ver que se sigue llenando la tabla de bitcora ya que cada vez que realizamos una operacin el disparador se activa y llena automticamente la bitcora.

9. DDL del disparador 9: Cuando se elimine un registro en la tabla de clientes almacenar en bitcora
create or replace TRIGGER TR_BIT_ELIMINAR_CLIENTES after delete on clientes

109

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;

Despus de realizar un delete sobre la tabla la bitcora 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 bitcora.

110

--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;

Despus de realizar una insercin sobre la tabla de empleados la bitcora queda de la siguiente manera.

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

111

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;

Despus de realizar la operacin update sobre la tabla de empleados la bitcora se ve de la siguiente manera.

12. DDL del disparador 12: Cuando se elimine un registro en la tabla de empleados almacenar en bitcora
create or replace TRIGGER TR_BIT_ELIMINAR_EMPLEADOS

112

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;

Ejecucin del DDL del disparador 12 eliminar empleados


delete empleados where no_empleado=222333444;

Bitcora despus 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 bitcora.
--DISPARADOR PARA INSERTAR EN PUESTOS Y LLENAR BITACORA

113

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;

Despus de realizar un insert sobre la tabla de puestos la bitcora queda de la siguiente manera.

14. DDL del disparador 14: Cuando se modifique un registro existente de la tabla de puestos almacenar en bitcora.
--DISPARADOR PARA MODIFICAR PUESTOS Y LLENAR BITACORA create or replace trigger tr_bit_modificar_puesto after update on puestos

114

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;

Despus de modificar un registro de puestos la bitcora queda como se muestra a continuacin:


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 bitcora
create or replace

115

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;

Operacin delete sobre la tabla de puestos


delete puestos where puesto=1122334455;

Bitcora despus de eliminar en la tabla de puestos

DISPARADORES DE LA TABLA DE VENTAS

116

16. DDL del disparador 16: Cuando se inserte un registro en la tabla de ventas almacenar en bitcora.
--DISPARADOR PARA INSERTAR EN VENTAS Y LLENAR BITACORA create or replace 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; trigger tr_bit_agregar_ventas after insert on ventas

Hacemos una insercin 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;

Despus de esto la tabla de bitcora queda de la siguiente manera:

117

17. DDL del disparador 17: Cuando se modifique un registro existente de la tabla de ventas almacenar en bitcora.
--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;

Operacin 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 Bitcora

118

elimine un registro existente de bitcora.


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

la tabla de ventas

18. DDL del disparador 18: Cuando se almacenar en

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); Bitcora despus de la operacin delete.

119

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 bitcora.
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 bitcora es:

120

20. DDL del disparador 20: Cuando se actualice un registro de la tabla de detalle_ventas almacenar en bitcora.
--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;

Operacin update sobre la tabla detalle_venta.


update detalle_venta set clave_producto=(550088),cantidad=(2),precio=(200) where consecutivo_ventas=115;

Bitcora despus del update

121

21. DDL del disparador 21: Cuando se elimine un registro de la tabla de detalle_ventas almacenar en bitcora.
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;

Operacin delete para detalle_ventas


delete detalle_venta where consecutivo_ventas=129;

Bitcora despus de la operacin delete

122

DISPARADORES DE LA TABLA DE FACTURAS

22. DDL del disparador 22: Cuando se inserte un registro en la tabla de facturas almacenar en bitcora.
--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;

123

Operacin 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;

Bitcora despus de insertar en facturas

23. DDL del disparador 23: Cuando se modifique un registro en la tabla de facturas almacenar en bitcora.
--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;

124

Operacin update sobre facturas


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

Bitcora despus del update

24. DDL del disparador 24: Cuando se elimine un registro en la tabla de facturas almacenar en bitcora. 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; 125

Operacin delete sobre facturas


delete facturas where no_factura=555111664;

Bitcora despus del delete

Finalmente la tabla de bitcora queda de la siguiente manera y esta se actualiza cada que realizamos un insert un update o delete.

126

CONCLUSIONES Durante el desarrollo de esta prctica pudimos implementar tanto la creacin de tablas a si como la creacin 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 informacin en las cuales se requiere realizar consultas rpidas. Con la creacin de las vistas pudimos observar que se pueden extraer campos de distintas tablas esto por si requerimos informacin que involucre mas de una tabla o bien extraer solo algunos campos de la tabla base en la cual haya muchos campos. En nuestra opinin la realizacin 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 127

conocimiento sobre el manejo de las bases de datos es de gran ayuda ya que en la actualidad la mayor parte de la informacin que se maneja si no es que toda se administra a travs de las bases de datos lo cual nos abre un espacio en el cual podramos laborar. BIBLIOGRAFA:
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

128

You might also like