Vous êtes sur la page 1sur 65

INGENIEROS ASOCIADOS

INDICE
INDICE

ANALISIS DEL SISTEMA

ALCANCE

MODELOS DE CASOS DE USO

MODELO DE DATOS

MODELO LOGICO

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 organizacin comercial dedicada a la comercializacin
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 crticos como el control de puntos de ventas, debido a que el principal
inters de esta organizacin es cultivar el inters de los clientes.
Para efecto del control de puntos de ventas se debern realizar en el terminal de
ventas, donde los clientes podrn 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 artculos
El director del rea de ventas con base en las estadsticas de ventas, cada mes,
selecciona los artculos que se cambiarn por puntos y asigna los puntos
respectivos. Un funcionario de la oficina de Atencin al cliente registra en el
sistema la identificacin del artculo, el nmero de puntos y el mes de vigencia de
los puntos. El sistema debe administrar el histrico de puntos de un artculo.
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 artculos y puntos correspondientes.
Sistema solicita id artculo y puntos del artculo
Director digita el id artculo y puntos del artculo
Sistema verifica la existencia del artculo
Sistema valida el nmero de puntos
Sistema almacena los puntos asignados al artculo
Se repiten los pasos 2 a 6 hasta que se indique al sistema que no hay ms artculos para
asignar puntos
El sistema genera mensaje Puntos Asignados
EXTENSIONES
Artculo no existe o tipo de dato incorrecto
El sistema genera mensaje artculo no existe
El funcionario verificar el id registrado y en caso de error de digitacin 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 digitacin el
sistema le facilitar el reinicio en el punto 2

INGENIEROS ASOCIADOS

2. Actualizar puntos de los clientes con las ventas del da


Finalizadas las ventas del da, el jefe de operacin de la oficina de ventas le
indica al director de la oficina de Atencin al cliente que las ventas del da pueden
ser utilizadas para actualizar los puntos de los clientes. Un funcionario de Atencin
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 actualizacin realizada
Extensiones
3.1
Fecha invalida
3.2
Sistema genera mensaje fecha invalida
3.3
El funcionario verificar la fecha registrada y en caso de error de digitacin el sistema le
facilitar el reinicio en el punto 2

3. Cambio de puntos y actualizacin de puntos


Para canjear los puntos, el cliente dispone de un catlogo de puntos y con base en
ese catlogo procede a seleccionar los artculos y se dirige a la oficina de atencin
al cliente donde un funcionario registrar el canje y le indicar al sistema la
identificacin del cliente y los artculos a cambiar, el sistema validar el cambio en
cuanto a que el cliente tenga los puntos suficientes. Una vez realizado el cambio,
el sistema actualizar el total de puntos del cliente y generar un comprobante de
canje donde se referencie los artculos cambiados con su equivalencia en puntos y
el nuevo saldo de puntos del cliente.

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.1
3.2
3.3
7.1
7.2
7.3
7.4

CASO DE USO 3 CAMBIAR Y ACTUALIZAR PUNTOS


Actividad
Funcionario solicita al sistema canjear puntos por artculos
Sistema solicita el id cliente
Funcionario digita el id cliente
Sistema valida la existencia del cliente
Sistema solicita el id artculo que se va a canjear
Funcionario digita el id artculo
Sistema valida el id del artculo
Sistema despliega el nombre del artculo , el valor en puntos del artculo y subtotal de
puntos canjeados
Se repiten los pasos 5-8 hasta que se le indique que no hay ms artculos a canjear.
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 digitacin el sistema le
facilitar el reinicio en el punto 2
Artculo no existe, puntos insuficientes, artculo no est en el catlogo de canjeables.
El sistema genera mensaje artculo no existe
El funcionario verificar el id registrado y en caso de error de digitacin el sistema le
facilitar el reinicio en el punto 6
El sistema genera mensaje puntos insuficientes

INGENIEROS ASOCIADOS

7.5
7.6
7.7

El funcionario verificar el artculo ingresado y el sistema le facilitar el reinicio en el punto


