You are on page 1of 65

INGENIEROS ASOCIADOS

INDICE
INDICE

1

ANALISIS DEL SISTEMA

2

ALCANCE

2

MODELOS DE CASOS DE USO

3

MODELO DE DATOS

8

MODELO LOGICO

9

MODELO FISICO

10

CONSTRUCCION

11

CAPA DE ALMACENAMIENTO

11

SCRIPT PUNTOS

11

CAPA LOGICA

21

PROCEDIMIENTOS Y PRUEBAS

21

TRIGGERS

61

LOG

64

INGENIEROS ASOCIADOS

ANALISIS DEL SISTEMA
ALCANCE
La “tiendita” aunque es una organización comercial dedicada a la comercialización
de productos alimenticios, posee un amplio volumen de transacciones diarias, a lo
que es necesario modernizar la estructura del modelo de negocio, para el soporte
de procesos críticos como el control de puntos de ventas, debido a que el principal
interés de esta organización es cultivar el interés de los clientes.
Para efecto del control de puntos de ventas se deberán realizar en el terminal de
ventas, donde los clientes podrán consultar los puntos actuales y a su vez registrar
al momento de la compra los puntos obtenidos

INGENIEROS ASOCIADOS

MODELOS DE CASOS DE USO
PUNTOS
1. Asignar puntos a los artículos
El director del área de ventas con base en las estadísticas de ventas, cada mes,
selecciona los artículos que se cambiarán por puntos y asigna los puntos
respectivos. Un funcionario de la oficina de Atención al cliente registra en el
sistema la identificación del artículo, el número de puntos y el mes de vigencia de
los puntos. El sistema debe administrar el histórico de puntos de un artículo.
CASO DE USO 1

Paso
1
2
3
4
5
6
7
8
3
3.1
3.2
3.3
3.4

CASO DE USO 1 – ASIGNAR PUNTOS
Actividad
Director solicita ingresar artículos y puntos correspondientes.
Sistema solicita id artículo y puntos del artículo
Director digita el id artículo y puntos del artículo
Sistema verifica la existencia del artículo
Sistema valida el número de puntos
Sistema almacena los puntos asignados al artículo
Se repiten los pasos 2 a 6 hasta que se indique al sistema que no hay más artículos para
asignar puntos
El sistema genera mensaje “Puntos Asignados”
EXTENSIONES
Artículo no existe o tipo de dato incorrecto
El sistema genera mensaje “artículo no existe”
El funcionario verificará el id registrado y en caso de error de digitación el sistema le
facilitará el reinicio en el punto 2
El sistema genera mensaje “tipo de dato para puntos incorrecto”
El funcionario verificará el dato ingresado en num puntos y en caso de error de digitación el
sistema le facilitará el reinicio en el punto 2

Una vez realizado el cambio. el sistema validará el cambio en cuanto a que el cliente tenga los puntos suficientes. . Actualizar puntos de los clientes con las ventas del día Finalizadas las ventas del día. el sistema actualizará el total de puntos del cliente y generará un comprobante de canje donde se referencie los artículos cambiados con su equivalencia en puntos y el nuevo saldo de puntos del cliente. el cliente dispone de un catálogo de puntos y con base en ese catálogo procede a seleccionar los artículos y se dirige a la oficina de atención al cliente donde un funcionario registrará el canje y le indicará al sistema la identificación del cliente y los artículos a cambiar. el jefe de operación de la oficina de ventas le indica al director de la oficina de Atención al cliente que las ventas del día pueden ser utilizadas para actualizar los puntos de los clientes.3 El funcionario verificará la fecha registrada y en caso de error de digitación el sistema le facilitará el reinicio en el punto 2 3. Cambio de puntos y actualización de puntos Para canjear los puntos.1 Fecha invalida 3. Un funcionario de Atención al cliente le suministra al sistema la fecha de las ventas que debe seleccionar y con las que actualizará el total de puntos acumulados por cada cliente. CASO DE USO 2 <<INCLUDE>> ACTUALIZAR PUNTOS VALIDAR FECHA FUNCIONARIO CASO DE USO 2 – ACTUALIZAR PUNTOS Paso Actividad 1 Funcionario solicita al sistema actualizar los puntos de los clientes 2 Sistema solicita la fecha 3 Funcionario digita la fecha 4 Sistema valida la fecha 5 Sistema actualiza los puntos de los clientes 6 Sistema genera un mensaje de “actualización realizada” Extensiones 3.2 Sistema genera mensaje “ fecha invalida” 3.INGENIEROS ASOCIADOS 2.

3 7. Sistema actualiza el total del puntos del cliente Sistema genera comprobante de canje Extensiones Id cliente invalido Sistema genera mensaje “ id invalido” Funcionario verificará el id registrado y en caso de error de digitación el sistema le facilitará el reinicio en el punto 2 Artículo no existe.INGENIEROS ASOCIADOS CASO DE USO 3 <<INCLUDE>> CAMBIAR Y ACTUALIZAR PUNTOS VERIFICAR CLIENTE FUNCIONARIO <<EXTEND>> ARTICULO NO CANJEABLE Paso 1 2 3 4 5 6 7 8 9 10 11 3. puntos insuficientes. artículo no está en el catálogo de canjeables.1 7. El sistema genera mensaje “artículo no existe” El funcionario verificará el id registrado y en caso de error de digitación el sistema le facilitará el reinicio en el punto 6 El sistema genera mensaje “puntos insuficientes” .3 7.1 3. el valor en puntos del artículo y subtotal de puntos canjeados Se repiten los pasos 5-8 hasta que se le indique que no hay más artículos a canjear.4 CASO DE USO 3 – CAMBIAR Y ACTUALIZAR PUNTOS Actividad Funcionario solicita al sistema canjear puntos por artículos Sistema solicita el id cliente Funcionario digita el id cliente Sistema valida la existencia del cliente Sistema solicita el id artículo que se va a canjear Funcionario digita el id artículo Sistema valida el id del artículo Sistema despliega el nombre del artículo .2 3.2 7.

panes. granos. Extensiones Fecha invalido . Catálogo de puntos El sistema generará cada mes un catálogo de puntos. puntos y valor de venta.1 CASO DE USO 4 – CATALOGO DE PUNTOS Actividad Funcionario solicita al sistema generar el catálogo Sistema solicita ingresar el mes y año del catalogo Funcionario ingresa el mes y el año Sistema valida el mes y año Sistema Solicita el tipo de Artículo Funcionario ingresa el tipo de Artículo Sistema verifica el tipo de artículo Sistema despliega el nombre de los artículos que correspondan al tipo de artículo ingresado y el valor en puntos de cada uno.5 7. CASO DE USO 4 <<INCLUDE>> GENERAR CATALOGO VERIFICAR TIPO DE ARTICULO FUNCIONARIO <<EXTEND>> TIPO DE ARTICULO NO EXISTE Paso 1 2 3 4 5 6 7 8 9 3. etc. Sepiten los pasos 5 a 8 hasta que se indique al sistema que no se requieren más catálogos. Ej lácteos. Por cada tipo se describirán los artículos con su nombre.INGENIEROS ASOCIADOS 7.6 7. El catálogo se clasificará por tipos de artículos. referencia.7 El funcionario verificará el artículo ingresado y el sistema le facilitará el reinicio en el punto 6 para canjear por otro artículo El sistema genera mensaje “artículo no canjeable” El funcionario verificará el que el artículo no éste en el catálogo de canjeables y en caso de error de digitación el sistema le facilitará el reinicio en el punto 6 4. bebidas refrescantes.

2 3.1 5. el sistema le facilitará el reinicio al punto 5 5.2 3. Generar informe de puntos El sistema generará un informe diario de cambio de puntos indicando fecha de los cambios y un total de cantidades. Extensiones Fecha invalida Sistema genera mensaje “fecha incorrecta” Funcionario verificara el date ingresado y en caso de error de digitación el sistema le facilitara el reinicio en el punto 2 No hay canjes en esa fecha Sistema genera mensaje “No hay canjes en esta fecha” Sistema facilitará el reinicio al paso 1 . Además desplegará el total de los valores de ventas de los puntos cambiados. y valores canjeados por artículo. CASO DE USO 5 <<EXTEND>> GENERAR INFORME NO HAY CANJES EN ESTA FECHA FUNCIONARIO Paso 1 2 3 4 5 6 3.INGENIEROS ASOCIADOS 3. puntos canjes y detalles de los canjes Sistema genera el informe de cambios de puntos del día.3 5. de canjes.3 Sistema genera mensaje “fecha incorrecta” Funcionario verificara el date ingresado y en caso de error de digitación el sistema le facilitara el reinicio en el punto 2 Tipo de Artículo no existe Sistema genera un mensaje “Tipo de Articulo no Existe” Funcionario verificara el tipo de articulo ingresado y en caso de error de digitación. puntos.2 6.2 5.3 CASO DE USO 5 – GENERAR INFORME DE CAMBIO DE PUNTOS Actividad Funcionario solicita al sistema generar el informe de cambio de puntos Sistema solicita fecha del día a generar Funcionario ingresa fecha del informe Sistema valida la fecha Sistema despliega núm.1 6.3 6.1 3.