6 para canjear por otro artculo
El sistema genera mensaje artculo no canjeable
El funcionario verificar el que el artculo no ste en el catlogo de canjeables y en caso de
error de digitacin el sistema le facilitar el reinicio en el punto 6

4. Catlogo de puntos
El sistema generar cada mes un catlogo de puntos. El catlogo se clasificar
por tipos de artculos, Ej lcteos, bebidas refrescantes, granos, panes, etc. Por
cada tipo se describirn los artculos con su nombre, referencia, puntos y valor de
venta.
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.1

CASO DE USO 4 CATALOGO DE PUNTOS


Actividad
Funcionario solicita al sistema generar el catlogo
Sistema solicita ingresar el mes y ao del catalogo
Funcionario ingresa el mes y el ao
Sistema valida el mes y ao
Sistema Solicita el tipo de Artculo
Funcionario ingresa el tipo de Artculo
Sistema verifica el tipo de artculo
Sistema despliega el nombre de los artculos que correspondan al tipo de artculo
ingresado y el valor en puntos de cada uno.
Sepiten los pasos 5 a 8 hasta que se indique al sistema que no se requieren ms
catlogos.
Extensiones
Fecha invalido

INGENIEROS ASOCIADOS

3.2
3.3
6.1
6.2
6.3

Sistema genera mensaje fecha incorrecta


Funcionario verificara el date ingresado y en caso de error de digitacin el sistema le
facilitara el reinicio en el punto 2
Tipo de Artculo no existe
Sistema genera un mensaje Tipo de Articulo no Existe
Funcionario verificara el tipo de articulo ingresado y en caso de error de digitacin, el
sistema le facilitar el reinicio al punto 5

5. Generar informe de puntos


El sistema generar un informe diario de cambio de puntos indicando fecha de los
cambios y un total de cantidades, puntos, y valores canjeados por artculo.
Adems desplegar el total de los valores de ventas de los puntos cambiados.

CASO DE USO 5

<<EXTEND>>
GENERAR INFORME

NO HAY CANJES EN ESTA FECHA

FUNCIONARIO

Paso
1
2
3
4
5
6
3.1
3.2
3.3
5.1
5.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 da a generar
Funcionario ingresa fecha del informe
Sistema valida la fecha
Sistema despliega nm. de canjes, puntos canjes y detalles de los canjes
Sistema genera el informe de cambios de puntos del da.
Extensiones
Fecha invalida
Sistema genera mensaje fecha incorrecta
Funcionario verificara el date ingresado y en caso de error de digitacin 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

INGENIEROS ASOCIADOS

MODELO DE DATOS
catalogo
num_catalogo <pi> Number (5) <M>
mes_catalogo
Date
<M>
ao_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>
ao_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>
...

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,2)
vr_venta
Number (10,2)

detalle_canje
Relationship_8

item_canje <pi> Number (2) <M>


cantidad
Number (3,2) <M>
estado_canje
Characters (1) <M>
Identifier_1
<pi>
...

Identifier_1
<pi>
...

Relationship_11

detalle_venta
item_venta
<pi> Number (2)
canti
Number (3,2)
vr_item
Number (10,2)
est_det_venta
Variable characters (10)

Relationship_10

venta
num_venta <pi> Number (10) <M>
fecha_venta
Date
<M>

Relationship_9

INGENIEROS ASOCIADOS

MODELO LOGICO
catalogo
num_catalogo <pi> Number (5) <M>
mes_catalogo
Date
<M>
ao_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
ao_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,2)
o vr_venta Number (10,2)

contiene

#
*
*
*
*

detalle_canje
item_canje
Number (2)
num_canje
Number (10)
cod_art
Number (5)
cantidad
Number (3,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,2)
Number (10,2)
Variable characters (10)

venta
dividida

# num_venta Number (10)


* id_cliente
Number (15)
* fecha_venta Date

realiza

INGENIEROS ASOCIADOS

MODELO FISICO

catalogo
num_catalogo NUMBER(5) <pk>
mes_catalogo DATE
ao_catalogo <Undefined>