2) vr_item Number (10.INGENIEROS ASOCIADOS MODELO DE DATOS catalogo num_catalogo <pi> Number (5) <M> mes_catalogo Date <M> año_catalogo <Undefined> <M> Relationship_1 tipo_articulo catalogo_tipoarticulo ind_catalogo <pi> Number (2) <M> cod_tipo <pi> Number (4) <M> Relationship_2 nom_tipo Characters (40) <M> cliente canje num_canje <pi> Number (10) <M> mes_canje Date <M> año_canje Date <M> Relationship_4 Relationship_6 Relationship_5 id_cliente <pi> Number (15) <M> nom_cliente Variable characters (50) <M> dir_cliente Variable characters (50) <M> email_cliente Variable characters (30) acum_ptos Number (5) Identifier_1 <pi> .2) est_det_venta Variable characters (10) Relationship_10 venta num_venta <pi> Number (10) <M> fecha_venta Date <M> Relationship_9 .2) detalle_canje Relationship_8 item_canje <pi> Number (2) <M> cantidad Number (3.. Relationship_7 articulo articulo_puntos-catalogo item_ptos <pi> Number (2) <M> ptos_art <Undefined> <M> Relationship_3 cod_art <pi> Number (5) <M> nom_art Characters (50) <M> vr_compra Number (10. Relationship_11 detalle_venta item_venta <pi> Number (2) canti Number (3....2) <M> estado_canje Characters (1) <M> Identifier_1 <pi> . Identifier_1 <pi> .2) vr_venta Number (10...

2) Number (10.2) contiene # * * * * detalle_canje item_canje Number (2) num_canje Number (10) cod_art Number (5) cantidad Number (3.2) Variable characters (10) venta dividida # num_venta Number (10) * id_cliente Number (15) * fecha_venta Date realiza .2) o vr_venta Number (10.2) estado_canje Characters (1) referenciado detalle_venta # * * * * o item_venta num_venta cod_art canti vr_item est_det_venta Number (2) Number (10) Number (5) Number (3.INGENIEROS ASOCIADOS MODELO LOGICO catalogo num_catalogo <pi> Number (5) <M> mes_catalogo Date <M> año_catalogo <Undefined> <M> por tipo_articulo # cod_tipo Number (4) * nom_tipo Characters (40) catalogo_tipoarticulo # num_catalogo Number (5) # ind_catalogo Number (2) * cod_tipo Number (4) seccion canje # * * * num_canje id_cliente mes_canje año_canje Number (10) Number (15) Date Date clasificado detalla solicita # * * o o id_cliente nom_cliente dir_cliente email_cliente acum_ptos cliente Number (15) Variable characters (50) Variable characters (50) Variable characters (30) Number (5) tiene # o o o * articulo_puntos-catalogo item_ptos Number (2) cod_art Number (5) num_catalogo Number (5) ind_catalogo Number (2) ptos_art <Undefined> asignapuntos articulo # cod_art Number (5) * cod_tipo Number (4) * nom_art Characters (50) o vr_compra Number (10.

INGENIEROS ASOCIADOS MODELO FISICO catalogo num_catalogo NUMBER(5) <pk> mes_catalogo DATE año_catalogo <Undefined> FK_CATALOGO_POR_CATALOGO tipo_articulo catalogo_tipoarticulo num_catalogo NUMBER(5) <pk.2) VARCHAR2(10) venta FK_DETALLE__DIVIDIDA_VENTA num_venta NUMBER(10) <pk> id_cliente NUMBER(15) <fk> fecha_venta DATE FK_VENTA_REALIZA_CLIENTE .2) NUMBER(10.2) NUMBER(10.2) CHAR(1) FK_DETALLE__REFERENCI_ARTICULO detalle_venta item_venta num_venta cod_art canti vr_item est_det_venta NUMBER(2) <pk> NUMBER(10) <fk1> NUMBER(5) <fk2> NUMBER(3.2) detalle_canje FK_DETALLE__CONTIENE_ARTICULO item_canje num_canje cod_art cantidad estado_canje NUMBER(2) <pk> NUMBER(10) <fk1> NUMBER(5) <fk2> NUMBER(3.fk1> ind_catalogo NUMBER(2) <pk> cod_tipo NUMBER(4) <fk2> FK_ARTICULO_DETALLA_CATALOGO cod_tipo NUMBER(4) <pk> nom_tipo CHAR(40) FK_CATALOGO_SECCION_TIPO_ART canje num_canje id_cliente mes_canje año_canje FK_ARTICULO_CLASIFICA_TIPO_ART NUMBER(10) <pk> id_cliente NUMBER(15) <fk> FK_CANJE_SOLICITA_CLIENTE nom_cliente DATE dir_cliente DATE email_cliente acum_ptos cliente NUMBER(15) <pk> VARCHAR2(50) VARCHAR2(50) VARCHAR2(30) NUMBER(5) FK_DETALLE__TIENE_CANJE articulo articulo_puntos-catalogo item_ptos cod_art num_catalogo ind_catalogo ptos_art NUMBER(2) NUMBER(5) NUMBER(5) NUMBER(2) <Undefined> cod_art cod_tipo <pk> nom_art <fk1> vr_compra <fk2> vr_venta FK_ARTICULO_ASIGNAPUN_ARTICULO <fk2> NUMBER(5) <pk> NUMBER(4) <fk> CHAR(50) NUMBER(10.

/*============================================================= =*/ /* Table: ARTICULO_PUNTOS_CATALOGO */ .2). constraint PK_ARTICULO primary key (COD_ART) ).m. */ /*============================================================= =*/ /*============================================================= =*/ /* Table: ARTICULO */ /*============================================================= =*/ create table ARTICULO ( COD_ART NUMBER(5) not null.INGENIEROS ASOCIADOS CONSTRUCCION CAPA DE ALMACENAMIENTO SCRIPT PUNTOS /*============================================================= =*/ /* DBMS name: ORACLE Version 11g */ /* Created on: 16/06/2013 07:36:22 a. COD_TIPO NUMBER(4) not null. VR_VENTA NUMBER(10. /*============================================================= =*/ /* Index: CLASIFICADO_FK */ /*============================================================= =*/ create index CLASIFICADO_FK on ARTICULO ( COD_TIPO ASC ). VR_COMPRA NUMBER(10. NOM_ART CHAR(50) not null.2).

/*============================================================= =*/ /* Index: ASIGNAPUNTOS_FK */ /*============================================================= =*/ create index ASIGNAPUNTOS_FK on ARTICULO_PUNTOS_CATALOGO ( COD_ART ASC ). ID_CLIENTE NUMBER(15) not null.INGENIEROS ASOCIADOS /*============================================================= =*/ create table ARTICULO_PUNTOS_CATALOGO ( ITEM_PTOS NUMBER(2) not null. IND_CATALOGO ASC ). MES_CANJE DATE not null. . constraint PK_ARTICULO_PUNTOS_CATALOGO primary key (ITEM_PTOS) ). NUM_CATALOGO NUMBER(5). IND_CATALOGO NUMBER(2). /*============================================================= =*/ /* Table: CANJE */ /*============================================================= =*/ create table CANJE ( NUM_CANJE NUMBER(10) not null. constraint PK_CANJE primary key (NUM_CANJE) ). COD_ART NUMBER(5). /*============================================================= =*/ /* Index: DETALLA_FK */ /*============================================================= =*/ create index DETALLA_FK on ARTICULO_PUNTOS_CATALOGO ( NUM_CATALOGO ASC. PTOS_ART CHAR(10) not null. ANO_CANJE DATE not null.

IND_CATALOGO) ). constraint PK_CATALOGO primary key (NUM_CATALOGO) ). MES_CATALOGO DATE not null. /*============================================================= =*/ /* Table: CATALOGO_TIPOARTICULO */ /*============================================================= =*/ create table CATALOGO_TIPOARTICULO ( NUM_CATALOGO NUMBER(5) not null. /*============================================================= =*/ /* Table: CATALOGO */ /*============================================================= =*/ create table CATALOGO ( NUM_CATALOGO NUMBER(5) not null.INGENIEROS ASOCIADOS /*============================================================= =*/ /* Index: SOLICITA_FK */ /*============================================================= =*/ create index SOLICITA_FK on CANJE ( ID_CLIENTE ASC ). /*============================================================= =*/ /* Index: POR_FK */ /*============================================================= =*/ create index POR_FK on CATALOGO_TIPOARTICULO ( NUM_CATALOGO ASC ). ANO_CATALOGO CHAR(10) not null. constraint PK_CATALOGO_TIPOARTICULO primary key (NUM_CATALOGO. COD_TIPO NUMBER(4) not null. IND_CATALOGO NUMBER(2) not null. .

/*============================================================= =*/ /* Table: CLIENTE */ /*============================================================= =*/ create table CLIENTE ( ID_CLIENTE NUMBER(15) not null. constraint PK_DETALLE_CANJE primary key (ITEM_CANJE) ). NOM_CLIENTE VARCHAR2(50) not null. constraint PK_CLIENTE primary key (ID_CLIENTE) ). COD_ART NUMBER(5) not null. EMAIL_CLIENTE VARCHAR2(30). NUM_CANJE NUMBER(10) not null. DIR_CLIENTE VARCHAR2(50) not null. ACUM_PTOS NUMBER(5). CANTIDAD NUMBER(3. ESTADO_CANJE CHAR(1) not null.INGENIEROS ASOCIADOS /*============================================================= =*/ /* Index: SECCION_FK */ /*============================================================= =*/ create index SECCION_FK on CATALOGO_TIPOARTICULO ( COD_TIPO ASC ). /*============================================================= =*/ /* Index: TIENE_FK */ /*============================================================= =*/ create index TIENE_FK on DETALLE_CANJE ( . /*============================================================= =*/ /* Table: DETALLE_CANJE */ /*============================================================= =*/ create table DETALLE_CANJE ( ITEM_CANJE NUMBER(2) not null.2) not null.

/*============================================================= =*/ /* Index: CONTIENE_FK */ /*============================================================= =*/ create index CONTIENE_FK on DETALLE_CANJE ( COD_ART ASC ). CANTI NUMBER(3. .2) not null.INGENIEROS ASOCIADOS NUM_CANJE ASC ).2) not null. /*============================================================= =*/ /* Index: REFERENCIADO_FK */ /*============================================================= =*/ create index REFERENCIADO_FK on DETALLE_VENTA ( COD_ART ASC ). EST_DET_VENTA VARCHAR2(10). COD_ART NUMBER(5) not null. constraint PK_DETALLE_VENTA primary key (ITEM_VENTA) ). VR_ITEM NUMBER(10. NUM_VENTA NUMBER(10) not null. /*============================================================= =*/ /* Table: DETALLE_VENTA */ /*============================================================= =*/ create table DETALLE_VENTA ( ITEM_VENTA NUMBER(2) not null. /*============================================================= =*/ /* Index: DIVIDIDA_FK */ /*============================================================= =*/ create index DIVIDIDA_FK on DETALLE_VENTA ( NUM_VENTA ASC ).

constraint PK_VENTA primary key (NUM_VENTA) ). NOM_TIPO CHAR(40) not null. ID_CLIENTE NUMBER(15) not null. constraint PK_TIPO_ARTICULO primary key (COD_TIPO) ). FECHA_VENTA DATE not null. alter table ARTICULO_PUNTOS_CATALOGO add constraint FK_ARTICULO_ASIGNAPUN_ARTICULO (COD_ART) references ARTICULO (COD_ART). alter table ARTICULO add constraint FK_ARTICULO_CLASIFICA_TIPO_ART foreign key (COD_TIPO) references TIPO_ARTICULO (COD_TIPO). /*============================================================= =*/ /* Index: REALIZA_FK */ /*============================================================= =*/ create index REALIZA_FK on VENTA ( ID_CLIENTE ASC ).INGENIEROS ASOCIADOS /*============================================================= =*/ /* Table: TIPO_ARTICULO */ /*============================================================= =*/ create table TIPO_ARTICULO ( COD_TIPO NUMBER(4) not null. /*============================================================= =*/ /* Table: VENTA */ /*============================================================= =*/ create table VENTA ( NUM_VENTA NUMBER(10) not null. alter table ARTICULO_PUNTOS_CATALOGO foreign key .

alter table CANJE add constraint FK_CANJE_SOLICITA_CLIENTE foreign key (ID_CLIENTE) references CLIENTE (ID_CLIENTE). alter table DETALLE_CANJE add constraint FK_DETALLE__TIENE_CANJE foreign key (NUM_CANJE) references CANJE (NUM_CANJE). foreign alter table VENTA add constraint FK_VENTA_REALIZA_CLIENTE foreign key (ID_CLIENTE) references CLIENTE (ID_CLIENTE). alter table DETALLE_CANJE add constraint FK_DETALLE__CONTIENE_ARTICULO foreign key (COD_ART) references ARTICULO (COD_ART). IND_CATALOGO). key . alter table DETALLE_VENTA add constraint FK_DETALLE__DIVIDIDA_VENTA foreign key (NUM_VENTA) references VENTA (NUM_VENTA). alter table CATALOGO_TIPOARTICULO add constraint FK_CATALOGO_POR_CATALOGO (NUM_CATALOGO) references CATALOGO (NUM_CATALOGO). foreign key alter table CATALOGO_TIPOARTICULO add constraint FK_CATALOGO_SECCION_TIPO_ART foreign key (COD_TIPO) references TIPO_ARTICULO (COD_TIPO). alter table DETALLE_VENTA add constraint FK_DETALLE__REFERENCI_ARTICULO (COD_ART) references ARTICULO (COD_ART).INGENIEROS ASOCIADOS add constraint FK_ARTICULO_DETALLA_CATALOGO foreign key (NUM_CATALOGO. IND_CATALOGO) references CATALOGO_TIPOARTICULO (NUM_CATALOGO.

INGENIEROS ASOCIADOS CARGUE DEL SCRIPT EN SQL CONEXIÓN CON SQL DEVELOPER .

INGENIEROS ASOCIADOS .

INGENIEROS ASOCIADOS .

********************************************************************************************** Procedimiento almacenado Verificar Artículo ********************************************************************************************** create or replace procedure verificararticulo(arti in number. . vrventa number) is begin insert into articulo values(codart. codtipo.nomart varchar2. end. vrventa). a out boolean ) is v_articulo articulo%rowtype.vrcompra number. nomart.codtipo number.INGENIEROS ASOCIADOS CAPA LOGICA PROCEDIMIENTOS Y PRUEBAS ARTICULOS INSERTAR Procedimiento almacenado Insertar Artículo ********************************************************************************************** create or replace procedure insertararticulo(codart number. vrcompra.

********************************************************************************************** Procedimiento almacenado Validar Inserción Artículo ********************************************************************************************** create or replace procedure validarinsercionarticulo(co number. end verificararticulo. begin verificararticulo(co. . vc number. exception when No_data_found then a:=false. ti number. yaexiste exception. vv number) is res boolean.res). a:= true.INGENIEROS ASOCIADOS begin select * into v_articulo from articulo where codart =arti.nomb varchar2.

put_line(' artículo ya existe '). Declare v_co number(5) := &Código_artículo. dbms_output. put_line(' artículo adicionado ').2) :=&Valor_compra. end if. ********************************************************************************************** Bloque Anónimo Ejecuta Validar Inserción Artículo ********************************************************************************************** Set serveroutpunt on. else insertararticulo(co . v_vc number(10. end. exception WHEN yaexiste THEN dbms_output. vc . v_ti number(4) := &Código_tipo.nomb . vv). v_nomb varchar2(50) :='&Nombre_artículo'. ti .INGENIEROS ASOCIADOS if res = true then raise yaexiste. set verify off. .

v_nomb . v_ti . v_vv). begin validarinsercionarticulo(v_co .INGENIEROS ASOCIADOS v_vv number(10. ********************************************************************************************** . end. v_vc .2) :=&Valor_venta.

vrventa where codart = reg_articulo.vrventa = reg_articulo.INGENIEROS ASOCIADOS ACTUALIZAR Procedimiento Almacenado Actualizar Registro Artículo ********************************************************************************************** create or replace procedure actualizaregistroarticulo(reg_articulo articulo%rowtype) is begin update articulo set codtipo =reg_articulo.nomart =reg_articulo.codart.vrcompra .vrcompra =reg_articulo.nomart . end. ********************************************************************************************** .codtipo .

res). . else raise noexiste.INGENIEROS ASOCIADOS Procedimiento Almacenado Validar Actualización Artículo ********************************************************************************************** create or replace procedure validaractualizacionarticulo(reg_articulo articulo%rowtype) is res boolean. begin validaarticulo(reg_articulo. end if. noexiste exception.codart. if res = true then actualizaregistroarticulo(reg_articulo).

INGENIEROS ASOCIADOS exception WHEN noexiste THEN dbms_output. begin reg_articulo. end. Y luego llama al procedimiento almacenado validaractualizacionarticulo */ Declare reg_articulo articulo%rowtype. put_line(' artículo no existe ').codart :=&Código_artículo. . reg_articulo. ********************************************************************************************** Bloque Anónimo Validar Actualización Artículo ********************************************************************************************** /* bloque que recibe los valores a modificar del articulo.codtipo := &Código_tipo.

********************************************************************************************** ELIMINAR Eliminar Registro Artículo ********************************************************************************************** create or replace procedure eliminarregistroarticulo(arti number) is begin delete from articulo where codart = arti. end. reg_articulo.nomart :='&Nombre_artículo'. validaractualizacionarticulo(reg_articulo). end.vrventa :=&Valor_venta.INGENIEROS ASOCIADOS reg_articulo. ********************************************************************************************** .vrcompra :=&Valor_compra. reg_articulo.

end. end if.res). noexiste exception. begin verificararticulo(codart. if res = true then eliminarregistroarticulo(codart). ********************************************************************************************** .INGENIEROS ASOCIADOS Validar Eliminar Artículo ********************************************************************************************** create or replace procedure validareliminararticulo(codart number) is res boolean. else raise noexiste.put_line('Este artículo no existe'). exception WHEN noexiste THEN dbms_output.

set serveroutput on. ********************************************************************************************** . declare codart number (5) := &Codigo_Articulo. end.INGENIEROS ASOCIADOS Bloque Anónimo Eliminar Artículo ********************************************************************************************** set verify off. begin validareliminararticulo (codart).

INGENIEROS ASOCIADOS .

INGENIEROS ASOCIADOS .

********************************************************************************************** . regart out articulo%rowtype) is begin select * into regart from articulo where codart = arti.INGENIEROS ASOCIADOS CONSULTA A UN REGISTRO Consultar Registro Artículo ********************************************************************************************** create or replace procedure consultaregistroarticulo(arti in number. end.

put_line(v_regart.codtipo ||' '||v_regart.vrventa). ********************************************************************************************** . put_line(v_regart. dbms_output.INGENIEROS ASOCIADOS Procedimiento Almacenado Despliega Artículo ********************************************************************************************** create or replace procedure despliegaarticulo(v_regart articulo%rowtype) as begin dbms_output.vrcompra ||' ' ||v_regart.nomart).codart ||' ' ||v_regart. end.

noexiste exception. if res = true then . v_regart articulo%rowtype. begin verificararticulo(arti.INGENIEROS ASOCIADOS Procedimiento Almacenado Validar Consultar Artículo ********************************************************************************************** create or replace procedure validarconsultararticulo12(arti number) is res boolean.res).

put_line(' artículo no existe '). else raise noexiste. exception WHEN noexiste THEN dbms_output. end if. ********************************************************************************************** .INGENIEROS ASOCIADOS consultaregistroarticulo(arti. despliegaarticulo(v_regart). end.v_regart).

end.INGENIEROS ASOCIADOS Bloque Anónimo Ejecutar Validar Consulta Artículo ********************************************************************************************** /* bloque anonimo que llama a un procedimiento validarconsultararticulo que valida la solicitud */ set verify off. ********************************************************************************************** . set serveroutput on. begin validarconsultararticulo12(v_ar). declare v_ar number := &codigo_articulo.

5) ||' to_char(v_regart. ' '|| dbms_output.10)).put_line('**********************************************************').nomart. ||lpad( lpad( .codtipo).4) ||' '||rpad(v_regart. put_line(rpad( to_char(v_regart.50) ||' to_char(v_regart.10) ||lpad( to_char(v_regart.codart).INGENIEROS ASOCIADOS Consulta a Todos los Registros Procedimiento Almacenado Listar Artículos ********************************************************************************************** create or replace procedure listararticulos3 is begin for v_regart in (select * from articulo order by codart ) LOOP dbms_output.vrcompra).vrventa).

INGENIEROS ASOCIADOS end LOOP. declare . ********************************************************************************************** Bloque Anónimo Ejecuta Listar Artículos ********************************************************************************************** set verify off. end. set serveroutput on.

acumpuntos). nomclient. emailclient.dirclient varchar2. ********************************************************************************************** CLIENTES INSERTAR Procedimiento Almacenado Insertar Cliente ********************************************************************************************** create or replace procedure insertarcliente(idclient number.emailclient varchar2. . end.INGENIEROS ASOCIADOS begin listararticulos3. acumpuntos number) is begin insert into cliente values(idclient.nomclient varchar2. dirclient.

INGENIEROS ASOCIADOS end. ********************************************************************************************** .

********************************************************************************************** . end verificarcliente. a:= true. begin select * into v_cliente from cliente where idclient =client.INGENIEROS ASOCIADOS Procedimiento Almacenado Verificar Cliente ********************************************************************************************** create or replace procedure verificarcliente(client in number. a out boolean ) is v_cliente cliente%rowtype. exception when No_data_found then a:=false.

dir . email . put_line(' cliente adicionado '). En caso de que exista el cliente entonces procede a levantar una excepción indicando que el cliente ya existe */ create or replace procedure validarinsercioncliente(id number.dir varchar2. acum number) is res boolean. nom varchar2. exception WHEN yaexiste THEN dbms_output. ********************************************************************************************** . end.INGENIEROS ASOCIADOS Procedimiento Almacenado Validar Inserción Cliente ********************************************************************************************** /* procedimiento que recibe los valores a insertar del cliente. begin verificarcliente(id. dbms_output. acum). else insertarcliente(id . Primero comprueba que el cliente no exista con el fin de llamar al procedimiento insertarcliente. nom . put_line(' cliente ya existe '). end if. if res = true then raise yaexiste. yaexiste exception.res). email varchar2.

begin validarinsercioncliente(v_id . v_email varchar2(30) :='&Email_cliente'. v_nom . set verify off. v_email . v_dir varchar2(50) :='&Dirección_cliente'.INGENIEROS ASOCIADOS Bloque Anónimo Ejecuta Validar Inserción Cliente ********************************************************************************************** /* bloque que recibe los valores a insertar del cliente. Declare v_id number(15. v_acum). v_nom varchar2(50) := '&Nombre_cliente'. Y luego llama al procedimiento almacenado validarinsercioncliente */ Set serveroutpunt on. ********************************************************************************************** .0) :=&Acumulado_puntos.v_dir . end.0) := &Código_cliente. v_acum number(5.

INGENIEROS ASOCIADOS .

INGENIEROS ASOCIADOS .

emailclient .acumpuntos = reg_cliente. end.dirclient =reg_cliente.dirclient .INGENIEROS ASOCIADOS ACTUALIZAR Procedimiento Almacenado Actualizar Registro Cliente ********************************************************************************************** create or replace procedure actualizaregistrocliente(reg_cliente cliente%rowtype) is begin update cliente set nomclient =reg_cliente.emailclient =reg_cliente. ********************************************************************************************** .nomclient .idclient.acumpuntos where idclient = reg_cliente.

res). En caso de que no exista el artículo entonces procede a levantar una excepción indicando que el cliente no existe */ create or replace cliente%rowtype) is procedure res boolean. begin validacliente(reg_cliente. Primero comprueba que el cliente exista con el fin de llamar al procedimiento actualizaregistrocliente. noexiste exception.INGENIEROS ASOCIADOS Procedimiento Almacenado Validar Actualización Cliente ********************************************************************************************** /* procedimiento que recibe los valores a actualizar del cliente.idclient. validaractualizacioncliente( reg_cliente .

else raise noexiste. ********************************************************************************************** . end if. exception WHEN noexiste THEN dbms_output.INGENIEROS ASOCIADOS if res = true then actualizaregistrocliente(reg_cliente). end. put_line(' cliente no existe ').

INGENIEROS ASOCIADOS

Bloque Anónimo Validar Actualización cliente
**********************************************************************************************
/* bloque que recibe los valores a modificar del cliente. Y luego llama al
procedimiento almacenado validaractualizacioncliente */
Declare
reg_cliente cliente%rowtype;
begin
reg_cliente.idclient :=&Id_cliente;
reg_cliente.nomclient := &Nombre_cliente;
reg_cliente.dirclient :='&Dirección_cliente;
reg_cliente.emailclient :=&Email_cliente;
reg_cliente.acumpuntos :=&Puntos_acumulados;
validaractualizacioncliente(reg_cliente);
end;
**********************************************************************************************
ELIMINAR
**********************************************************************************************
create or replace procedure eliminarregistrocliente(clie number)
is
begin
delete from cliente where idclient = clie;
end;
**********************************************************************************************

INGENIEROS ASOCIADOS

Validar Eliminar Cliente
**********************************************************************************************
create or replace procedure validareliminarcliente(idclient number)
is
res boolean;
noexiste exception;
begin
verificarcliente(idclient,res);
if res = true then
eliminarregistrocliente(idclient);
else

INGENIEROS ASOCIADOS

raise noexiste;
end if;
exception
WHEN noexiste THEN
dbms_output.put_line('Este cliente no existe');
end;
**********************************************************************************************

Bloque Anónimo Eliminar Cliente
**********************************************************************************************
set verify off;
set serveroutput on;
declare
idclient number (15) := &Identificación_Cliente;

end.INGENIEROS ASOCIADOS begin validareliminarcliente (idclient). ********************************************************************************************** .

INGENIEROS ASOCIADOS .

regcliente out cliente%rowtype) is begin select * into regcliente from cliente where idclient = ident. ********************************************************************************************** .INGENIEROS ASOCIADOS Consulta a un Registro ********************************************************************************************** create or replace procedure consultaregistrocliente(ident in number. end.

end. put_line(v_regcliente.idclient ||' ' ||v_regcliente. dbms_output.emailclient ||' ' ||v_regcliente.acumpuntos).nomclient ||' '||v_regcliente. ********************************************************************************************** .INGENIEROS ASOCIADOS Procedimiento Almacenado Despliega Cliente ********************************************************************************************** create or replace procedure despliegacliente(v_regcliente cliente%rowtype) as begin dbms_output.dirclient). put_line(v_regcliente.

INGENIEROS ASOCIADOS Procedimiento Almacenado Validar Consultar Cliente ********************************************************************************************** create or replace procedure validarconsultarcliente12(ident number) is res boolean. ********************************************************************************************** .v_regcliente). end. put_line(' cliente no existe '). else raise noexiste. begin validacliente(ident. exception WHEN noexiste THEN dbms_output. end if.res). v_regcliente cliente%rowtype. if res = true then consultaregistrocliente(ident. noexiste exception. despliegacliente(v_regcliente).

set serveroutput on. end. begin validarconsultarcliente12(v_co). ********************************************************************************************** .INGENIEROS ASOCIADOS Bloque Anónimo Ejecuta Validar Consulta Cliente ********************************************************************************************** /* bloque anonimo que llama a un procedimiento validarconsultarcliente que valida la solicitud */ set verify off. declare v_co number := &codigo_cliente.

put_line('**********************************************************'). dbms_output.emailclient).acumpuntos). end LOOP. ********************************************************************************************** .INGENIEROS ASOCIADOS CONSULTA A TODOS LOS REGISTROS Procedimiento Almacenado Listar Clientes ********************************************************************************************** create or replace procedure listarclientes3 is begin For v_regart in (select * from cliente order by idclient ) LOOP dbms_output.50) ||' '|| lpad( to_char(v_regart.5)).50) ||' '||rpad(v_regart. put_line(rpad( to_char(v_regart.30) ||lpad( to_char(v_regart.15) ||' ' ||lpad( to_char(v_regart.idclient). end.dirclient.nomclient).

INGENIEROS ASOCIADOS Bloque Anónimo Ejecuta Listar Clientes ********************************************************************************************** set verify off. set serveroutput on. ********************************************************************************************** . end. declare begin listarclientes3.

elsif updating then tipoaccion :='U'. end if.INGENIEROS ASOCIADOS TRIGGERS ********************************************************************************************** CREATE OR REPLACE TRIGGER LOGCLIENTE AFTER INSERT OR DELETE OR UPDATE ON CLIENTE declare tipoaccion char(1). else tipoaccion :='D'. / ********************************************************************************************** . begin if inserting then tipoaccion :='I'. end.

elsif updating then tipoaccion :='U'. begin if inserting then tipoaccion :='I'.INGENIEROS ASOCIADOS ********************************************************************************************** create or replace TRIGGER LOGARTICULO AFTER INSERT OR DELETE OR UPDATE ON ARTICULO declare tipoaccion char(1). else .

end. ********************************************************************************************** . end if.INGENIEROS ASOCIADOS tipoaccion :='D'.

23 #28-15'.INGENIEROS ASOCIADOS LOG Datos Para Prueba de Auditoria ********************************************************************************************** INSERT INTO CLIENTE(idclient. UPDATE CLIENTE SET acumpuntos = 6. UPDATE CLIENTE SET dirclient = ' JORDAN CS. 'carmenperez@yahoo.7). dirclient. emailclient.'CADIZ CS.100 # 10-25' WHERE idclient =1007. 'CARMEN PEREZ'. acumpuntos) VALUES (1007.es'. ********************************************************************************************** . nomclient.

INGENIEROS ASOCIADOS .