FK_CATALOGO_POR_CATALOGO

tipo_articulo

catalogo_tipoarticulo
num_catalogo NUMBER(5) <pk,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
ao_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,2)
NUMBER(10,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,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)
NUMBER(10,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

INGENIEROS ASOCIADOS

CONSTRUCCION
CAPA DE ALMACENAMIENTO
SCRIPT PUNTOS
/*=============================================================
=*/
/* DBMS name:
ORACLE Version 11g
*/
/* Created on: 16/06/2013 07:36:22 a.m.
*/
/*=============================================================
=*/

/*=============================================================
=*/
/* Table: ARTICULO
*/
/*=============================================================
=*/
create table ARTICULO
(
COD_ART
NUMBER(5)
not null,
COD_TIPO
NUMBER(4)
not null,
NOM_ART
CHAR(50)
not null,
VR_COMPRA
NUMBER(10,2),
VR_VENTA
NUMBER(10,2),
constraint PK_ARTICULO primary key (COD_ART)
);
/*=============================================================
=*/
/* Index: CLASIFICADO_FK
*/
/*=============================================================
=*/
create index CLASIFICADO_FK on ARTICULO (
COD_TIPO ASC
);
/*=============================================================
=*/
/* Table: ARTICULO_PUNTOS_CATALOGO
*/

INGENIEROS ASOCIADOS

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

INGENIEROS ASOCIADOS

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

INGENIEROS ASOCIADOS

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

INGENIEROS ASOCIADOS

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

INGENIEROS ASOCIADOS

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

foreign

key

INGENIEROS ASOCIADOS

add
constraint
FK_ARTICULO_DETALLA_CATALOGO
foreign
key
(NUM_CATALOGO, IND_CATALOGO)
references
CATALOGO_TIPOARTICULO
(NUM_CATALOGO,
IND_CATALOGO);
alter table CANJE
add constraint FK_CANJE_SOLICITA_CLIENTE foreign key (ID_CLIENTE)
references CLIENTE (ID_CLIENTE);
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_CANJE
add constraint FK_DETALLE__CONTIENE_ARTICULO foreign key (COD_ART)
references ARTICULO (COD_ART);
alter table DETALLE_CANJE
add constraint FK_DETALLE__TIENE_CANJE foreign key (NUM_CANJE)
references CANJE (NUM_CANJE);
alter table DETALLE_VENTA
add constraint FK_DETALLE__DIVIDIDA_VENTA foreign key (NUM_VENTA)
references VENTA (NUM_VENTA);
alter table DETALLE_VENTA
add
constraint
FK_DETALLE__REFERENCI_ARTICULO
(COD_ART)
references ARTICULO (COD_ART);

foreign

alter table VENTA


add constraint FK_VENTA_REALIZA_CLIENTE foreign key (ID_CLIENTE)
references CLIENTE (ID_CLIENTE);

key

INGENIEROS ASOCIADOS

CARGUE DEL SCRIPT EN SQL

CONEXIN CON SQL DEVELOPER

INGENIEROS ASOCIADOS

INGENIEROS ASOCIADOS

INGENIEROS ASOCIADOS

CAPA LOGICA
PROCEDIMIENTOS Y PRUEBAS
ARTICULOS
INSERTAR
Procedimiento almacenado Insertar Artculo
**********************************************************************************************
create or replace procedure insertararticulo(codart number,codtipo number,nomart
varchar2,vrcompra number, vrventa number)
is
begin
insert into articulo values(codart, codtipo, nomart, vrcompra, vrventa);
end;
**********************************************************************************************

Procedimiento almacenado Verificar Artculo


**********************************************************************************************
create or replace procedure verificararticulo(arti in number, a out boolean )
is
v_articulo articulo%rowtype;

INGENIEROS ASOCIADOS

begin
select * into v_articulo from articulo
where codart =arti;
a:= true;
exception
when No_data_found then
a:=false;
end verificararticulo;
**********************************************************************************************

Procedimiento almacenado Validar Insercin Artculo


**********************************************************************************************
create or replace procedure validarinsercionarticulo(co number, ti number,nomb
varchar2, vc number, vv number)
is
res boolean;
yaexiste exception;
begin
verificararticulo(co,res);

INGENIEROS ASOCIADOS

if res = true then


raise yaexiste;
else insertararticulo(co , ti ,nomb , vc , vv);
dbms_output. put_line(' artculo adicionado ');
end if;
exception
WHEN yaexiste THEN
dbms_output. put_line(' artculo ya existe ');
end;
**********************************************************************************************

Bloque Annimo Ejecuta Validar Insercin Artculo


**********************************************************************************************
Set serveroutpunt on;
set verify off;
Declare
v_co number(5) := &Cdigo_artculo;
v_ti number(4) := &Cdigo_tipo;
v_nomb varchar2(50) :='&Nombre_artculo';
v_vc number(10,2) :=&Valor_compra;

INGENIEROS ASOCIADOS

v_vv number(10,2) :=&Valor_venta;


begin
validarinsercionarticulo(v_co , v_ti ,v_nomb , v_vc , v_vv);
end;
**********************************************************************************************

INGENIEROS ASOCIADOS

ACTUALIZAR
Procedimiento Almacenado Actualizar Registro Artculo
**********************************************************************************************
create
or
replace
procedure
actualizaregistroarticulo(reg_articulo
articulo%rowtype)
is
begin
update articulo set codtipo =reg_articulo.codtipo ,nomart =reg_articulo.nomart
,vrcompra =reg_articulo.vrcompra ,vrventa = reg_articulo.vrventa
where codart = reg_articulo.codart;
end;
**********************************************************************************************

INGENIEROS ASOCIADOS

Procedimiento Almacenado Validar Actualizacin Artculo


**********************************************************************************************
create
or
replace
procedure
validaractualizacionarticulo(reg_articulo
articulo%rowtype)
is
res boolean;
noexiste exception;

begin
validaarticulo(reg_articulo.codart,res);
if res = true then
actualizaregistroarticulo(reg_articulo);
else raise noexiste;
end if;

INGENIEROS ASOCIADOS

exception
WHEN noexiste THEN
dbms_output. put_line(' artculo no existe ');
end;
**********************************************************************************************

Bloque Annimo Validar Actualizacin Artculo


**********************************************************************************************
/* bloque que recibe los valores a modificar del articulo. Y luego llama al
procedimiento almacenado validaractualizacionarticulo */
Declare
reg_articulo articulo%rowtype;

begin
reg_articulo.codart :=&Cdigo_artculo;
reg_articulo.codtipo := &Cdigo_tipo;

INGENIEROS ASOCIADOS

reg_articulo.nomart :='&Nombre_artculo';
reg_articulo.vrcompra :=&Valor_compra;
reg_articulo.vrventa :=&Valor_venta;
validaractualizacionarticulo(reg_articulo);
end;
**********************************************************************************************
ELIMINAR
Eliminar Registro Artculo
**********************************************************************************************
create or replace procedure eliminarregistroarticulo(arti number)
is
begin
delete from articulo where codart = arti;
end;
**********************************************************************************************

INGENIEROS ASOCIADOS

Validar Eliminar Artculo


**********************************************************************************************
create or replace procedure validareliminararticulo(codart number)
is
res boolean;
noexiste exception;
begin
verificararticulo(codart,res);
if res = true then
eliminarregistroarticulo(codart);
else

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

INGENIEROS ASOCIADOS

Bloque Annimo Eliminar Artculo


**********************************************************************************************
set verify off;
set serveroutput on;
declare
codart number (5) := &Codigo_Articulo;
begin
validareliminararticulo (codart);
end;
**********************************************************************************************

INGENIEROS ASOCIADOS

INGENIEROS ASOCIADOS

INGENIEROS ASOCIADOS

CONSULTA A UN REGISTRO
Consultar Registro Artculo
**********************************************************************************************
create or replace procedure consultaregistroarticulo(arti in number, regart out
articulo%rowtype)
is
begin
select * into regart
from articulo
where codart = arti;
end;
**********************************************************************************************

INGENIEROS ASOCIADOS

Procedimiento Almacenado Despliega Artculo


**********************************************************************************************
create or replace procedure despliegaarticulo(v_regart articulo%rowtype)
as
begin
dbms_output. put_line(v_regart.codart ||' ' ||v_regart.codtipo ||' '||v_regart.nomart);
dbms_output. put_line(v_regart.vrcompra ||' ' ||v_regart.vrventa);
end;
**********************************************************************************************

INGENIEROS ASOCIADOS

Procedimiento Almacenado Validar Consultar Artculo


**********************************************************************************************
create or replace procedure validarconsultararticulo12(arti number)
is
res boolean;
noexiste exception;
v_regart articulo%rowtype;
begin
verificararticulo(arti,res);
if res = true then

INGENIEROS ASOCIADOS

consultaregistroarticulo(arti,v_regart);
despliegaarticulo(v_regart);
else raise noexiste;
end if;
exception
WHEN noexiste THEN
dbms_output. put_line(' artculo no existe ');
end;
**********************************************************************************************

INGENIEROS ASOCIADOS

Bloque Annimo Ejecutar Validar Consulta Artculo


**********************************************************************************************
/* bloque anonimo que llama a un procedimiento validarconsultararticulo que valida
la solicitud */
set verify off;
set serveroutput on;
declare
v_ar number := &codigo_articulo;

begin
validarconsultararticulo12(v_ar);
end;
**********************************************************************************************

INGENIEROS ASOCIADOS

Consulta a Todos los Registros


Procedimiento Almacenado Listar Artculos
**********************************************************************************************
create or replace procedure listararticulos3 is
begin
for v_regart in (select * from articulo order by codart ) LOOP
dbms_output.
put_line(rpad(
to_char(v_regart.codart),5)
||'
to_char(v_regart.codtipo),4)
||'
'||rpad(v_regart.nomart,50)
||'
to_char(v_regart.vrcompra),10) ||lpad( to_char(v_regart.vrventa),10));

'
'||

dbms_output.put_line('**********************************************************');

||lpad(
lpad(

INGENIEROS ASOCIADOS

end LOOP;
end;
**********************************************************************************************

Bloque Annimo Ejecuta Listar Artculos


**********************************************************************************************
set verify off;
set serveroutput on;
declare

INGENIEROS ASOCIADOS

begin
listararticulos3;
end;
**********************************************************************************************

CLIENTES
INSERTAR
Procedimiento Almacenado Insertar Cliente
**********************************************************************************************
create
or
replace
procedure
insertarcliente(idclient
number,nomclient
varchar2,dirclient varchar2,emailclient varchar2, acumpuntos number)
is
begin
insert into cliente values(idclient, nomclient, dirclient, emailclient, acumpuntos);

INGENIEROS ASOCIADOS

end;
**********************************************************************************************

INGENIEROS ASOCIADOS

Procedimiento Almacenado Verificar Cliente


**********************************************************************************************
create or replace procedure verificarcliente(client in number, a out boolean )
is
v_cliente cliente%rowtype;
begin
select * into v_cliente
from cliente
where idclient =client;
a:= true;
exception
when No_data_found then
a:=false;
end verificarcliente;
**********************************************************************************************

INGENIEROS ASOCIADOS

Procedimiento Almacenado Validar Insercin Cliente


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

INGENIEROS ASOCIADOS

Bloque Annimo Ejecuta Validar Insercin Cliente


**********************************************************************************************
/* bloque que recibe los valores a insertar del cliente. Y luego llama al
procedimiento almacenado validarinsercioncliente */
Set serveroutpunt on;
set verify off;
Declare
v_id number(15,0) := &Cdigo_cliente;
v_nom varchar2(50) := '&Nombre_cliente';
v_dir varchar2(50) :='&Direccin_cliente';
v_email varchar2(30) :='&Email_cliente';
v_acum number(5,0) :=&Acumulado_puntos;
begin
validarinsercioncliente(v_id , v_nom ,v_dir , v_email , v_acum);
end;
**********************************************************************************************

INGENIEROS ASOCIADOS

INGENIEROS ASOCIADOS

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.nomclient ,dirclient =reg_cliente.dirclient
,emailclient =reg_cliente.emailclient ,acumpuntos = reg_cliente.acumpuntos
where idclient = reg_cliente.idclient;
end;
**********************************************************************************************

INGENIEROS ASOCIADOS

Procedimiento Almacenado Validar Actualizacin Cliente


**********************************************************************************************
/* procedimiento que recibe los valores a actualizar del cliente. Primero comprueba
que el cliente exista con el fin de llamar al procedimiento actualizaregistrocliente.
En caso de que no exista el artculo entonces procede a levantar una excepcin
indicando que el cliente no existe */
create
or
replace
cliente%rowtype)
is

procedure

res boolean;
noexiste exception;

begin
validacliente(reg_cliente.idclient,res);

validaractualizacioncliente(

reg_cliente

INGENIEROS ASOCIADOS

if res = true then


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

INGENIEROS ASOCIADOS

Bloque Annimo Validar Actualizacin 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 :='&Direccin_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 Annimo Eliminar Cliente


**********************************************************************************************
set verify off;
set serveroutput on;
declare
idclient number (15) := &Identificacin_Cliente;

INGENIEROS ASOCIADOS

begin
validareliminarcliente (idclient);
end;
**********************************************************************************************

INGENIEROS ASOCIADOS

INGENIEROS ASOCIADOS

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

INGENIEROS ASOCIADOS

Procedimiento Almacenado Despliega Cliente


**********************************************************************************************
create or replace procedure despliegacliente(v_regcliente cliente%rowtype)
as
begin
dbms_output. put_line(v_regcliente.idclient ||' ' ||v_regcliente.nomclient ||'
'||v_regcliente.dirclient);
dbms_output. put_line(v_regcliente.emailclient ||' ' ||v_regcliente.acumpuntos);
end;
**********************************************************************************************

INGENIEROS ASOCIADOS

Procedimiento Almacenado Validar Consultar Cliente


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

INGENIEROS ASOCIADOS

Bloque Annimo Ejecuta Validar Consulta Cliente


**********************************************************************************************
/* bloque anonimo que llama a un procedimiento validarconsultarcliente que valida
la solicitud */
set verify off;
set serveroutput on;
declare
v_co number := &codigo_cliente;
begin
validarconsultarcliente12(v_co);
end;
**********************************************************************************************

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.
put_line(rpad(
to_char(v_regart.idclient),15)
||'
'
||lpad(
to_char(v_regart.nomclient),50) ||' '||rpad(v_regart.dirclient,50) ||' '|| lpad(
to_char(v_regart.emailclient),30) ||lpad( to_char(v_regart.acumpuntos),5));
dbms_output.put_line('**********************************************************');
end LOOP;
end;
**********************************************************************************************

INGENIEROS ASOCIADOS

Bloque Annimo Ejecuta Listar Clientes


**********************************************************************************************
set verify off;
set serveroutput on;
declare
begin
listarclientes3;
end;
**********************************************************************************************

INGENIEROS ASOCIADOS

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

INGENIEROS ASOCIADOS

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

INGENIEROS ASOCIADOS

tipoaccion :='D';
end if;
end;
**********************************************************************************************

INGENIEROS ASOCIADOS

LOG
Datos Para Prueba de Auditoria
**********************************************************************************************
INSERT INTO CLIENTE(idclient, nomclient, dirclient, emailclient, acumpuntos)
VALUES
(1007,
'CARMEN
PEREZ','CADIZ
CS.23
#28-15',
'carmenperez@yahoo.es',7);

UPDATE CLIENTE
SET acumpuntos = 6;
UPDATE CLIENTE
SET dirclient = ' JORDAN CS.100 # 10-25'
WHERE idclient =1007;
**********************************************************************************************

INGENIEROS ASOCIADOS

Vous aimerez peut-être aussi