SlideShare una empresa de Scribd logo
Base de datos II
Administración todo tipo de Base de datos SQL

Producciones Navegando

UniónSoft

Alumno: Persy Quiroz Menor
Curso: Administración de base de datos II
Docente: Joel Pérez Suárez
Universidad Peruana Unión – Tarapoto
PRESENTACIÓN
Las bases de datos son centros de información de grandes y pequeñas
empresas. Por ello es de gran importancia una buena gestión, administración y
seguridad ya que contienen información valiosa para cada entidad. Este documento
presenta información básica que dará mayor conocer al investigador. Ya que contiene
herramientas necesarias para la aplicación en la administración de base de datos.
DEDICATORIA
Ésta recopilación va dedicados a mis padres Edita y Josué por su apoyo
incondicional en mis estudios.
Contenido

1.

Creación de Base de datos en Oracle ........................................................................................5

2.

Consultas SQL ..............................................................................................................................5
En Oracle ............................................................................................................................................5


Número de cursos por alumno perteneciente al 4to ciclo de sistemas ..........................5



Número de cursos que tiene cada alumno en cada ciclo. ................................................6



Ponderado por curso de cada alumno. ..............................................................................6



Mostar los cursos con su equivales. ....................................................................................7


Mostrar los alumnos que se encuentran con notas mayores al promedio por ciclo y
carrera. ............................................................................................................................................7
En PostgreSQL ..................................................................................................................................7



¿Cuál es el paciente q mayor servicio a recibido y q tipos de servicio? .......................8



Cuál es el sector más vendido .............................................................................................9



Cuáles son sus artículos bandera ........................................................................................9


3.

Mostrar diagnóstico, Boucher, glosa y hora de atención. ..............................................7

Muestre su periodo y el tiempo de contrato q tiene cada cliente. ................................10

Triggers ........................................................................................................................................11
En Oracle ..........................................................................................................................................11

Según el criterio de evaluación, sumatoria del peso de las notas no debe pasar el
100%. .............................................................................................................................................11

El siguiente trigger a partir de la nota ingresada nos indica si la nota es aprobatoria
o no en el rango entre 0 y 20, en caso contrario nos dice que la nota no es válida. Este
evento se da en la tabla EVALU_CRITERIO al momento de registrarlo. ...........................12

El siguiente trigger a partir de la fecha de nacimiento de la persona me dice en qué
etapa de su vida se encuentra, ya sea: niño, adolescente, joven, adulto-joven, adulto,
anciano y falleció. ........................................................................................................................13

Al registrar un semestre académico, con la fecha el trigger indicará el semestre en
que nos encontramos si es de enero a junio será (año-I) en caso contrario (año-II)...........14


Tigger que genera llave principal de una tabla a partir del máximo. ..........................14


Crear la tabla de empleados con las siguientes restricciones: Un empleado no puede
supervisar a más de dos empleados. El presupuesto total por departamento no puede
ser superior a 1000. ......................................................................................................................15
En PostgreSQL ................................................................................................................................17

4.

Tigger que genera llave principal de una tabla en PostgreSQL a partir del máximo.
17

Funciones PL/SQL ......................................................................................................................18
Desde dónde llamarlas: .................................................................................................................18

Función que evalúa de acuerdo al parámetro ingresado si accede o no al crédito, si
es „1‟ evaluará en su propia tabla, sino en la tabla cm_tipo_persona. .................................18



Función que saca la descripción de un producto............................................................19



Función que saca el total de entradas de un producto por mes. ..................................19


5.

Función que saca los nombres de un cliente al ingresar su código de identificación.
19

Función que inserta datos a una tabla. .............................................................................20

Procedimientos almacenados ...................................................................................................20


Procedimiento para registrar venta: .................................................................................20



Procedimiento para registrar salida:.................................................................................22



Añadir un nuevo producto a una venta. ..........................................................................23



Procedimiento para anular una salida .............................................................................23



Calcular el total de una venta ............................................................................................24

Cursores............................................................................................................................................24



Eliminar venta......................................................................................................................26



Cargar stock al almacén......................................................................................................27


6.

Crear comprobante..............................................................................................................24

Restaurar stock. ...................................................................................................................27

Vistas materializadas .................................................................................................................28


Vista materializada de los datos de la persona ...............................................................28



Vista materializada de los datos de la persona, que se actualiza cada 7 días .............28

7.

Secuencias ....................................................................................................................................28

8.

Jobs ................................................................................................................................................29



9.
10.

Job que ejecuta un procedimiento cada 1 hora (60 minutos). .......................................29
Job que refresca una vista materializada cada 7 días .....................................................30

DB Links ......................................................................................................................................30
Ejecutar función en java ........................................................................................................30
1. Creación de Base de datos en Oracle
CREATEUSER"NOMBRE_BD"IDENTIFIEDBY"CONTRASENA_BD"
DEFAULTTABLESPACE USERS
TEMPORARYTABLESPACE TEMP
PROFILEDEFAULT;
GRANTCREATEVIEWTO NOMBRE_BD WITHADMINOPTION;
GRANTUNLIMITEDTABLESPACETO NOMBRE_BD;
GRANT"CONNECT"TO"NOMBRE_BD";
GRANT"DBA"TO"NOMBRE_BD";
GRANT"RESOURCE"TO"NOMBRE_BD";
ALTERUSER"NOMBRE_BD"DEFAULTROLE"CONNECT","DBA","RESOURCE";

2. Consultas SQL
En Oracle
 Número de cursos por alumno perteneciente al 4to ciclo de sistemas
select per.PRIMER_NOMBRE||' '||per.PRIMER_APELLIDO||'
'||per.SEGUNDO_APELLIDO nombre_alumno,
plac.ID_CICLO,
count(maac.MATRICULA_CARGA_CURSO_ID) nro_cursos
from
persona per,
alumno al,
matricula ma,
matricula_alumno_curso maac,
carga_curso cc,
plan_acad_curso plac,
plan_acad pla,
esc_acad es
where
per.PERSONA_ID=al.ALUMNO_ID and
al.ALUMNO_ID=ma.ALUMNO_ID and
ma.MATRICULA_ID=maac.MATRICULA_ID and
cc.CARGA_CURSO_ID=maac.CARGA_CURSO_ID and
plac.PLAN_ACAD_CURSO_ID=cc.PLAN_ACAD_CURSO_ID and
plac.PLAN_ACAD_ID=pla.PLAN_ACAD_ID and
es.ESC_ACAD_ID=pla.ESC_ACAD_ID and
plac.ID_CICLO='4'and
es.ESC_ACAD_ID='0001'
groupby per.PRIMER_NOMBRE,per.PRIMER_APELLIDO,per.SEGUNDO_APELLIDO,
plac.ID_CICLO


Número de cursos que tiene cada alumno en cada ciclo.
select per.PRIMER_NOMBRE||' '||per.PRIMER_APELLIDO||'
'||per.SEGUNDO_APELLIDO nombre_alumno,
alu.COD_UNIVERSITARIO,
count(malc.MATRICULA_ID) total_cursos
frompersona per,
alumno alu,
matricula mat,
matricula_alumno_curso malc
where per.PERSONA_ID=alu.ALUMNO_ID and
alu.ALUMNO_ID=mat.ALUMNO_ID and
mat.MATRICULA_ID=malc.MATRICULA_ID and
mat.semestre='2013-II'
groupby per.PRIMER_NOMBRE,per.PRIMER_APELLIDO,per.SEGUNDO_APELLIDO,
alu.COD_UNIVERSITARIO;



Ponderado por curso de cada alumno.
select per.PRIMER_NOMBRE||' '||per.PRIMER_APELLIDO||'
'||per.SEGUNDO_APELLIDO nombre_alumno,
cu.NOMBRE nombre_curso,
sum((eva.NOTA_CRITERIO*cri.Peso)/100) ponderado
frompersona per,
alumno al,
matricula ma,
matricula_alumno_curso maal,
carga_curso car,
plan_acad_curso plac,
curso cu,
criterio_eval cri,
evalu_criterio eva
where per.PERSONA_ID=al.ALUMNO_ID and
al.ALUMNO_ID=ma.ALUMNO_ID and
ma.MATRICULA_ID=maal.MATRICULA_ID and
maal.CARGA_CURSO_ID=car.CARGA_CURSO_ID and
car.PLAN_ACAD_CURSO_ID=plac.PLAN_ACAD_CURSO_ID and
plac.CURSO_ID=cu.CURSO_ID and
car.CARGA_CURSO_ID=cri.CARGA_CURSO_ID and
cri.CRITERIO_EVAL_ID=eva.CRITERIO_EVAL_ID and
maal.MATRICULA_CARGA_CURSO_ID=eva.MATRICULA_CARGA_CURSO_ID
and
ma.SEMESTRE='2013-II'
groupby per.PRIMER_NOMBRE,per.PRIMER_APELLIDO,
per.SEGUNDO_APELLIDO, cu.NOMBRE;


Mostar los cursos con su equivales.
select cu.NOMBRE curso,
cu2.NOMBRE equivalente
fromcurso cu,
curso cu2,
equivalencia eq
where cu.CURSO_ID=eq.CURSO_ID and
cu2.CURSO_ID =eq.EQUIV_CURSO_ID;



Mostrar los alumnos que se encuentran con notas mayores al promedio por
ciclo y carrera.
selectdistinct(per.PRIMER_NOMBRE||' '||per.PRIMER_APELLIDO)
nombre_alumno,
es.NOMBRE escuela,
plac.ID_CICLO ciclo_acad
frompersona per,
alumno al,
plan_acad pla,
esc_acad es,
matricula ma,
matricula_alumno_curso maal,
carga_curso car,
plan_acad_curso plac,
EVALUACION_TOTAL ev
where
per.PERSONA_ID=al.ALUMNO_ID and
al.PLAN_ACAD_ID=pla.PLAN_ACAD_ID and
pla.ESC_ACAD_ID=es.ESC_ACAD_ID and
al.ALUMNO_ID=ma.ALUMNO_ID and
ma.MATRICULA_ID=maal.MATRICULA_ID and
maal.CARGA_CURSO_ID=car.CARGA_CURSO_ID and
car.PLAN_ACAD_CURSO_ID=plac.PLAN_ACAD_CURSO_ID and
ma.SEMESTRE='2013-II'and
ma.MATRICULA_ID=ev.MATRICULA_ID and
ev.PROMEDIO_PONDERADO_CICLO>=
(select
avg(promedio_ponderado_ciclo)fromevaluacion_total eva,matricula ma
where ma.MATRICULA_ID=ev.MATRICULA_ID and
ma.SEMESTRE='2013-II')
groupby per.PRIMER_NOMBRE,per.PRIMER_APELLIDO,es.NOMBRE,
plac.ID_CICLO
orderby nombre_alumno;

En PostgreSQL


Mostrar diagnóstico, Boucher, glosa y hora de atención.
SELECT
diagnostico.nombre,
venta.voucher,
venta.glosa,
venta.horaatencion
FROM
cendiko.venta,
cendiko.diagnostico,
cendiko.ventadiag
WHERE
venta.ventaid = ventadiag.ventaid AND
diagnostico.diagnosticoid = ventadiag.diagnosticoid;



¿Cuál es el paciente q mayor servicio a recibido y q tipos de servicio?
SELECT
cliente.nombres||' '||cliente.apellidos nombre_cliente,
servicio.nombre nombre_servicio
FROM
cendiko.cliente,
cendiko.ventaserv,
cendiko.venta,
cendiko.servicio
WHERE
cliente.clienteid = venta.clienteid AND
venta.ventaid = ventaserv.ventaid AND
servicio.servicioid = ventaserv.servicioid AND
cliente.clienteid in(select lista.clienteid from(SELECT
cliente.clienteid,
cliente.nombres||' '||cliente.apellidos nombre_cliente,
count(ventaserv.ventaservid) nro_servicios
FROM
cendiko.cliente,
cendiko.venta,
cendiko.ventaserv
WHERE
cliente.clienteid = venta.clienteid AND
venta.ventaid = ventaserv.ventaid
groupby cliente.clienteid, cliente.nombres,cliente.apellidos
HAVING count(ventaserv.ventaservid)=(select
max(lista2.nro_servicios)from(SELECT
cliente.clienteid,
cliente.nombres||' '||cliente.apellidos nombre_cliente,
count(ventaserv.ventaservid) nro_servicios
FROM
cendiko.cliente,
cendiko.venta,
cendiko.ventaserv
WHERE
cliente.clienteid = venta.clienteid AND
venta.ventaid = ventaserv.ventaid
groupby cliente.clienteid, cliente.nombres,cliente.apellidos)
lista2)) lista)
orderby cliente.apellidos;


Cuál es el sector más vendido
SELECT
sector.nombre nombre_sector,
sum(kardexfarm.cantidad) cantidad_productos_sector
FROM
cendiko.sector,
cendiko.articulo,
cendiko.kardexfarm
WHERE
sector.sectorid = articulo.sectorid AND
articulo.articuloid = kardexfarm.articuloid
groupby sector.nombre
HAVING sum(kardexfarm.cantidad)=
(select max(lista.cantidad_productos_sector)from(SELECT
sector.nombre nombre_sector,
sum(kardexfarm.cantidad) cantidad_productos_sector
FROM
cendiko.sector,
cendiko.articulo,
cendiko.kardexfarm
WHERE
sector.sectorid = articulo.sectorid AND
articulo.articuloid = kardexfarm.articuloid
groupby sector.nombre) lista)



Cuáles son sus artículos bandera
SELECT
articulo.codigo,
articulo.nombre,
sum(kardexfarm.cantidad) cantidad_vendida
FROM
cendiko.articulo,
cendiko.kardexfarm
WHERE
articulo.articuloid = kardexfarm.articuloid
groupby articulo.codigo,articulo.nombre
HAVING sum(kardexfarm.cantidad)>=
(select avg(lista.cantidad_vendida)from(SELECT
articulo.codigo,
articulo.nombre,
sum(kardexfarm.cantidad) cantidad_vendida
FROM
cendiko.articulo,
cendiko.kardexfarm
WHERE
articulo.articuloid = kardexfarm.articuloid
groupby articulo.codigo,articulo.nombre) lista)
orderby cantidad_vendida desc;


Muestre su periodo y el tiempo de contrato q tiene cada cliente.
SELECT
cliente.nombres||' '||cliente.apellidos nombres,
periodo.nombre periodo,
to_char(contrato.fecha,'dd/mm/yyyy') fecha,
to_char(contrato.vigencia,'dd/mm/yyyy') vigencia,
to_date(to_char(contrato.vigencia,'dd/mm/yyyy'),'dd/mm/yyyy')to_date(to_char(contrato.fecha,'dd/mm/yyyy'),'dd/mm/yyyy')as
total_dias
FROM
cendiko.periodo,
cendiko.cliente,
cendiko.contrato
WHERE
periodo.periodoid = contrato.periodoid AND
cliente.clienteid = contrato.clienteid
orderby cliente.nombres, cliente.apellidos;
3. Triggers
Un trigger o disparador es un objeto procedimental asociado a una tabla. Se
almacena en la base de datos y Oracle lo ejecuta implícitamente (se dispara) cuando
se modifican los datos de la tabla (comandos DML de SQL).
Los Triggers tienen múltiples aplicaciones por ej.
Forzar reglas de integridad de los datos complejas y que no se
pueden definir declarando.
Restricciones de Integridad.
Realizar cambios en la base de datos de forma transparente al
usuario.
Generar automáticamente valores de columnas derivadas en base a
un valor proporcionado por unasentencia INSERT o UPDATE.
Sincronizar el mantenimiento de tablas duplicadas que están
localizadas en nodos distintos de unabase de datos distribuida.
Generar restricciones de acuerdo a los requerimientos.
Los Triggers frente a las restricciones de integridad, no se aplican a los datos
almacenados en la base dedatos antes de su definición; sólo se aplican cuando, una
vez creados, se ejecutan comandos que manipulanlas tablas sobre las que están
definidos.
Ejemplos de Triggers
En Oracle
 Según el criterio de evaluación, sumatoria del peso de las notas no debe pasar
el 100%.
CREATEORREPLACETRIGGER t_criterio beforeinsertoncriterio_eval
foreachrow
declare
item_id varchar2(10);
ptotal_peso numeric(12,2);
begin
select lpad(
to_number(coalesce(max(criterio_eval_id),'0'),'9999')+1,4,'0')into
item_id fromcriterio_eval;
select NVL(sum(peso),0)into ptotal_peso fromcriterio_evalwhere
CARGA_CURSO_ID=:new.CARGA_CURSO_ID;
if ptotal_peso+:new.peso<=100then
:new.criterio_eval_id:=item_id;
endif;
if ptotal_peso+:new.peso>100then
Raise_application_error(-20201,'EXCEDE EL PESO NORMAL DE 100%');
endif;
end t_criterio;



El siguiente trigger a partir de la nota ingresada nos indica si la nota es
aprobatoria o no en el rango entre 0 y 20, en caso contrario nos dice que la
nota no es válida. Este evento se da en la tabla EVALU_CRITERIOal momento de
registrarlo.

CREATEORREPLACETRIGGERmatricula.EVALU_CRITERIObeforeinsertonEVALU_CRITER
IO REFERENCINGNEWASNEWOLDASOLD
FOREACHROW
declare
nota numeric(12,2); idd varchar2(10);
BEGIN
nota:=:new.NOTA_CRITERIO;
select lpad(
to_number(coalesce(max(EVALU_CRITERIO_ID),'0'),'9999999')+1,7,'0')into
idd frommatricula.EVALU_CRITERIO;
if nota>20then
Raise_application_error(-20201,'Nota no válida');
endif;
if nota<0then
Raise_application_error(-20201,'Nota no válida');
endif;
if nota>12then
dbms_output.put_line('nota aprobatoria');
:new.EVALU_CRITERIO_ID:=idd;
:new.CONDICION:='Nota aprobatoria';
endif;
if nota<13then
dbms_output.put_line('nota desaprobatoria');
:new.EVALU_CRITERIO_ID:=idd;
:new.CONDICION:='Nota desaprobatoria';
endif;
endEVALU_CRITERIO;


El siguiente trigger a partir de la fecha de nacimiento de la persona me dice en
qué etapa de su vida se encuentra, ya sea: niño, adolescente, joven, adultojoven, adulto, anciano y falleció.
CREATEORREPLACETRIGGER"MATRICULA".personaid beforeinsertonpersona
FOREACHROW
declare
x varchar2(10);
y varchar2(10);
z varchar2(10);
edad integer;
resultado varchar2(40);
BEGIN
SELECT TO_CHAR(SYSDATE,'YYYY')-TO_CHAR(:new.FECHA_NAC,'YYYY')into
edad FROM dual;
if edad>0and edad<=12then
resultado:='Niño';
endif;
if edad>12and edad<=16then
resultado:='Adolescente';
endif;
if edad>16and edad<=28then
resultado:='Joven';
endif;
if edad>28and edad<=40then
resultado:='Adulto - Joven';
endif;
if edad>40and edad<=60then
resultado:='Adulto';
endif;
if edad>60and edad<=80then
resultado:='Anciano';
endif;
if edad>80then
resultado:='Ya falleció';
endif;
x:=:new.PRIMER_NOMBRE;
y:=:new.PRIMER_APELLIDO;
z:=:new.SEGUNDO_APELLIDO;
:NEW.persona_id:=substr(x,0,2)||substr(y,0,2)||substr(z,0,2);
:new.condicion_edad:=edad||' - '||resultado;
endpersona;


Al registrar un semestre académico, con la fecha el trigger indicará el semestre
en que nos encontramos si es de enero a junio será (año-I) en caso contrario
(año-II).
CREATEORREPLACETRIGGER"MATRICULA".semestre_acad
beforeinsertonmatricula
foreachrow
declare
x varchar2(10);
y varchar2(10);
begin
select to_char(sysdate,'mm')into x from dual;
select to_char(sysdate,'yyyy')into y from dual;
if x<07then
:new.semestre:=y||'-I';
else
:new.semestre:=y||'-II';
endif;
end;



Tigger que genera llave principal de una tabla a partir del máximo.
CREATEORREPLACETRIGGER"UPEU_BAZAR".bc_productoBEFOREINSERTONbc_product
o
REFERENCINGNEWASNEWOLDASOLD
FOREACHROW
BEGIN
select lpad( to_number
(coalesce(max(id_producto),'0'),'9999999999')+1,10,'0')into
:new.id_producto frombc_producto;
ENDbc_producto;


Crear la tabla de empleados con las siguientes restricciones: Un empleado no
puede supervisar a más de dos empleados. El presupuesto total por
departamento no puede ser superior a 1000.
CREATETABLE"EMPLEADOS"
("IDEMPLEADO"NUMBER,
"EMPLEADO"VARCHAR2(4000),
"IDJEFE"NUMBER,
"SALARIO"NUMBER(9,2),
"DPTO"VARCHAR2(20),
CONSTRAINT"EMPLEADOS_PK"PRIMARYKEY("IDEMPLEADO")ENABLE,
CONSTRAINT"EMPLEADOS_CON"FOREIGNKEY("IDJEFE")
REFERENCES"EMPLEADOS"("IDEMPLEADO")ONDELETECASCADEENABLE)
/
CREATEORREPLACEPACKAGE"RI_EMP"as
NewEmp Empleados%rowtype;
end;
/
CREATEORREPLACETRIGGER"EMPLEADOS_JEFES_AFTER"
AFTERdeleteorinsertorupdateon"EMPLEADOS"
DECLARE V_Supervisados INTEGER; VMsg VARCHAR(50);
begin
SELECT count(*)INTO V_Supervisados FROMempleados
WHERE IdJefe = RI_Emp.Newemp.IdJefe;
IFINSERTINGTHEN
VMsg:=CONCAT('Insertando :',RI_Emp.Newemp.IdEmpleado);
ELSE
IFUPDATINGTHEN
VMsg:=CONCAT('Modificando :',RI_Emp.Newemp.IdEmpleado);
ELSE
VMsg:=CONCAT('Borrando :',RI_Emp.Newemp.IdEmpleado);
DBMS_OUTPUT.PUT_LINE(Vmsg);
ENDIF;
ENDIF;
IF V_Supervisados>2THEN
RAISE_APPLICATION_ERROR(-20001,VMsg||' Error cuenta supervisados
de: '
||RI_Emp.Newemp.IdJefe);
ENDIF;
end;
/
ALTERTRIGGER"EMPLEADOS_JEFES_AFTER"ENABLE
/
CREATEORREPLACETRIGGER"Empleados_Before"
BEFOREdeleteorinsertorupdateon"EMPLEADOS"
foreachrow
begin
RI_Emp.Newemp.IdEmpleado :=:new.IdEmpleado;
RI_Emp.Newemp.IdJefe :=:new.IdJefe;
RI_Emp.Newemp.Dpto :=:new.Dpto;
RI_Emp.Newemp.Salario :=:new.Salario;
end;
/
ALTERTRIGGER"Empleados_Before"ENABLE
/
CREATEORREPLACETRIGGER"PRESUPUESTO_DPTOS"
AFTERinsertorupdateon"EMPLEADOS"
DECLARE Vpresupuesto Empleados.salario%type;
Vmsg VARCHAR(50)DEFAULT'Presupuesto excedido para Dpto: ';
begin
SELECT SUM(salario)INTO VPresupuesto FROMEmpleados
WHERE Dpto=RI_Emp.Newemp.Dpto;
Vmsg:= CONCAT(Vmsg,RI_Emp.Newemp.Dpto);
IF Vpresupuesto >1000THEN
RAISE_APPLICATION_ERROR(-20001,Vmsg);
ENDIF;
end;
/
ALTERTRIGGER"PRESUPUESTO_DPTOS"ENABLE
En PostgreSQL
 Tigger que genera llave principal de una tabla en PostgreSQL a partir del
máximo.
CREATEORREPLACEFUNCTION comun.persona() RETURNS TRIGGERAS'
BEGIN
NEW.id_persona :=(select
ltrim(lpad(to_char(coalesce(max(to_number(id_persona,''99999999'')),'
'0'')+1,''00000000''),9,''0''))
from comun.persona);
new.fecha_reg:= to_char(now(),''dd/mm/yyyy HH:MI:SS pm'');
new.estado:=''1'';
IFNEW.id_persona ISNULL THEN
RAISEEXCEPTION''comun cannot be NULLvalue'';
ENDIF;
RETURNNEW;
END;'
LANGUAGE'plpgsql';
ALTERFUNCTION comun.persona() OWNER TO postgres;
CREATETRIGGER tg_persona BEFOREINSERTON comun.persona
FOREACHROWEXECUTEPROCEDURE comun.persona();
CREATEORREPLACEFUNCTION seguridad.modulo() RETURNS TRIGGERAS'BEGIN
NEW.id_modulo :=(select
ltrim(lpad(to_char(coalesce(max(to_number(id_modulo,''99'')),''0'')+1,
''00''),3,''0''))from seguridad.modulo);
new.fecha_reg:= now();
new.hora_reg:= to_char(now(),''HH:MI:SS pm'');
IFNEW.id_modulo ISNULL THEN
RAISEEXCEPTION''seguridad cannot be NULLvalue'';
ENDIF;
RETURNNEW;
END;'
LANGUAGE'plpgsql';
ALTERFUNCTION seguridad.modulo() OWNER TO postgres;
CREATETRIGGER tg_modulo BEFOREINSERTON seguridad.modulo
FOREACHROWEXECUTEPROCEDURE seguridad.modulo();
CREATEORREPLACEFUNCTION seguridad.opcion() RETURNS TRIGGERAS'
BEGIN
NEW.id_opcion :=(select
ltrim(lpad(to_char(coalesce(max(to_number(id_opcion,''999'')),''0'')+1
,''000''),4,''0''))from seguridad.opcion);
new.fecha_reg:= now();
new.hora_reg:= to_char(now(),''HH:MI:SS pm'');
IFNEW.id_opcion ISNULL THEN
RAISEEXCEPTION''seguridad cannot be NULLvalue'';
ENDIF;RETURNNEW;END;'
LANGUAGE'plpgsql';
ALTERFUNCTION seguridad.opcion() OWNER TO postgres;
CREATETRIGGER tg_opcion BEFOREINSERTON seguridad.opcion
FOREACHROWEXECUTEPROCEDURE seguridad.opcion();

4. Funciones PL/SQL
 Una función es un bloque nombrado PL/SQL que devuelve un valor.
 Una función puede estar almacenada en la B.D., como objeto de la B.D., para
repetidas ejecuciones.
 Una función puede ser llamada como parte de una expresión.
 Se usa también en cualquier consulta para sacar datos de otras tablas sin usar
sus relaciones, sólo filtrando el dato requerido.
 Para ejecutar funciones de consulta solamente se usa como tabla en Oracle a
Dual (select nombres(id_persona) from dual).
Desde dónde llamarlas:


Como columna de un SELECT.



Condiciones en cláusulas WHERE y HAVING.



Cláusulas ORDER BY y GROUP BY.



Cláusula VALUES de un comando INSERT.



Cláusula SET de un comando UPDATE.



Función que evalúa de acuerdo al parámetro ingresado si accede o no al crédito, si es
„1‟ evaluará en su propia tabla, sino en la tabla cm_tipo_persona.
CREATEORREPLACEFUNCTION acceso_credito(pid_persona
invarchar2)RETURNvarcharIS
pcred_tb varchar2(1);
pcred varchar2(2);
ptipo_persona varchar2(22);
BEGIN
select cred_tb into pcred_tb fromcm_personawhereid_persona=pid_persona;
if pcred_tb='1'then
SELECT cred into pcred fromcm_personawhere id_persona=pid_persona;
endif;
if pcred_tb='2'then
select id_tipo_persona into ptipo_persona fromcm_personawhere
id_persona=pid_persona;
select cred into pcred fromcm_tipo_personawhere
id_tipo_persona=ptipo_persona;
endif;
RETURN(pcred);
END;
Nota: ésta función está implementada en la Base de datos de Bazar del Sistema del cafetín
de la UPeU Tarapoto

Función que saca los nombres de un cliente al ingresar su código de identificación.
CREATEORREPLACEFUNCTION nombre_cliente(pid_cliente
INVARCHAR2)RETURNVARCHAR2IS
pnombre_cliente VARCHAR2(200);
BEGIN
SELECT Initcap(nombres)||' '||Initcap(apepat)||'
'||Initcap(apemat)||' '||Initcap(razon_social)into pnombre_cliente
FROMcm_personaWHERE id_persona = pid_cliente;
RETURN(pnombre_cliente);
END;



Función que saca la descripción de un producto.
CREATEORREPLACEFUNCTIONnombre_producto_venta(pid_producto
INVARCHAR2)RETURNVARCHAR2IS
pnombre_producto_venta VARCHAR2(200);
BEGIN
select pro.NOMBRE_producto||' '||pro.CONC||'
'||uni.NOMBRE_UNIDAD_MEDIDA into pnombre_producto_venta
frombc_producto pro,bc_unidad_medida uni
where pro.ID_UNIDAD_MEDIDA=uni.ID_UNIDAD_MEDIDA and
id_producto=pid_producto;
RETURN(pnombre_producto_venta);
END;



Función que saca el total de entradas de un producto por mes.
CREATEORREPLACEFUNCTIONsuma_ent_prod_tot_mes(pid_local invarchar2,
pid_producto invarchar2,pid_mes invarchar2)RETURNnumberIS
suma_TOT_entradas number(12,2);
BEGIN
select
decode(sum(det.CANTIDAD_XMAY*det.COSTO),'',0,sum(det.CANTIDAD_XMAY*de
t.COSTO))into suma_TOT_entradas
frombc_entrada en,bc_entrada_detalle det
where en.id_entrada=det.id_entrada and en.id_local=pid_local
and det.id_producto=pid_producto and
to_char(en.fecha_reg,'mm/yyyy')like'%'||pid_mes||'%';
RETURN(suma_TOT_entradas);
END;


Función que inserta datos a una tabla.
CREATEORREPLACEFUNCTION insertar_matricula(pmatricula_id INVARCHAR2,
pfecha INDATE,
palumno_id INVARCHAR2,
pcod_matricula INVARCHAR2,
psemestre INVARCHAR2
)
RETURNvarchar2
is
BEGIN
insertintomatricula(MATRICULA_ID, FECHA, ALUMNO_ID,
COD_MATRICULA, SEMESTRE)
values(pmatricula_id,to_date(pfecha,'dd/mm/yyyy'),palumno_id,pc
od_matricula,psemestre);
return pmatricula_id;
end insertar_matricula;

5. Procedimientos almacenados
Un procedimiento almacenado es un conjunto de instrucciones a las que se les
da un nombre, se almacena en la base de datos en la cual trabaja el usuario.
Permiten agrupar y organizar tareas repetitivas que ayudan al usuario, en
confiabilidad, seguridad, y sobre todo protección de datos cuando trabajamos
desde el lado del servidor.
Un procedimiento almacenado puede contener cualquier cantidad y tipo de
instrucciones DML (para la manipulación de datos, como insert, update, delete),
no instrucciones DDL (de definición de datos, como create..., drop... alter...).


Procedimiento para registrar venta:

Busca el Boucher vigente a partir de la fecha actual con el código del movimiento.
Además verifica si hay stock suficiente de un producto en un local determinado, además
genera un código para la venta y le asigna un número correlativo al movimiento diario.
CREATEORREPLACEPROCEDUREregistrar_venta
(pidcliente INVARCHAR2, pidproducto INVARCHAR2, pcantidad
INNUMBER, pid_local INVARCHAR2, pidusuario INVARCHAR2, pid_forma_pago
INVARCHAR2, p_precio innumber)
IS pidsalida varchar(25);
pnro varchar2(10);
ptipo_cliente varchar(20);
pid_movimiento varchar(5);
pid_movimiento_voucher varchar(15);
pstock number;
BEGIN
select id_movimiento into pid_movimiento
frombc_movimiento_voucherwhere id_movimiento='S01'and
to_char(fecha,'dd/mm/yyyy')=to_char(sysdate,'dd/mm/yyyy')AND
ESTADO='1';
select id_movimiento_voucher into pid_movimiento_voucher
frombc_movimiento_voucherwhere id_movimiento='S01'and
to_char(fecha,'dd/mm/yyyy')=to_char(sysdate,'dd/mm/yyyy')AND
ESTADO='1';
select lpad( to_number
(coalesce(max(nro),'0'),'9999')+1,4,'0')into pnro frombc_salidawhere
id_movimiento=pid_movimiento and
id_movimiento_voucher=pid_movimiento_voucher;
select stock into pstock frombc_mostradorwhere id_producto
= pidproducto;
select id_tipo_persona into ptipo_cliente
fromcm_personawhere id_persona = pidcliente;
select
to_char(sysdate,'YYYYMMDD')||'SAL'||to_char(sysdate,'HHMISSMMPM')into
pidsalida FROM DUAL;
if pstock >= pcantidad then
insertintobc_salidavalues(pidsalida, pnro, sysdate,
pidcliente,0,0,0,0, pid_local, pidusuario , pid_movimiento,
pid_movimiento_voucher,ptipo_cliente,pid_forma_pago,'',NULL,NULL,'0');
commit;
insertintobc_salida_detallevalues(pidsalida,
pid_local, pidproducto, pcantidad, p_precio,0);
commit;
updatebc_mostradorset stock = pstock-pcantidad where
id_producto = pidproducto;
commit;
updatebc_salidaset sub_total = p_precio*pcantidad
where id_salida = pidsalida;
commit;
beginsalida_total(pidsalida);end;
commit;
endif;
if pstock < pcantidad then
RAISE_APPLICATION_ERROR(-20010,'No hay sufiecinte sotck.
Stock actual:'||pstock||', stock requerido:'||pcantidad);
endif;
ENDregistrar_venta;


Procedimiento para registrar salida:

Este procedimiento hace el trabajo anterior y es más, saca el costo y precio del
producto. También valida el precio de venta de un producto a partir la
configuración del tipo de cliente.
CREATEORREPLACEPROCEDUREregistrar_venta
(pidcliente INVARCHAR2, pidproducto INVARCHAR2, pcantidad
INNUMBER, pid_local INVARCHAR2, pidusuario INVARCHAR2, pid_forma_pago
INVARCHAR2, p_precio innumber)
IS pidsalida varchar(25);
pnro varchar2(10);
ptipo_cliente varchar(20);
pid_movimiento varchar(5);
pid_movimiento_voucher varchar(15);
pstock number;
BEGIN
select id_movimiento into pid_movimiento frombc_movimiento_voucherwhere
id_movimiento='S01'and
to_char(fecha,'dd/mm/yyyy')=to_char(sysdate,'dd/mm/yyyy')AND ESTADO='1';
select id_movimiento_voucher into pid_movimiento_voucher
frombc_movimiento_voucherwhere id_movimiento='S01'and
to_char(fecha,'dd/mm/yyyy')=to_char(sysdate,'dd/mm/yyyy')AND ESTADO='1';
select lpad( to_number
(coalesce(max(nro),'0'),'9999')+1,4,'0')into pnro frombc_salidawhere
id_movimiento=pid_movimiento and
id_movimiento_voucher=pid_movimiento_voucher;
select stock into pstock frombc_mostradorwhere id_producto =
pidproducto;
select id_tipo_persona into ptipo_cliente
fromcm_personawhere id_persona = pidcliente;
select
to_char(sysdate,'YYYYMMDD')||'SAL'||to_char(sysdate,'HHMISSMMPM')into
pidsalida FROM DUAL;
if pstock >= pcantidad then
insertintobc_salidavalues(pidsalida, pnro, sysdate,
pidcliente,0,0,0,0, pid_local, pidusuario , pid_movimiento,
pid_movimiento_voucher,ptipo_cliente,pid_forma_pago,'',NULL,NULL,'0');
commit;
insertintobc_salida_detallevalues(pidsalida,
pid_local, pidproducto, pcantidad, p_precio,0);commit;
updatebc_mostradorset stock = pstock-pcantidad where
id_producto = pidproducto;
commit;
updatebc_salidaset sub_total = p_precio*pcantidad
where id_salida = pidsalida;
commit;
beginsalida_total(pidsalida);end;commit;
endif;
if pstock < pcantidad then
RAISE_APPLICATION_ERROR(-20010,'No hay sufiecinte sotck.
Stock actual:'||pstock||', stock requerido:'||pcantidad);
endif;
ENDregistrar_venta;



Añadir un nuevo producto a una venta.

CREATEORREPLACEPROCEDUREregistrar_salida_detalle
(pid_salida INVARCHAR2,pid_local INVARCHAR2, pid_producto
INVARCHAR2, pcantidad INNUMBER)
IS
p_precio number;
pstock number;
BEGIN
select stock into pstock frombc_mostradorwhere id_producto =
pid_producto;
select precio into p_precio frombc_productowhere id_producto =
pid_producto;
if pstock >= pcantidad then
insertintobc_salida_detallevalues(pid_salida, pid_local,
pid_producto, pcantidad, p_precio,0);
commit;
updatebc_mostradorset stock = stock-pcantidad where
id_producto = pid_producto;
commit;
beginsalida_total(pid_salida);end;
commit;
endif;
if pstock < pcantidad then
RAISE_APPLICATION_ERROR (-20010, 'No hay sufiecinte sotck. Stock
actual:'||pstock||', stock requerido:'||pcantidad);
rollback;
endif;
ENDregistrar_salida_detalle;


Procedimiento para anular una salida

Este procedimiento verifica el estado de una salida, si el estado es “1” lo anula y
le registra en una nueva tabla. También restaura los stocks de los productos
CREATEORREPLACEPROCEDUREregistrar_anular_salida(pid_salida INVARCHAR2,
pid_usuario
INVARCHAR2,
pmotivo inVARCHAR2)
is contador integer;
ptotal number(12,2);
BEGIN
select count(*)into contador frombc_salidawhere id_salida=pid_salida
and terminada='1';
select total into ptotal frombc_salidawhere id_salida=pid_salida and
terminada='1';
if contador=1then
insertintobc_salida_anularvalues(pid_salida,pid_usuario,pmotivo,sysdat
e, ptotal);commit;
updatebc_salidaset terminada='A'where id_salida=pid_salida;commit;
updatebcja_movimientoset extornado='1'where nro=pid_salida;
commit;
beginrestaurarStockSalida(pid_salida);end;commit;
endif;
ENDregistrar_anular_salida;
 Calcular el total de una venta
CREATEORREPLACEPROCEDUREsalida_total(pid_salida INVARCHAR2)
is
psub_total number;
BEGIN
select
decode(sum(CANTIDAD*PRECIO),'',0,sum(CANTIDAD*PRECIO))into psub_total
frombc_salida_detallewhere id_salida=pid_salida;
if psub_total=0then
updatebc_salidaset sub_total=0, igv=0, total=0where
id_salida=pid_salida;
COMMIT;
endif;
if psub_total>0then
updatebc_salidaset sub_total=psub_total, total=psub_total+igv
where id_salida=pid_salida;
COMMIT;
endif;
ENDsalida_total;

Cursores
Un cursor es un conjunto de registros devuelto por una instrucción
SQL. Técnicamente los cursores son fragmentos de memoria que reservados
para procesar los resultados de una consulta SELECT.


Crear comprobante

CREATEORREPLACEPROCEDUREREGISTRAR_SALIDA_CONTADO(pidsalida INVARCHAR2,
pidusuario INVARCHAR2)
IS pidcronograma varchar2(25);
pidmovimiento varchar2(25);
pid_persona varchar2(20);
ptotal number(12,2);
pid_local varchar2(10);
pid_forma_pago varchar2(10); pid_comprobante_config
varchar2(10);
pnro_comprobante integer; pid_vou_det integer;pnro_mov_sal
integer; pmonto_imprimir number(12,2);
pid_producto VARCHAR2(30);
pcantidad number;
pprecio number;
pdescuento number;
CURSOR cursorlistasalidaproductos ISselect id_producto,
id_local, cantidad,precio,descuento frombc_salida_detallewhere
id_salida=pidsalida;
BEGIN
select total into ptotal fromBC_SALIDAwhere id_salida =
pidsalida and terminada='0';
select monto_imprimir into pmonto_imprimir
fromBC_MOVIMIENTO_VOUCHER
where id_movimiento=(select id_movimiento frombc_salidawhere
id_salida=pidsalida)
and id_movimiento_voucher=(select id_movimiento_voucher
frombc_salidawhere id_salida=pidsalida);
if ptotal>=pmonto_imprimir then
select
to_char(sysdate,'YYYYMMDD')||'MOV'||to_char(sysdate,'HHMISSMMPM')into
pidmovimiento FROM DUAL;
select id_local into pid_local fromBC_SALIDAwhere id_salida
= pidsalida;
select id_cliente into pid_persona fromBC_SALIDAwhere
id_salida = pidsalida;
select id_forma_pago into pid_forma_pago fromBC_SALIDAwhere
id_salida = pidsalida;
select max(id_vou_det)into pid_vou_det
fromBCJA_VOUCHER_DETALLEwhere ID_VOUCHER='VOU01'and
to_char(fecha,'dd/mm/yyyy')=to_char(sysdate,'dd/mm/yyyy');
select decode(max(nro_mov_sal),'',1,max(nro_mov_sal)+1)into
pnro_mov_sal fromBCJA_MOVIMIENTOWHERE
to_char(fecha_mov,'yyyy')=to_char(sysdate,'yyyy');
insertintobcja_movimientovalues(pidmovimiento,'CEfec',
pid_persona,'VENT',pidsalida,ptotal,'Cobro de venta al contado
efectivo','',sysdate,
pidusuario,pid_local,'0',pid_vou_det,pnro_mov_sal);
commit;
-- Proceso para crear el comprobante Ticket
select C.ID_COMPROBANTE_CONFIG into pid_comprobante_config
fromBC_ASIGNAR_CONFIG A,BC_COMPROBANTE_CONFIG C
WHERE A.ID_COMPROBANTE_CONFIG=C.ID_COMPROBANTE_CONFIG AND
A.ID_USUARIO=pidusuario AND A.ESTADO='1'AND C.ESTADO='1';
select max(CONT_MAX)+1into pnro_comprobante
FROMBC_COMPROBANTE_CONFIGWHERE
ID_COMPROBANTE_CONFIG=pid_comprobante_config;
UPDATEBC_SALIDASET
id_comprobante_config=pid_comprobante_config,nro_comprobante=pnro_compr
obante,fecha_comprobante=sysdate,TERMINADA='1'where
id_salida=pidsalida;
updateBC_COMPROBANTE_CONFIGset CONT_MAX=pnro_comprobante
WHERE ID_COMPROBANTE_CONFIG=pid_comprobante_config;
commit;
endif;
if ptotal<pmonto_imprimir then
select id_cliente into pid_persona fromBC_SALIDAwhere
id_salida = pidsalida;
OPEN cursorlistasalidaproductos;FETCH
cursorlistasalidaproductos INTO pid_producto, pid_local,
pcantidad,pprecio,pdescuento;
WHILE cursorlistasalidaproductos%FOUNDLOOP
insertintobc_temporalvalues('',pid_local,pid_producto,pcantidad,p
precio,pdescuento, sysdate,pid_persona,pidusuario);
COMMIT;
FETCH cursorlistasalidaproductos INTO
pid_producto, pid_local, pcantidad,pprecio,pdescuento;
ENDLOOP;
CLOSE cursorlistasalidaproductos;
COMMIT;
deletefrombc_salida_detallewhere id_salida=pidsalida;
commit;
deletefrombc_salidawhere id_salida=pidsalida;
commit;
endif;
ENDREGISTRAR_SALIDA_CONTADO;


Eliminar venta.

Éste procedimiento tiene un cursos que busca los detalles de la venta,
seguidamente en un bucle recupera los stock y elimina la venta por si id.
CREATEORREPLACEPROCEDURE anularSalida(pid_salida INVARCHAR2)
IS pid_producto VARCHAR2(30);
pid_local VARCHAR2(30);
pcantidad number;
CURSOR cursorlistasalidaproductos ISselect id_producto,
id_local, cantidad frombc_salida_detallewhere id_salida=pid_salida;
BEGIN
OPEN cursorlistasalidaproductos;
FETCH cursorlistasalidaproductos INTO pid_producto, pid_local,
pcantidad;
WHILE cursorlistasalidaproductos%FOUNDLOOP
updatebc_mostradorset stock=stock+pcantidad where
id_local=pid_local and id_producto=pid_producto;
COMMIT;
FETCH cursorlistasalidaproductos INTO pid_producto,
pid_local, pcantidad;
ENDLOOP;
CLOSE cursorlistasalidaproductos;
COMMIT;
deletefrombc_salida_detallewhere id_salida=pid_salida;
commit;
deletefrombc_salidawhere id_salida=pid_salida;
commit;
END anularSalida;


Cargar stock al almacén

Por medio de este procedimiento sumamos al stock los productos que ingresan.
CREATEORREPLACEPROCEDURE cargar_produ_ent_propia(pidentrada INVARCHAR2,
pidlocal INVARCHAR2)
IS pid_producto VARCHAR2(30);
ptotal_unidades number;
CURSOR cursorlistaentradaproductos ISselect
edt.ID_PRODUCTO, edt.CANTIDAD_XMAY*edt.CANTIDAD_XMEN total_unidades
frombc_entrada_detalle edt,bc_mostrador mos,bc_producto pro
where edt.ID_PRODUCTO=mos.ID_PRODUCTO and
mos.ID_PRODUCTO=pro.ID_PRODUCTO and edt.ID_ENTRADA=pidentrada;
BEGIN
OPEN cursorlistaentradaproductos;
FETCH cursorlistaentradaproductos INTO pid_producto,
ptotal_unidades;
WHILE cursorlistaentradaproductos%FOUNDLOOP
updatebc_mostradorset stock=stock+ptotal_unidades where
id_local=pidlocal and id_producto=pid_producto;
COMMIT;
FETCH cursorlistaentradaproductos INTO pid_producto,
ptotal_unidades;
ENDLOOP;
CLOSE cursorlistaentradaproductos;
COMMIT;
END cargar_produ_ent_propia;



Restaurar stock.

Este procedimiento restaura los stock de los productos por venta con solamente
filtrando el id (llave principal) de la venta.
CREATEORREPLACEPROCEDURE restaurarStockSalida(pid_salida INVARCHAR2)
IS pid_producto VARCHAR2(30);
pid_local VARCHAR2(30);
pcantidad number;
-- Este procedimieno restaura los stock, se utiliza en las anulaciones
de los comprobantes
CURSOR cursorlistasalidaproductos ISselect id_producto,
id_local, cantidad frombc_salida_detallewhere id_salida=pid_salida;
BEGIN
OPEN cursorlistasalidaproductos;
FETCH cursorlistasalidaproductos INTO pid_producto, pid_local,
pcantidad;
WHILE cursorlistasalidaproductos%FOUNDLOOP
updatebc_mostradorset stock=stock+pcantidad where
id_local=pid_local and id_producto=pid_producto;
COMMIT;
FETCH cursorlistasalidaproductos INTO pid_producto,
pid_local, pcantidad;
ENDLOOP;
CLOSE cursorlistasalidaproductos;
COMMIT;
END restaurarStockSalida;

6. Vistas materializadas
Objeto de base de datos que almacena los resultados de una consulta.
Una vista materializada se define como una vista común, pero en lugar de
almacenar la definición de la vista, almacena el resultado de la consulta, es decir, la
materializa, como un objeto persistente en la base de datos.
Evita realizar cálculos que requieren gran tiempo de ejecución en el momento de
gran tiempo de ejecución en el momento deejecución de la consulta.


Vista materializada de los datos de la persona

creatematerializedviewdatos_personaas
select Initcap(p.NOMBRES)||' '||Initcap(p.APEPAT)||'
'||Initcap(p.APEMAT) NOMBRES,
D.NOMBRE_DISTRITO,
TP.NOMBRE_TIPO_PERSONA,
decode(acceso_credito(p.id_persona),'1','YES','NOT')
acceso_credito
fromcm_persona p,
cm_distrito d,
cm_tipo_persona tp
where tp.id_tipo_persona=p.id_tipo_persona
and p.ID_DISTRITO=d.ID_DISTRITO
orderby p.nombre;


Vista materializada de los datos de la persona, que se actualiza cada 7 días

creatematerializedview datos_persona2
REFRESHcompleteNEXT sysdate +7as
select Initcap(p.NOMBRES)||' '||Initcap(p.APEPAT)||'
'||Initcap(p.APEMAT) NOMBRES,
D.NOMBRE_DISTRITO,
TP.NOMBRE_TIPO_PERSONA,
decode(acceso_credito(p.id_persona),'1','YES','NOT')
acceso_credito
fromcm_persona p,
cm_distrito d,
cm_tipo_persona tp
where tp.id_tipo_persona=p.id_tipo_persona
and p.ID_DISTRITO=d.ID_DISTRITO
orderby p.nombres

Para llamar a una vista se trata como a una tabla más.
select*fromdatos_persona2;

7. Secuencias
Una secuencia (sequence) se emplea para generar valores enteros secuenciales
únicos y asignárselos a campos numéricos; se utilizan generalmente para las claves
primarias de las tablas garantizando que sus valores no se repitan.
Una secuencia es una tabla con un campo numérico en el cual se almacena un
valor y cada vez que se consulta, se incrementa tal valor para la próxima consulta.
Creación de secuencias
CREATESEQUENCE UPEU_BAZAR.SEC_PERSONA
STARTWITH0
INCREMENTBY1
MINVALUE0
NOCACHE
NOCYCLE
NOORDER

Uso de la secuencia.
insertintoCM_PERSONAvalues
(SEC_PERSONA.nextval,'pRIMER REGIS');

8. Jobs
Los Jobs sirven para programar tareas que se ejecuten
automáticamente en la base de datos. Para ello se tiene que
indicar la fecha y hora de la primera ejecución, qué tareas va a
realizar e indicar el tiempo que se va a repetir la tarea.
Una de las principales ventajas es que nos ahorran trabajo
porque el servidor de base de datos lo hace automáticamente.


Job que ejecuta un procedimiento cada 1 hora (60 minutos).

DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
( job
=> X
,what
=>'BEGIN guardar_saldos_diarios_hoy; END;'
,next_date => to_date('27/11/2013 13:58:46','dd/mm/yyyy
hh24:mi:ss')
,interval=>'SYSDATE + 60/1440'
,no_parse =>TRUE
);
SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
END;


Job que refresca una vista materializada cada 7 días

DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
( job
=> X
,what=>'dbms_refresh.refresh(''"UPEU_BAZAR"."DATOS_PERSONA2"'');'
,next_date => to_date('04/12/2013 12:44:00','dd/mm/yyyy
hh24:mi:ss')
,interval=>'sysdate + 7 '
,no_parse =>TRUE
);
SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
END;

9. DB Links
Un Database Link (DBLink) en Oracle es un tipo de
objeto que permite realizar una conexión desde una base
de datos a otra. Su principal objetivo es ocultar el detalle
de los parámetros de conexión necesarios, facilitándonos
un sencillo acceso a los recursos disponibles en otras
bases de datos, independientemente de que estas se
encuentren instaladas en el mismo servidor o no.
CREATEPUBLICDATABASELINK UPS_DBLINK
CONNECTTO UPEU_SEGURIDAD
IDENTIFIEDBY UPEU_SEGURIDAD
USING '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST
=192.168.60.20)(PORT = 1521)) (CONNECT_DATA = (SID = orcl)))'

Para hacer la consulta se hace de ésta forma:
SELECT*FROM SG_USUARIO@UPS_DBLINK

10. Ejecutar función en java
public CMdistrito agregarDistrito222(CMdistrito dis) throws
SQLException {
boolean paso_insert_per = false;
String result = "";
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
jn =
DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl"
, "upeu_bazar", "upeu_bazar");
CallableStatement val = jn.prepareCall("{?=call
insertar_distrito(?)}");
// Se indica que el primer interrogante es de salida.
val.registerOutParameter(1, Types.VARCHAR);
// Se pasa un parámetro en el segundo interrogante.
val.setString(2, dis.getNombre_distrito().trim());
// Se hace la llamada a la función.
val.execute();
// Se recoge el resultado del primer interrogante.
result = val.getString(1);
jn.commit();
jn.close();
paso_insert_per = true;
CMdistrito di = new CMdistrito();
di.setId_distrito(result);
return di;
} catch (Exception e) {
String MError = e.getMessage();
System.out.println("Error al ejecutar la funcion " + MError);
jn.rollback();
jn.close();
paso_insert_per = false;
CMdistrito di = new CMdistrito();
di.setId_distrito("Error al ejecutar la funcion " +
MError);
return di;
}
}

11. Examen Final
1. Realizar un trigger que muestre el total de créditos multiplicado por s/ 120 si es
adventista y si no por s/ 150, en la tabla matricula_alumno_curso(ojo crear nuevo
atributo).
CREATEORREPLACETRIGGERMATRICULA_ALUMNO_CURSObeforeinsertonMATRICULA_ALU
MNO_CURSO
foreachrow
declare
pid_religion varchar2(20);
pcr numeric(12,2);
begin
SELECT C.CR into pcr FROMCARGA_CURSO CC,PLAN_ACAD_CURSO PA,CURSO C
WHERE C.CURSO_ID=PA.CURSO_ID AND
PA.PLAN_ACAD_CURSO_ID=CC.PLAN_ACAD_CURSO_ID AND
CC.CARGA_CURSO_ID=:new.CARGA_CURSO_ID;
SELECT PER.ID_RELIGION into pid_religion FROMPERSONA PER,ALUMNO
A,MATRICULA M
WHERE PER.PERSONA_ID=A.ALUMNO_ID AND A.ALUMNO_ID=M.ALUMNO_ID
AND M.MATRICULA_ID=:new.MATRICULA_ID;
if pid_religion='Adve'then
:new.TOT_PAGAR:=pcr*120;
else
:new.TOT_PAGAR:=pcr*150;
endif;
end t_criterio;

2. Realizar una función que inserte en la tabla criterio_eval si es menor o igual a 100%
del peso total de lo contrario un mensaje de error.
CREATEORREPLACEFUNCTION proceso_criterio_eval
(pcriterio_eval_id invarchar2,
pcarga_curso_id
invarchar2,
pcriterio invarchar2,
pdetalle invarchar2,
ppeso
innumber)RETURNvarchar2
is
ptotal_peso numeric(12,2);
BEGIN
select NVL(sum(peso),0)into ptotal_peso fromcriterio_evalwhere
CARGA_CURSO_ID=pcarga_curso_id;
if ptotal_peso+ppeso<=100then
insertintocriterio_eval(criterio_eval_id, carga_curso_id,
criterio, detalle, peso)
values(pcriterio_eval_id,pcarga_curso_id,pcriterio,pdetalle,ppes
o);
return(pcriterio_eval_id);
else
Raise_application_error(-20201,'EXCEDE EL PESO NORMAL DE
100%');
endif;
end proceso_criterio_eval;

3. Realizar un procedimiento que haga el llamado a la función realizada si la operación
ha sido realizado con éxito muestre un mensaje de ok y si no error.
CREATEORREPLACEPROCEDURE ejecutar_funcion(pcriterio_eval_id
invarchar2,
pcarga_curso_id
invarchar2,
pcriterio invarchar2,
pdetalle invarchar2,
ppeso innumber)
IS
presultado varchar2(200);
BEGIN
presultado:=PROCESO_CRITERIO_EVAL(pcriterio_eval_id,pcarga_curs
o_id,pcriterio,pdetalle,ppeso);
if presultado!=pcriterio_eval_id then
Raise_application_error(-20201,'***Error****');
endif;
END ejecutar_funcion;

4. Realizar un cursor que matricule a todos los alumnos en el semestre seleccionado.
CREATEORREPLACEPROCEDURE matricular_semestre(psemestre INVARCHAR2)
IS palumno_id VARCHAR2(30);
CURSOR cursor_lista_alumnos ISselect a.ALUMNO_ID fromalumno a
where a.ALUMNO_ID
notin(select m.ALUMNO_ID frommatricula m where m.semestre=psemestre);
BEGIN
OPEN cursor_lista_alumnos;
FETCH cursor_lista_alumnos INTO palumno_id;
WHILE cursor_lista_alumnos%FOUNDLOOP
insertintomatricula(fecha,
alumno_id,semestre)values(sysdate,palumno_id, psemestre);
COMMIT;
FETCH cursor_lista_alumnos INTO palumno_id;
ENDLOOP;
CLOSE cursor_lista_alumnos;
COMMIT;
END matricular_semestre;

5. Realizar un procedimiento que inserte, actualicé y elimine en la tabla carga periodo.

CREATEORREPLACEPROCEDURE proceso_carga_periodo(pcarga_id invarchar2,
pfecha_ini indate,
pfecha_fin indate,
psemestre invarchar2,
pturno invarchar2,
opcion integer)
IS
contador integer;
BEGIN
if opcion=1then-- insertar
insertintocarga_periodo(carga_id, fecha_ini, fecha_fin, semestre,
turno)
values(pcarga_id, pfecha_ini, pfecha_fin,
psemestre, pturno);
commit;
endif;
if opcion=2then-- actualizar
updatecarga_periodoset fecha_ini=pfecha_ini, fecha_fin=pfecha_fin,
semestre=psemestre, turno=pturno
where carga_id=pcarga_id;
commit;
endif;
if opcion=3then-- eliminar
select count(*)into contador fromCARGA_CURSOwhere
carga_id=pcarga_id;
if contador=0then
deletefromcarga_periodowhere carga_id=pcarga_id;
commit;
else
Raise_application_error(-20201,'NO PUEDE ELIMINAR ÉSTA CARGA
PERIODO PORQUE SE ESTÁ USANDO');
endif;
endif;
END proceso_carga_periodo;

Centro de Producciones Navegando
CPN-TARAPOTO
Persy.quiroz@upeu.edu.pe

Más contenido relacionado

La actualidad más candente

Excel avanzado 2010
Excel avanzado 2010Excel avanzado 2010
Excel avanzado 2010
danielita1690
 
Ejercicios Excel 2010
Ejercicios Excel 2010Ejercicios Excel 2010
Ejercicios Excel 2010
Ismael Fanlo
 
6 gestiondetesoreria
6 gestiondetesoreria6 gestiondetesoreria
6 gestiondetesoreria
Oskr Valverde Gómez
 
978 84-9839-226-5
978 84-9839-226-5978 84-9839-226-5
978 84-9839-226-5
Janeth Gallo
 
Excel avanzado. Cuaderno de Ejercicios y Practicas
Excel avanzado. Cuaderno de Ejercicios y PracticasExcel avanzado. Cuaderno de Ejercicios y Practicas
Excel avanzado. Cuaderno de Ejercicios y Practicas
Conalep Puebla III
 
Proyecto mineria de_datos_caso_2
Proyecto mineria de_datos_caso_2Proyecto mineria de_datos_caso_2
Proyecto mineria de_datos_caso_2
Gustavo Rene Rojas Valdez
 
Tesis Inteligencia de Negocios Finanzas
Tesis Inteligencia de Negocios FinanzasTesis Inteligencia de Negocios Finanzas
Tesis Inteligencia de Negocios Finanzas
germannarv
 
Manual de Excel 2013
Manual de Excel 2013Manual de Excel 2013
Manual de Excel 2013
Rogelio Castro Caballero
 
Microsoft excel 2010 Manual
Microsoft excel 2010 ManualMicrosoft excel 2010 Manual
Microsoft excel 2010 Manual
Jéssica Ramos
 
Mcvs ad-03 cierre del proyecto
Mcvs ad-03 cierre del proyectoMcvs ad-03 cierre del proyecto
Mcvs ad-03 cierre del proyecto
giancarlo Aguirre Campos
 
ESQUEMA DE METADATOS PARA LA GESTIÓN DEL DOCUMENTO ELECTRÓNICO (e-EMGDE)
ESQUEMA DE METADATOS PARA LA GESTIÓN DEL DOCUMENTO ELECTRÓNICO (e-EMGDE)ESQUEMA DE METADATOS PARA LA GESTIÓN DEL DOCUMENTO ELECTRÓNICO (e-EMGDE)
ESQUEMA DE METADATOS PARA LA GESTIÓN DEL DOCUMENTO ELECTRÓNICO (e-EMGDE)
Sergio Gomez Florez
 
Informe evaluacion implementacion_del_software_completo
Informe evaluacion implementacion_del_software_completoInforme evaluacion implementacion_del_software_completo
Informe evaluacion implementacion_del_software_completo
Luis Penaloza Naranjo
 
Comunidad Emagister 43083 Microsoft Word 43082
Comunidad Emagister 43083 Microsoft Word   43082Comunidad Emagister 43083 Microsoft Word   43082
Comunidad Emagister 43083 Microsoft Word 43082
fgrino
 
Mod4 trabajo final
Mod4 trabajo finalMod4 trabajo final
Mod4 trabajo final
jose_calero
 
Diagnóstico tecnológico de los cybercafé del distrito ii del municipio de man...
Diagnóstico tecnológico de los cybercafé del distrito ii del municipio de man...Diagnóstico tecnológico de los cybercafé del distrito ii del municipio de man...
Diagnóstico tecnológico de los cybercafé del distrito ii del municipio de man...
Marco Mendoza López
 
Esquema de metadatos para la Gestión de documentos electrónicos
Esquema de metadatos para la Gestión de documentos electrónicosEsquema de metadatos para la Gestión de documentos electrónicos
Esquema de metadatos para la Gestión de documentos electrónicos
Radar Información y Conocimiento
 
Portafolio computacion basica 2 carla chuchuca
Portafolio computacion basica 2   carla chuchucaPortafolio computacion basica 2   carla chuchuca
Portafolio computacion basica 2 carla chuchuca
Carla Jimènez
 
Funciones estadisticas y_analisis_de_datos
Funciones estadisticas y_analisis_de_datosFunciones estadisticas y_analisis_de_datos
Funciones estadisticas y_analisis_de_datos
sara sara
 
Reporte bv11012 ch10032_fh11012_oc11012_sd11008
Reporte bv11012 ch10032_fh11012_oc11012_sd11008Reporte bv11012 ch10032_fh11012_oc11012_sd11008
Reporte bv11012 ch10032_fh11012_oc11012_sd11008
Josue Herrera
 
Visual Basic 6.0 progarmacion
Visual Basic 6.0 progarmacion Visual Basic 6.0 progarmacion
Visual Basic 6.0 progarmacion
betsabebarcenas
 

La actualidad más candente (20)

Excel avanzado 2010
Excel avanzado 2010Excel avanzado 2010
Excel avanzado 2010
 
Ejercicios Excel 2010
Ejercicios Excel 2010Ejercicios Excel 2010
Ejercicios Excel 2010
 
6 gestiondetesoreria
6 gestiondetesoreria6 gestiondetesoreria
6 gestiondetesoreria
 
978 84-9839-226-5
978 84-9839-226-5978 84-9839-226-5
978 84-9839-226-5
 
Excel avanzado. Cuaderno de Ejercicios y Practicas
Excel avanzado. Cuaderno de Ejercicios y PracticasExcel avanzado. Cuaderno de Ejercicios y Practicas
Excel avanzado. Cuaderno de Ejercicios y Practicas
 
Proyecto mineria de_datos_caso_2
Proyecto mineria de_datos_caso_2Proyecto mineria de_datos_caso_2
Proyecto mineria de_datos_caso_2
 
Tesis Inteligencia de Negocios Finanzas
Tesis Inteligencia de Negocios FinanzasTesis Inteligencia de Negocios Finanzas
Tesis Inteligencia de Negocios Finanzas
 
Manual de Excel 2013
Manual de Excel 2013Manual de Excel 2013
Manual de Excel 2013
 
Microsoft excel 2010 Manual
Microsoft excel 2010 ManualMicrosoft excel 2010 Manual
Microsoft excel 2010 Manual
 
Mcvs ad-03 cierre del proyecto
Mcvs ad-03 cierre del proyectoMcvs ad-03 cierre del proyecto
Mcvs ad-03 cierre del proyecto
 
ESQUEMA DE METADATOS PARA LA GESTIÓN DEL DOCUMENTO ELECTRÓNICO (e-EMGDE)
ESQUEMA DE METADATOS PARA LA GESTIÓN DEL DOCUMENTO ELECTRÓNICO (e-EMGDE)ESQUEMA DE METADATOS PARA LA GESTIÓN DEL DOCUMENTO ELECTRÓNICO (e-EMGDE)
ESQUEMA DE METADATOS PARA LA GESTIÓN DEL DOCUMENTO ELECTRÓNICO (e-EMGDE)
 
Informe evaluacion implementacion_del_software_completo
Informe evaluacion implementacion_del_software_completoInforme evaluacion implementacion_del_software_completo
Informe evaluacion implementacion_del_software_completo
 
Comunidad Emagister 43083 Microsoft Word 43082
Comunidad Emagister 43083 Microsoft Word   43082Comunidad Emagister 43083 Microsoft Word   43082
Comunidad Emagister 43083 Microsoft Word 43082
 
Mod4 trabajo final
Mod4 trabajo finalMod4 trabajo final
Mod4 trabajo final
 
Diagnóstico tecnológico de los cybercafé del distrito ii del municipio de man...
Diagnóstico tecnológico de los cybercafé del distrito ii del municipio de man...Diagnóstico tecnológico de los cybercafé del distrito ii del municipio de man...
Diagnóstico tecnológico de los cybercafé del distrito ii del municipio de man...
 
Esquema de metadatos para la Gestión de documentos electrónicos
Esquema de metadatos para la Gestión de documentos electrónicosEsquema de metadatos para la Gestión de documentos electrónicos
Esquema de metadatos para la Gestión de documentos electrónicos
 
Portafolio computacion basica 2 carla chuchuca
Portafolio computacion basica 2   carla chuchucaPortafolio computacion basica 2   carla chuchuca
Portafolio computacion basica 2 carla chuchuca
 
Funciones estadisticas y_analisis_de_datos
Funciones estadisticas y_analisis_de_datosFunciones estadisticas y_analisis_de_datos
Funciones estadisticas y_analisis_de_datos
 
Reporte bv11012 ch10032_fh11012_oc11012_sd11008
Reporte bv11012 ch10032_fh11012_oc11012_sd11008Reporte bv11012 ch10032_fh11012_oc11012_sd11008
Reporte bv11012 ch10032_fh11012_oc11012_sd11008
 
Visual Basic 6.0 progarmacion
Visual Basic 6.0 progarmacion Visual Basic 6.0 progarmacion
Visual Basic 6.0 progarmacion
 

Similar a Base de datos

Sesion 3. inteligencia de negocios
Sesion 3. inteligencia de negociosSesion 3. inteligencia de negocios
Sesion 3. inteligencia de negocios
Carlos Guerrero Díaz
 
El rol de las tic en la competitividad de las PyME - María Verónica Alderete
El rol de las tic en la competitividad de las PyME - María Verónica AldereteEl rol de las tic en la competitividad de las PyME - María Verónica Alderete
El rol de las tic en la competitividad de las PyME - María Verónica Alderete
Dialogo regional sobre Sociedad de la Información
 
El rol de las TIC en la competitividad de las PyME - Verónica Alderete
El rol de las TIC en la competitividad de las PyME - Verónica AldereteEl rol de las TIC en la competitividad de las PyME - Verónica Alderete
El rol de las TIC en la competitividad de las PyME - Verónica Alderete
Dialogo regional sobre Sociedad de la Información
 
Proyecto mineria de datos caso2
Proyecto mineria de datos caso2Proyecto mineria de datos caso2
Proyecto mineria de datos caso2
MARIANAZARENADORADOM
 
Manual excel 2010 intermedio
Manual excel 2010  intermedioManual excel 2010  intermedio
Manual excel 2010 intermedio
Juan K Tipan
 
VALOR EMPRESARIAL
VALOR EMPRESARIALVALOR EMPRESARIAL
VALOR EMPRESARIAL
Cade Soluciones
 
Plan de marketing digital.pdf
Plan  de marketing digital.pdfPlan  de marketing digital.pdf
Plan de marketing digital.pdf
Lisbeth Rosero
 
Ms project
Ms projectMs project
Tgua cindy fonseca
Tgua cindy fonsecaTgua cindy fonseca
Tgua cindy fonseca
cindyfon
 
Sistema de control, secuencia y termino
Sistema de control, secuencia y terminoSistema de control, secuencia y termino
Sistema de control, secuencia y termino
Yadira Fuentes
 
BIG DATA EJEMPLOS PARA TRABAJAR CON GRANDES.pdf
BIG DATA EJEMPLOS PARA TRABAJAR CON GRANDES.pdfBIG DATA EJEMPLOS PARA TRABAJAR CON GRANDES.pdf
BIG DATA EJEMPLOS PARA TRABAJAR CON GRANDES.pdf
expertoleonelmartine
 
BIG DATA EJEMPLOS. desarrrollo de curso.pdf
BIG DATA EJEMPLOS. desarrrollo de curso.pdfBIG DATA EJEMPLOS. desarrrollo de curso.pdf
BIG DATA EJEMPLOS. desarrrollo de curso.pdf
expertoleonelmartine
 
Guía de operaciones de Service Manager 2012 - Español
 Guía de operaciones de Service Manager 2012 - Español Guía de operaciones de Service Manager 2012 - Español
Guía de operaciones de Service Manager 2012 - Español
gonzomez
 
Open xava manual
Open xava manualOpen xava manual
Open xava manual
Herberth Figueroa
 
Fwpa doc-desarrollo
Fwpa doc-desarrolloFwpa doc-desarrollo
Fwpa doc-desarrollo
ciriako
 
Recopilatorio de Posts sobre SharePoint y Office 365 - Julio a Diciembre 2015
Recopilatorio de Posts sobre SharePoint y Office 365 - Julio a Diciembre 2015Recopilatorio de Posts sobre SharePoint y Office 365 - Julio a Diciembre 2015
Recopilatorio de Posts sobre SharePoint y Office 365 - Julio a Diciembre 2015
Juan Carlos Gonzalez
 
Adaptación del modelo black scholes en la simulacion de un portafolio de acci...
Adaptación del modelo black scholes en la simulacion de un portafolio de acci...Adaptación del modelo black scholes en la simulacion de un portafolio de acci...
Adaptación del modelo black scholes en la simulacion de un portafolio de acci...
Mono Ferreira
 
Proyecto mineria de_datos_caso_1
Proyecto mineria de_datos_caso_1Proyecto mineria de_datos_caso_1
Proyecto mineria de_datos_caso_1
Gustavo Rene Rojas Valdez
 
Proyecto mineria de datos caso1
Proyecto mineria de datos caso1Proyecto mineria de datos caso1
Proyecto mineria de datos caso1
MARIANAZARENADORADOM
 
Openbravo for retail solution description es
Openbravo for retail solution description   esOpenbravo for retail solution description   es
Openbravo for retail solution description es
spocsys
 

Similar a Base de datos (20)

Sesion 3. inteligencia de negocios
Sesion 3. inteligencia de negociosSesion 3. inteligencia de negocios
Sesion 3. inteligencia de negocios
 
El rol de las tic en la competitividad de las PyME - María Verónica Alderete
El rol de las tic en la competitividad de las PyME - María Verónica AldereteEl rol de las tic en la competitividad de las PyME - María Verónica Alderete
El rol de las tic en la competitividad de las PyME - María Verónica Alderete
 
El rol de las TIC en la competitividad de las PyME - Verónica Alderete
El rol de las TIC en la competitividad de las PyME - Verónica AldereteEl rol de las TIC en la competitividad de las PyME - Verónica Alderete
El rol de las TIC en la competitividad de las PyME - Verónica Alderete
 
Proyecto mineria de datos caso2
Proyecto mineria de datos caso2Proyecto mineria de datos caso2
Proyecto mineria de datos caso2
 
Manual excel 2010 intermedio
Manual excel 2010  intermedioManual excel 2010  intermedio
Manual excel 2010 intermedio
 
VALOR EMPRESARIAL
VALOR EMPRESARIALVALOR EMPRESARIAL
VALOR EMPRESARIAL
 
Plan de marketing digital.pdf
Plan  de marketing digital.pdfPlan  de marketing digital.pdf
Plan de marketing digital.pdf
 
Ms project
Ms projectMs project
Ms project
 
Tgua cindy fonseca
Tgua cindy fonsecaTgua cindy fonseca
Tgua cindy fonseca
 
Sistema de control, secuencia y termino
Sistema de control, secuencia y terminoSistema de control, secuencia y termino
Sistema de control, secuencia y termino
 
BIG DATA EJEMPLOS PARA TRABAJAR CON GRANDES.pdf
BIG DATA EJEMPLOS PARA TRABAJAR CON GRANDES.pdfBIG DATA EJEMPLOS PARA TRABAJAR CON GRANDES.pdf
BIG DATA EJEMPLOS PARA TRABAJAR CON GRANDES.pdf
 
BIG DATA EJEMPLOS. desarrrollo de curso.pdf
BIG DATA EJEMPLOS. desarrrollo de curso.pdfBIG DATA EJEMPLOS. desarrrollo de curso.pdf
BIG DATA EJEMPLOS. desarrrollo de curso.pdf
 
Guía de operaciones de Service Manager 2012 - Español
 Guía de operaciones de Service Manager 2012 - Español Guía de operaciones de Service Manager 2012 - Español
Guía de operaciones de Service Manager 2012 - Español
 
Open xava manual
Open xava manualOpen xava manual
Open xava manual
 
Fwpa doc-desarrollo
Fwpa doc-desarrolloFwpa doc-desarrollo
Fwpa doc-desarrollo
 
Recopilatorio de Posts sobre SharePoint y Office 365 - Julio a Diciembre 2015
Recopilatorio de Posts sobre SharePoint y Office 365 - Julio a Diciembre 2015Recopilatorio de Posts sobre SharePoint y Office 365 - Julio a Diciembre 2015
Recopilatorio de Posts sobre SharePoint y Office 365 - Julio a Diciembre 2015
 
Adaptación del modelo black scholes en la simulacion de un portafolio de acci...
Adaptación del modelo black scholes en la simulacion de un portafolio de acci...Adaptación del modelo black scholes en la simulacion de un portafolio de acci...
Adaptación del modelo black scholes en la simulacion de un portafolio de acci...
 
Proyecto mineria de_datos_caso_1
Proyecto mineria de_datos_caso_1Proyecto mineria de_datos_caso_1
Proyecto mineria de_datos_caso_1
 
Proyecto mineria de datos caso1
Proyecto mineria de datos caso1Proyecto mineria de datos caso1
Proyecto mineria de datos caso1
 
Openbravo for retail solution description es
Openbravo for retail solution description   esOpenbravo for retail solution description   es
Openbravo for retail solution description es
 

Más de lobi7o

placas tectonicas
placas tectonicas placas tectonicas
placas tectonicas
lobi7o
 
MONOGRAFÍA SOBRE EL METAMORFISMO FASES, FACTORES Y LAS ROCAS METAMORFICAS
MONOGRAFÍA SOBRE EL METAMORFISMO  FASES, FACTORES Y LAS ROCAS METAMORFICAS MONOGRAFÍA SOBRE EL METAMORFISMO  FASES, FACTORES Y LAS ROCAS METAMORFICAS
MONOGRAFÍA SOBRE EL METAMORFISMO FASES, FACTORES Y LAS ROCAS METAMORFICAS
lobi7o
 
Rocas igneas
Rocas igneasRocas igneas
Rocas igneas
lobi7o
 
Pts
PtsPts
Pts
lobi7o
 
Pm10
Pm10Pm10
Pm10
lobi7o
 
Monografia huella ecologica
Monografia huella ecologicaMonografia huella ecologica
Monografia huella ecologica
lobi7o
 
Monografia geologia
Monografia geologiaMonografia geologia
Monografia geologia
lobi7o
 
Monografia de geologia
Monografia de geologiaMonografia de geologia
Monografia de geologia
lobi7o
 
Mono de estratigra
Mono de estratigraMono de estratigra
Mono de estratigra
lobi7o
 
Mineralogia(ambiental 2 a)
Mineralogia(ambiental 2 a)Mineralogia(ambiental 2 a)
Mineralogia(ambiental 2 a)
lobi7o
 
Geología histórica monografia presentar
Geología histórica monografia presentarGeología histórica monografia presentar
Geología histórica monografia presentar
lobi7o
 
Análisis Bajo la Metodología simplex para la solución factible de la Universi...
Análisis Bajo la Metodología simplex para la solución factible de la Universi...Análisis Bajo la Metodología simplex para la solución factible de la Universi...
Análisis Bajo la Metodología simplex para la solución factible de la Universi...
lobi7o
 
Método Gráfico Restaurant’ J&D Modelo del Transporte Álicorp S.A.A. Asi...
 	Método Gráfico Restaurant’ J&D  	Modelo del Transporte Álicorp S.A.A.  	Asi... 	Método Gráfico Restaurant’ J&D  	Modelo del Transporte Álicorp S.A.A.  	Asi...
Método Gráfico Restaurant’ J&D Modelo del Transporte Álicorp S.A.A. Asi...
lobi7o
 
Planteamiento de un problema de programación lineal “Granja Guerrero”
Planteamiento de un problema de programación lineal  “Granja Guerrero”Planteamiento de un problema de programación lineal  “Granja Guerrero”
Planteamiento de un problema de programación lineal “Granja Guerrero”
lobi7o
 
Máximos y Mínimos de una función de varias variables
Máximos y Mínimos de una función de varias variablesMáximos y Mínimos de una función de varias variables
Máximos y Mínimos de una función de varias variables
lobi7o
 
Modelamiento de Casos de Uso RUP
Modelamiento  de Casos de Uso  RUPModelamiento  de Casos de Uso  RUP
Modelamiento de Casos de Uso RUP
lobi7o
 
Aplicación de la BPM en el diseño del proceso del negocio
Aplicación de la BPM en el diseño del proceso del negocioAplicación de la BPM en el diseño del proceso del negocio
Aplicación de la BPM en el diseño del proceso del negocio
lobi7o
 
Identificar el cumplimiento de una de las normas establecidas por la Universi...
Identificar el cumplimiento de una de las normas establecidas por la Universi...Identificar el cumplimiento de una de las normas establecidas por la Universi...
Identificar el cumplimiento de una de las normas establecidas por la Universi...
lobi7o
 
Identificar el cumplimiento de una de las normas establecidas por la Universi...
Identificar el cumplimiento de una de las normas establecidas por la Universi...Identificar el cumplimiento de una de las normas establecidas por la Universi...
Identificar el cumplimiento de una de las normas establecidas por la Universi...
lobi7o
 
Redes Sociales y su adicción en estudiantes universitarios.
Redes Sociales y su adicción en estudiantes universitarios.Redes Sociales y su adicción en estudiantes universitarios.
Redes Sociales y su adicción en estudiantes universitarios.
lobi7o
 

Más de lobi7o (20)

placas tectonicas
placas tectonicas placas tectonicas
placas tectonicas
 
MONOGRAFÍA SOBRE EL METAMORFISMO FASES, FACTORES Y LAS ROCAS METAMORFICAS
MONOGRAFÍA SOBRE EL METAMORFISMO  FASES, FACTORES Y LAS ROCAS METAMORFICAS MONOGRAFÍA SOBRE EL METAMORFISMO  FASES, FACTORES Y LAS ROCAS METAMORFICAS
MONOGRAFÍA SOBRE EL METAMORFISMO FASES, FACTORES Y LAS ROCAS METAMORFICAS
 
Rocas igneas
Rocas igneasRocas igneas
Rocas igneas
 
Pts
PtsPts
Pts
 
Pm10
Pm10Pm10
Pm10
 
Monografia huella ecologica
Monografia huella ecologicaMonografia huella ecologica
Monografia huella ecologica
 
Monografia geologia
Monografia geologiaMonografia geologia
Monografia geologia
 
Monografia de geologia
Monografia de geologiaMonografia de geologia
Monografia de geologia
 
Mono de estratigra
Mono de estratigraMono de estratigra
Mono de estratigra
 
Mineralogia(ambiental 2 a)
Mineralogia(ambiental 2 a)Mineralogia(ambiental 2 a)
Mineralogia(ambiental 2 a)
 
Geología histórica monografia presentar
Geología histórica monografia presentarGeología histórica monografia presentar
Geología histórica monografia presentar
 
Análisis Bajo la Metodología simplex para la solución factible de la Universi...
Análisis Bajo la Metodología simplex para la solución factible de la Universi...Análisis Bajo la Metodología simplex para la solución factible de la Universi...
Análisis Bajo la Metodología simplex para la solución factible de la Universi...
 
Método Gráfico Restaurant’ J&D Modelo del Transporte Álicorp S.A.A. Asi...
 	Método Gráfico Restaurant’ J&D  	Modelo del Transporte Álicorp S.A.A.  	Asi... 	Método Gráfico Restaurant’ J&D  	Modelo del Transporte Álicorp S.A.A.  	Asi...
Método Gráfico Restaurant’ J&D Modelo del Transporte Álicorp S.A.A. Asi...
 
Planteamiento de un problema de programación lineal “Granja Guerrero”
Planteamiento de un problema de programación lineal  “Granja Guerrero”Planteamiento de un problema de programación lineal  “Granja Guerrero”
Planteamiento de un problema de programación lineal “Granja Guerrero”
 
Máximos y Mínimos de una función de varias variables
Máximos y Mínimos de una función de varias variablesMáximos y Mínimos de una función de varias variables
Máximos y Mínimos de una función de varias variables
 
Modelamiento de Casos de Uso RUP
Modelamiento  de Casos de Uso  RUPModelamiento  de Casos de Uso  RUP
Modelamiento de Casos de Uso RUP
 
Aplicación de la BPM en el diseño del proceso del negocio
Aplicación de la BPM en el diseño del proceso del negocioAplicación de la BPM en el diseño del proceso del negocio
Aplicación de la BPM en el diseño del proceso del negocio
 
Identificar el cumplimiento de una de las normas establecidas por la Universi...
Identificar el cumplimiento de una de las normas establecidas por la Universi...Identificar el cumplimiento de una de las normas establecidas por la Universi...
Identificar el cumplimiento de una de las normas establecidas por la Universi...
 
Identificar el cumplimiento de una de las normas establecidas por la Universi...
Identificar el cumplimiento de una de las normas establecidas por la Universi...Identificar el cumplimiento de una de las normas establecidas por la Universi...
Identificar el cumplimiento de una de las normas establecidas por la Universi...
 
Redes Sociales y su adicción en estudiantes universitarios.
Redes Sociales y su adicción en estudiantes universitarios.Redes Sociales y su adicción en estudiantes universitarios.
Redes Sociales y su adicción en estudiantes universitarios.
 

Último

trabajo monografico sobre el yandex .jim
trabajo monografico sobre el yandex .jimtrabajo monografico sobre el yandex .jim
trabajo monografico sobre el yandex .jim
jhonyaicaterodriguez
 
Uso de las Tics en la vida cotidiana.pptx
Uso de las Tics en la vida cotidiana.pptxUso de las Tics en la vida cotidiana.pptx
Uso de las Tics en la vida cotidiana.pptx
231485414
 
Herramientas para los abogados, 3 herramientas
Herramientas para los abogados, 3 herramientasHerramientas para los abogados, 3 herramientas
Herramientas para los abogados, 3 herramientas
yessicacarrillo16
 
analisis de grafica Realizado por Juliana Diaz Cardona.pdf
analisis de grafica Realizado por Juliana Diaz Cardona.pdfanalisis de grafica Realizado por Juliana Diaz Cardona.pdf
analisis de grafica Realizado por Juliana Diaz Cardona.pdf
RazeThefox
 
saludos en ingles de una forma mas facil y divertida
saludos en ingles de una forma mas facil y divertidasaludos en ingles de una forma mas facil y divertida
saludos en ingles de una forma mas facil y divertida
YendierMosqueralemus
 
Gobernanza con SharePoint Premium de principio a fin
Gobernanza con SharePoint Premium de principio a finGobernanza con SharePoint Premium de principio a fin
Gobernanza con SharePoint Premium de principio a fin
Juan Carlos Gonzalez
 
Excel Avanzado_ Diagrama de Pareto .pdf
Excel Avanzado_  Diagrama de Pareto .pdfExcel Avanzado_  Diagrama de Pareto .pdf
Excel Avanzado_ Diagrama de Pareto .pdf
IsabellaLugo3
 
Plan de racionamiento de energía en Venezuela
Plan de racionamiento de energía en VenezuelaPlan de racionamiento de energía en Venezuela
Plan de racionamiento de energía en Venezuela
Gabrielm88
 
trabajo _20240621_132119_0000.pdf-.......
trabajo _20240621_132119_0000.pdf-.......trabajo _20240621_132119_0000.pdf-.......
trabajo _20240621_132119_0000.pdf-.......
m15918387
 
Programas relacionados con la telemática.pdf
Programas relacionados con la telemática.pdfProgramas relacionados con la telemática.pdf
Programas relacionados con la telemática.pdf
DiegoPinillo
 
C1B3RWALL La red de cooperación de Madrid.pptx
C1B3RWALL La red de cooperación de Madrid.pptxC1B3RWALL La red de cooperación de Madrid.pptx
C1B3RWALL La red de cooperación de Madrid.pptx
Guillermo Obispo San Román
 
Plantilla carrier y tecnologia de TIGO.pptx
Plantilla carrier y tecnologia de TIGO.pptxPlantilla carrier y tecnologia de TIGO.pptx
Plantilla carrier y tecnologia de TIGO.pptx
edwinedsonsuyo
 
EXCEL AVANZADO_ DIAGRAMA DE NPARETO .pdf
EXCEL AVANZADO_ DIAGRAMA DE NPARETO .pdfEXCEL AVANZADO_ DIAGRAMA DE NPARETO .pdf
EXCEL AVANZADO_ DIAGRAMA DE NPARETO .pdf
SamuelBedoya6
 
Diagrama de pareto.docx trabajo de tecnologia
Diagrama de pareto.docx trabajo de tecnologiaDiagrama de pareto.docx trabajo de tecnologia
Diagrama de pareto.docx trabajo de tecnologia
RazeThefox
 
El uso de las TIC en la vida cotidiana.pptx
El uso de las TIC en la vida cotidiana.pptxEl uso de las TIC en la vida cotidiana.pptx
El uso de las TIC en la vida cotidiana.pptx
jgvanessa23
 
INFORMATICA Y TECNOLOGIA
INFORMATICA Y TECNOLOGIAINFORMATICA Y TECNOLOGIA
INFORMATICA Y TECNOLOGIA
renzocruz180310
 
UiPath and Dream to Succeed Student Account Session
UiPath and Dream to Succeed Student Account SessionUiPath and Dream to Succeed Student Account Session
UiPath and Dream to Succeed Student Account Session
DianaGray10
 
Estructuras básicas_ conceptos básicos de programación (1).pdf
Estructuras básicas_ conceptos básicos de programación  (1).pdfEstructuras básicas_ conceptos básicos de programación  (1).pdf
Estructuras básicas_ conceptos básicos de programación (1).pdf
AnaSofaRosmaya
 
Morado y Verde Animado Patrón Abstracto Proyecto de Grupo Presentación de Edu...
Morado y Verde Animado Patrón Abstracto Proyecto de Grupo Presentación de Edu...Morado y Verde Animado Patrón Abstracto Proyecto de Grupo Presentación de Edu...
Morado y Verde Animado Patrón Abstracto Proyecto de Grupo Presentación de Edu...
KukiiSanchez
 
Ingeniería en Telemática y ejercicios.pdf
Ingeniería en Telemática y ejercicios.pdfIngeniería en Telemática y ejercicios.pdf
Ingeniería en Telemática y ejercicios.pdf
Camila301231
 

Último (20)

trabajo monografico sobre el yandex .jim
trabajo monografico sobre el yandex .jimtrabajo monografico sobre el yandex .jim
trabajo monografico sobre el yandex .jim
 
Uso de las Tics en la vida cotidiana.pptx
Uso de las Tics en la vida cotidiana.pptxUso de las Tics en la vida cotidiana.pptx
Uso de las Tics en la vida cotidiana.pptx
 
Herramientas para los abogados, 3 herramientas
Herramientas para los abogados, 3 herramientasHerramientas para los abogados, 3 herramientas
Herramientas para los abogados, 3 herramientas
 
analisis de grafica Realizado por Juliana Diaz Cardona.pdf
analisis de grafica Realizado por Juliana Diaz Cardona.pdfanalisis de grafica Realizado por Juliana Diaz Cardona.pdf
analisis de grafica Realizado por Juliana Diaz Cardona.pdf
 
saludos en ingles de una forma mas facil y divertida
saludos en ingles de una forma mas facil y divertidasaludos en ingles de una forma mas facil y divertida
saludos en ingles de una forma mas facil y divertida
 
Gobernanza con SharePoint Premium de principio a fin
Gobernanza con SharePoint Premium de principio a finGobernanza con SharePoint Premium de principio a fin
Gobernanza con SharePoint Premium de principio a fin
 
Excel Avanzado_ Diagrama de Pareto .pdf
Excel Avanzado_  Diagrama de Pareto .pdfExcel Avanzado_  Diagrama de Pareto .pdf
Excel Avanzado_ Diagrama de Pareto .pdf
 
Plan de racionamiento de energía en Venezuela
Plan de racionamiento de energía en VenezuelaPlan de racionamiento de energía en Venezuela
Plan de racionamiento de energía en Venezuela
 
trabajo _20240621_132119_0000.pdf-.......
trabajo _20240621_132119_0000.pdf-.......trabajo _20240621_132119_0000.pdf-.......
trabajo _20240621_132119_0000.pdf-.......
 
Programas relacionados con la telemática.pdf
Programas relacionados con la telemática.pdfProgramas relacionados con la telemática.pdf
Programas relacionados con la telemática.pdf
 
C1B3RWALL La red de cooperación de Madrid.pptx
C1B3RWALL La red de cooperación de Madrid.pptxC1B3RWALL La red de cooperación de Madrid.pptx
C1B3RWALL La red de cooperación de Madrid.pptx
 
Plantilla carrier y tecnologia de TIGO.pptx
Plantilla carrier y tecnologia de TIGO.pptxPlantilla carrier y tecnologia de TIGO.pptx
Plantilla carrier y tecnologia de TIGO.pptx
 
EXCEL AVANZADO_ DIAGRAMA DE NPARETO .pdf
EXCEL AVANZADO_ DIAGRAMA DE NPARETO .pdfEXCEL AVANZADO_ DIAGRAMA DE NPARETO .pdf
EXCEL AVANZADO_ DIAGRAMA DE NPARETO .pdf
 
Diagrama de pareto.docx trabajo de tecnologia
Diagrama de pareto.docx trabajo de tecnologiaDiagrama de pareto.docx trabajo de tecnologia
Diagrama de pareto.docx trabajo de tecnologia
 
El uso de las TIC en la vida cotidiana.pptx
El uso de las TIC en la vida cotidiana.pptxEl uso de las TIC en la vida cotidiana.pptx
El uso de las TIC en la vida cotidiana.pptx
 
INFORMATICA Y TECNOLOGIA
INFORMATICA Y TECNOLOGIAINFORMATICA Y TECNOLOGIA
INFORMATICA Y TECNOLOGIA
 
UiPath and Dream to Succeed Student Account Session
UiPath and Dream to Succeed Student Account SessionUiPath and Dream to Succeed Student Account Session
UiPath and Dream to Succeed Student Account Session
 
Estructuras básicas_ conceptos básicos de programación (1).pdf
Estructuras básicas_ conceptos básicos de programación  (1).pdfEstructuras básicas_ conceptos básicos de programación  (1).pdf
Estructuras básicas_ conceptos básicos de programación (1).pdf
 
Morado y Verde Animado Patrón Abstracto Proyecto de Grupo Presentación de Edu...
Morado y Verde Animado Patrón Abstracto Proyecto de Grupo Presentación de Edu...Morado y Verde Animado Patrón Abstracto Proyecto de Grupo Presentación de Edu...
Morado y Verde Animado Patrón Abstracto Proyecto de Grupo Presentación de Edu...
 
Ingeniería en Telemática y ejercicios.pdf
Ingeniería en Telemática y ejercicios.pdfIngeniería en Telemática y ejercicios.pdf
Ingeniería en Telemática y ejercicios.pdf
 

Base de datos

  • 1. Base de datos II Administración todo tipo de Base de datos SQL Producciones Navegando UniónSoft Alumno: Persy Quiroz Menor Curso: Administración de base de datos II Docente: Joel Pérez Suárez Universidad Peruana Unión – Tarapoto
  • 2. PRESENTACIÓN Las bases de datos son centros de información de grandes y pequeñas empresas. Por ello es de gran importancia una buena gestión, administración y seguridad ya que contienen información valiosa para cada entidad. Este documento presenta información básica que dará mayor conocer al investigador. Ya que contiene herramientas necesarias para la aplicación en la administración de base de datos. DEDICATORIA Ésta recopilación va dedicados a mis padres Edita y Josué por su apoyo incondicional en mis estudios.
  • 3. Contenido 1. Creación de Base de datos en Oracle ........................................................................................5 2. Consultas SQL ..............................................................................................................................5 En Oracle ............................................................................................................................................5  Número de cursos por alumno perteneciente al 4to ciclo de sistemas ..........................5  Número de cursos que tiene cada alumno en cada ciclo. ................................................6  Ponderado por curso de cada alumno. ..............................................................................6  Mostar los cursos con su equivales. ....................................................................................7  Mostrar los alumnos que se encuentran con notas mayores al promedio por ciclo y carrera. ............................................................................................................................................7 En PostgreSQL ..................................................................................................................................7   ¿Cuál es el paciente q mayor servicio a recibido y q tipos de servicio? .......................8  Cuál es el sector más vendido .............................................................................................9  Cuáles son sus artículos bandera ........................................................................................9  3. Mostrar diagnóstico, Boucher, glosa y hora de atención. ..............................................7 Muestre su periodo y el tiempo de contrato q tiene cada cliente. ................................10 Triggers ........................................................................................................................................11 En Oracle ..........................................................................................................................................11  Según el criterio de evaluación, sumatoria del peso de las notas no debe pasar el 100%. .............................................................................................................................................11  El siguiente trigger a partir de la nota ingresada nos indica si la nota es aprobatoria o no en el rango entre 0 y 20, en caso contrario nos dice que la nota no es válida. Este evento se da en la tabla EVALU_CRITERIO al momento de registrarlo. ...........................12  El siguiente trigger a partir de la fecha de nacimiento de la persona me dice en qué etapa de su vida se encuentra, ya sea: niño, adolescente, joven, adulto-joven, adulto, anciano y falleció. ........................................................................................................................13  Al registrar un semestre académico, con la fecha el trigger indicará el semestre en que nos encontramos si es de enero a junio será (año-I) en caso contrario (año-II)...........14  Tigger que genera llave principal de una tabla a partir del máximo. ..........................14  Crear la tabla de empleados con las siguientes restricciones: Un empleado no puede supervisar a más de dos empleados. El presupuesto total por departamento no puede ser superior a 1000. ......................................................................................................................15 En PostgreSQL ................................................................................................................................17
  • 4.  4. Tigger que genera llave principal de una tabla en PostgreSQL a partir del máximo. 17 Funciones PL/SQL ......................................................................................................................18 Desde dónde llamarlas: .................................................................................................................18  Función que evalúa de acuerdo al parámetro ingresado si accede o no al crédito, si es „1‟ evaluará en su propia tabla, sino en la tabla cm_tipo_persona. .................................18   Función que saca la descripción de un producto............................................................19  Función que saca el total de entradas de un producto por mes. ..................................19  5. Función que saca los nombres de un cliente al ingresar su código de identificación. 19 Función que inserta datos a una tabla. .............................................................................20 Procedimientos almacenados ...................................................................................................20  Procedimiento para registrar venta: .................................................................................20  Procedimiento para registrar salida:.................................................................................22  Añadir un nuevo producto a una venta. ..........................................................................23  Procedimiento para anular una salida .............................................................................23  Calcular el total de una venta ............................................................................................24 Cursores............................................................................................................................................24   Eliminar venta......................................................................................................................26  Cargar stock al almacén......................................................................................................27  6. Crear comprobante..............................................................................................................24 Restaurar stock. ...................................................................................................................27 Vistas materializadas .................................................................................................................28  Vista materializada de los datos de la persona ...............................................................28  Vista materializada de los datos de la persona, que se actualiza cada 7 días .............28 7. Secuencias ....................................................................................................................................28 8. Jobs ................................................................................................................................................29   9. 10. Job que ejecuta un procedimiento cada 1 hora (60 minutos). .......................................29 Job que refresca una vista materializada cada 7 días .....................................................30 DB Links ......................................................................................................................................30 Ejecutar función en java ........................................................................................................30
  • 5. 1. Creación de Base de datos en Oracle CREATEUSER"NOMBRE_BD"IDENTIFIEDBY"CONTRASENA_BD" DEFAULTTABLESPACE USERS TEMPORARYTABLESPACE TEMP PROFILEDEFAULT; GRANTCREATEVIEWTO NOMBRE_BD WITHADMINOPTION; GRANTUNLIMITEDTABLESPACETO NOMBRE_BD; GRANT"CONNECT"TO"NOMBRE_BD"; GRANT"DBA"TO"NOMBRE_BD"; GRANT"RESOURCE"TO"NOMBRE_BD"; ALTERUSER"NOMBRE_BD"DEFAULTROLE"CONNECT","DBA","RESOURCE"; 2. Consultas SQL En Oracle  Número de cursos por alumno perteneciente al 4to ciclo de sistemas select per.PRIMER_NOMBRE||' '||per.PRIMER_APELLIDO||' '||per.SEGUNDO_APELLIDO nombre_alumno, plac.ID_CICLO, count(maac.MATRICULA_CARGA_CURSO_ID) nro_cursos from persona per, alumno al, matricula ma, matricula_alumno_curso maac, carga_curso cc, plan_acad_curso plac, plan_acad pla, esc_acad es where per.PERSONA_ID=al.ALUMNO_ID and al.ALUMNO_ID=ma.ALUMNO_ID and ma.MATRICULA_ID=maac.MATRICULA_ID and cc.CARGA_CURSO_ID=maac.CARGA_CURSO_ID and plac.PLAN_ACAD_CURSO_ID=cc.PLAN_ACAD_CURSO_ID and plac.PLAN_ACAD_ID=pla.PLAN_ACAD_ID and es.ESC_ACAD_ID=pla.ESC_ACAD_ID and plac.ID_CICLO='4'and es.ESC_ACAD_ID='0001' groupby per.PRIMER_NOMBRE,per.PRIMER_APELLIDO,per.SEGUNDO_APELLIDO, plac.ID_CICLO
  • 6.  Número de cursos que tiene cada alumno en cada ciclo. select per.PRIMER_NOMBRE||' '||per.PRIMER_APELLIDO||' '||per.SEGUNDO_APELLIDO nombre_alumno, alu.COD_UNIVERSITARIO, count(malc.MATRICULA_ID) total_cursos frompersona per, alumno alu, matricula mat, matricula_alumno_curso malc where per.PERSONA_ID=alu.ALUMNO_ID and alu.ALUMNO_ID=mat.ALUMNO_ID and mat.MATRICULA_ID=malc.MATRICULA_ID and mat.semestre='2013-II' groupby per.PRIMER_NOMBRE,per.PRIMER_APELLIDO,per.SEGUNDO_APELLIDO, alu.COD_UNIVERSITARIO;  Ponderado por curso de cada alumno. select per.PRIMER_NOMBRE||' '||per.PRIMER_APELLIDO||' '||per.SEGUNDO_APELLIDO nombre_alumno, cu.NOMBRE nombre_curso, sum((eva.NOTA_CRITERIO*cri.Peso)/100) ponderado frompersona per, alumno al, matricula ma, matricula_alumno_curso maal, carga_curso car, plan_acad_curso plac, curso cu, criterio_eval cri, evalu_criterio eva where per.PERSONA_ID=al.ALUMNO_ID and al.ALUMNO_ID=ma.ALUMNO_ID and ma.MATRICULA_ID=maal.MATRICULA_ID and maal.CARGA_CURSO_ID=car.CARGA_CURSO_ID and car.PLAN_ACAD_CURSO_ID=plac.PLAN_ACAD_CURSO_ID and plac.CURSO_ID=cu.CURSO_ID and car.CARGA_CURSO_ID=cri.CARGA_CURSO_ID and cri.CRITERIO_EVAL_ID=eva.CRITERIO_EVAL_ID and maal.MATRICULA_CARGA_CURSO_ID=eva.MATRICULA_CARGA_CURSO_ID and ma.SEMESTRE='2013-II' groupby per.PRIMER_NOMBRE,per.PRIMER_APELLIDO, per.SEGUNDO_APELLIDO, cu.NOMBRE;
  • 7.  Mostar los cursos con su equivales. select cu.NOMBRE curso, cu2.NOMBRE equivalente fromcurso cu, curso cu2, equivalencia eq where cu.CURSO_ID=eq.CURSO_ID and cu2.CURSO_ID =eq.EQUIV_CURSO_ID;  Mostrar los alumnos que se encuentran con notas mayores al promedio por ciclo y carrera. selectdistinct(per.PRIMER_NOMBRE||' '||per.PRIMER_APELLIDO) nombre_alumno, es.NOMBRE escuela, plac.ID_CICLO ciclo_acad frompersona per, alumno al, plan_acad pla, esc_acad es, matricula ma, matricula_alumno_curso maal, carga_curso car, plan_acad_curso plac, EVALUACION_TOTAL ev where per.PERSONA_ID=al.ALUMNO_ID and al.PLAN_ACAD_ID=pla.PLAN_ACAD_ID and pla.ESC_ACAD_ID=es.ESC_ACAD_ID and al.ALUMNO_ID=ma.ALUMNO_ID and ma.MATRICULA_ID=maal.MATRICULA_ID and maal.CARGA_CURSO_ID=car.CARGA_CURSO_ID and car.PLAN_ACAD_CURSO_ID=plac.PLAN_ACAD_CURSO_ID and ma.SEMESTRE='2013-II'and ma.MATRICULA_ID=ev.MATRICULA_ID and ev.PROMEDIO_PONDERADO_CICLO>= (select avg(promedio_ponderado_ciclo)fromevaluacion_total eva,matricula ma where ma.MATRICULA_ID=ev.MATRICULA_ID and ma.SEMESTRE='2013-II') groupby per.PRIMER_NOMBRE,per.PRIMER_APELLIDO,es.NOMBRE, plac.ID_CICLO orderby nombre_alumno; En PostgreSQL  Mostrar diagnóstico, Boucher, glosa y hora de atención.
  • 8. SELECT diagnostico.nombre, venta.voucher, venta.glosa, venta.horaatencion FROM cendiko.venta, cendiko.diagnostico, cendiko.ventadiag WHERE venta.ventaid = ventadiag.ventaid AND diagnostico.diagnosticoid = ventadiag.diagnosticoid;  ¿Cuál es el paciente q mayor servicio a recibido y q tipos de servicio? SELECT cliente.nombres||' '||cliente.apellidos nombre_cliente, servicio.nombre nombre_servicio FROM cendiko.cliente, cendiko.ventaserv, cendiko.venta, cendiko.servicio WHERE cliente.clienteid = venta.clienteid AND venta.ventaid = ventaserv.ventaid AND servicio.servicioid = ventaserv.servicioid AND cliente.clienteid in(select lista.clienteid from(SELECT cliente.clienteid, cliente.nombres||' '||cliente.apellidos nombre_cliente, count(ventaserv.ventaservid) nro_servicios FROM cendiko.cliente, cendiko.venta, cendiko.ventaserv WHERE cliente.clienteid = venta.clienteid AND venta.ventaid = ventaserv.ventaid groupby cliente.clienteid, cliente.nombres,cliente.apellidos HAVING count(ventaserv.ventaservid)=(select max(lista2.nro_servicios)from(SELECT cliente.clienteid, cliente.nombres||' '||cliente.apellidos nombre_cliente, count(ventaserv.ventaservid) nro_servicios FROM cendiko.cliente, cendiko.venta, cendiko.ventaserv WHERE cliente.clienteid = venta.clienteid AND venta.ventaid = ventaserv.ventaid groupby cliente.clienteid, cliente.nombres,cliente.apellidos) lista2)) lista) orderby cliente.apellidos;
  • 9.  Cuál es el sector más vendido SELECT sector.nombre nombre_sector, sum(kardexfarm.cantidad) cantidad_productos_sector FROM cendiko.sector, cendiko.articulo, cendiko.kardexfarm WHERE sector.sectorid = articulo.sectorid AND articulo.articuloid = kardexfarm.articuloid groupby sector.nombre HAVING sum(kardexfarm.cantidad)= (select max(lista.cantidad_productos_sector)from(SELECT sector.nombre nombre_sector, sum(kardexfarm.cantidad) cantidad_productos_sector FROM cendiko.sector, cendiko.articulo, cendiko.kardexfarm WHERE sector.sectorid = articulo.sectorid AND articulo.articuloid = kardexfarm.articuloid groupby sector.nombre) lista)  Cuáles son sus artículos bandera SELECT articulo.codigo, articulo.nombre, sum(kardexfarm.cantidad) cantidad_vendida FROM cendiko.articulo, cendiko.kardexfarm WHERE articulo.articuloid = kardexfarm.articuloid groupby articulo.codigo,articulo.nombre HAVING sum(kardexfarm.cantidad)>= (select avg(lista.cantidad_vendida)from(SELECT articulo.codigo, articulo.nombre, sum(kardexfarm.cantidad) cantidad_vendida FROM cendiko.articulo, cendiko.kardexfarm WHERE articulo.articuloid = kardexfarm.articuloid groupby articulo.codigo,articulo.nombre) lista) orderby cantidad_vendida desc;
  • 10.  Muestre su periodo y el tiempo de contrato q tiene cada cliente. SELECT cliente.nombres||' '||cliente.apellidos nombres, periodo.nombre periodo, to_char(contrato.fecha,'dd/mm/yyyy') fecha, to_char(contrato.vigencia,'dd/mm/yyyy') vigencia, to_date(to_char(contrato.vigencia,'dd/mm/yyyy'),'dd/mm/yyyy')to_date(to_char(contrato.fecha,'dd/mm/yyyy'),'dd/mm/yyyy')as total_dias FROM cendiko.periodo, cendiko.cliente, cendiko.contrato WHERE periodo.periodoid = contrato.periodoid AND cliente.clienteid = contrato.clienteid orderby cliente.nombres, cliente.apellidos;
  • 11. 3. Triggers Un trigger o disparador es un objeto procedimental asociado a una tabla. Se almacena en la base de datos y Oracle lo ejecuta implícitamente (se dispara) cuando se modifican los datos de la tabla (comandos DML de SQL). Los Triggers tienen múltiples aplicaciones por ej. Forzar reglas de integridad de los datos complejas y que no se pueden definir declarando. Restricciones de Integridad. Realizar cambios en la base de datos de forma transparente al usuario. Generar automáticamente valores de columnas derivadas en base a un valor proporcionado por unasentencia INSERT o UPDATE. Sincronizar el mantenimiento de tablas duplicadas que están localizadas en nodos distintos de unabase de datos distribuida. Generar restricciones de acuerdo a los requerimientos. Los Triggers frente a las restricciones de integridad, no se aplican a los datos almacenados en la base dedatos antes de su definición; sólo se aplican cuando, una vez creados, se ejecutan comandos que manipulanlas tablas sobre las que están definidos. Ejemplos de Triggers En Oracle  Según el criterio de evaluación, sumatoria del peso de las notas no debe pasar el 100%. CREATEORREPLACETRIGGER t_criterio beforeinsertoncriterio_eval foreachrow declare item_id varchar2(10); ptotal_peso numeric(12,2); begin select lpad( to_number(coalesce(max(criterio_eval_id),'0'),'9999')+1,4,'0')into item_id fromcriterio_eval; select NVL(sum(peso),0)into ptotal_peso fromcriterio_evalwhere CARGA_CURSO_ID=:new.CARGA_CURSO_ID; if ptotal_peso+:new.peso<=100then :new.criterio_eval_id:=item_id; endif; if ptotal_peso+:new.peso>100then Raise_application_error(-20201,'EXCEDE EL PESO NORMAL DE 100%'); endif;
  • 12. end t_criterio;  El siguiente trigger a partir de la nota ingresada nos indica si la nota es aprobatoria o no en el rango entre 0 y 20, en caso contrario nos dice que la nota no es válida. Este evento se da en la tabla EVALU_CRITERIOal momento de registrarlo. CREATEORREPLACETRIGGERmatricula.EVALU_CRITERIObeforeinsertonEVALU_CRITER IO REFERENCINGNEWASNEWOLDASOLD FOREACHROW declare nota numeric(12,2); idd varchar2(10); BEGIN nota:=:new.NOTA_CRITERIO; select lpad( to_number(coalesce(max(EVALU_CRITERIO_ID),'0'),'9999999')+1,7,'0')into idd frommatricula.EVALU_CRITERIO; if nota>20then Raise_application_error(-20201,'Nota no válida'); endif; if nota<0then Raise_application_error(-20201,'Nota no válida'); endif; if nota>12then dbms_output.put_line('nota aprobatoria'); :new.EVALU_CRITERIO_ID:=idd; :new.CONDICION:='Nota aprobatoria'; endif; if nota<13then dbms_output.put_line('nota desaprobatoria'); :new.EVALU_CRITERIO_ID:=idd; :new.CONDICION:='Nota desaprobatoria'; endif; endEVALU_CRITERIO;
  • 13.  El siguiente trigger a partir de la fecha de nacimiento de la persona me dice en qué etapa de su vida se encuentra, ya sea: niño, adolescente, joven, adultojoven, adulto, anciano y falleció. CREATEORREPLACETRIGGER"MATRICULA".personaid beforeinsertonpersona FOREACHROW declare x varchar2(10); y varchar2(10); z varchar2(10); edad integer; resultado varchar2(40); BEGIN SELECT TO_CHAR(SYSDATE,'YYYY')-TO_CHAR(:new.FECHA_NAC,'YYYY')into edad FROM dual; if edad>0and edad<=12then resultado:='Niño'; endif; if edad>12and edad<=16then resultado:='Adolescente'; endif; if edad>16and edad<=28then resultado:='Joven'; endif; if edad>28and edad<=40then resultado:='Adulto - Joven'; endif; if edad>40and edad<=60then resultado:='Adulto'; endif; if edad>60and edad<=80then resultado:='Anciano'; endif; if edad>80then resultado:='Ya falleció'; endif; x:=:new.PRIMER_NOMBRE; y:=:new.PRIMER_APELLIDO; z:=:new.SEGUNDO_APELLIDO; :NEW.persona_id:=substr(x,0,2)||substr(y,0,2)||substr(z,0,2); :new.condicion_edad:=edad||' - '||resultado; endpersona;
  • 14.  Al registrar un semestre académico, con la fecha el trigger indicará el semestre en que nos encontramos si es de enero a junio será (año-I) en caso contrario (año-II). CREATEORREPLACETRIGGER"MATRICULA".semestre_acad beforeinsertonmatricula foreachrow declare x varchar2(10); y varchar2(10); begin select to_char(sysdate,'mm')into x from dual; select to_char(sysdate,'yyyy')into y from dual; if x<07then :new.semestre:=y||'-I'; else :new.semestre:=y||'-II'; endif; end;  Tigger que genera llave principal de una tabla a partir del máximo. CREATEORREPLACETRIGGER"UPEU_BAZAR".bc_productoBEFOREINSERTONbc_product o REFERENCINGNEWASNEWOLDASOLD FOREACHROW BEGIN select lpad( to_number (coalesce(max(id_producto),'0'),'9999999999')+1,10,'0')into :new.id_producto frombc_producto; ENDbc_producto;
  • 15.  Crear la tabla de empleados con las siguientes restricciones: Un empleado no puede supervisar a más de dos empleados. El presupuesto total por departamento no puede ser superior a 1000. CREATETABLE"EMPLEADOS" ("IDEMPLEADO"NUMBER, "EMPLEADO"VARCHAR2(4000), "IDJEFE"NUMBER, "SALARIO"NUMBER(9,2), "DPTO"VARCHAR2(20), CONSTRAINT"EMPLEADOS_PK"PRIMARYKEY("IDEMPLEADO")ENABLE, CONSTRAINT"EMPLEADOS_CON"FOREIGNKEY("IDJEFE") REFERENCES"EMPLEADOS"("IDEMPLEADO")ONDELETECASCADEENABLE) / CREATEORREPLACEPACKAGE"RI_EMP"as NewEmp Empleados%rowtype; end; / CREATEORREPLACETRIGGER"EMPLEADOS_JEFES_AFTER" AFTERdeleteorinsertorupdateon"EMPLEADOS" DECLARE V_Supervisados INTEGER; VMsg VARCHAR(50); begin SELECT count(*)INTO V_Supervisados FROMempleados WHERE IdJefe = RI_Emp.Newemp.IdJefe; IFINSERTINGTHEN VMsg:=CONCAT('Insertando :',RI_Emp.Newemp.IdEmpleado); ELSE IFUPDATINGTHEN VMsg:=CONCAT('Modificando :',RI_Emp.Newemp.IdEmpleado); ELSE VMsg:=CONCAT('Borrando :',RI_Emp.Newemp.IdEmpleado); DBMS_OUTPUT.PUT_LINE(Vmsg); ENDIF; ENDIF; IF V_Supervisados>2THEN RAISE_APPLICATION_ERROR(-20001,VMsg||' Error cuenta supervisados de: ' ||RI_Emp.Newemp.IdJefe); ENDIF; end; / ALTERTRIGGER"EMPLEADOS_JEFES_AFTER"ENABLE / CREATEORREPLACETRIGGER"Empleados_Before" BEFOREdeleteorinsertorupdateon"EMPLEADOS" foreachrow begin
  • 16. RI_Emp.Newemp.IdEmpleado :=:new.IdEmpleado; RI_Emp.Newemp.IdJefe :=:new.IdJefe; RI_Emp.Newemp.Dpto :=:new.Dpto; RI_Emp.Newemp.Salario :=:new.Salario; end; / ALTERTRIGGER"Empleados_Before"ENABLE / CREATEORREPLACETRIGGER"PRESUPUESTO_DPTOS" AFTERinsertorupdateon"EMPLEADOS" DECLARE Vpresupuesto Empleados.salario%type; Vmsg VARCHAR(50)DEFAULT'Presupuesto excedido para Dpto: '; begin SELECT SUM(salario)INTO VPresupuesto FROMEmpleados WHERE Dpto=RI_Emp.Newemp.Dpto; Vmsg:= CONCAT(Vmsg,RI_Emp.Newemp.Dpto); IF Vpresupuesto >1000THEN RAISE_APPLICATION_ERROR(-20001,Vmsg); ENDIF; end; / ALTERTRIGGER"PRESUPUESTO_DPTOS"ENABLE
  • 17. En PostgreSQL  Tigger que genera llave principal de una tabla en PostgreSQL a partir del máximo. CREATEORREPLACEFUNCTION comun.persona() RETURNS TRIGGERAS' BEGIN NEW.id_persona :=(select ltrim(lpad(to_char(coalesce(max(to_number(id_persona,''99999999'')),' '0'')+1,''00000000''),9,''0'')) from comun.persona); new.fecha_reg:= to_char(now(),''dd/mm/yyyy HH:MI:SS pm''); new.estado:=''1''; IFNEW.id_persona ISNULL THEN RAISEEXCEPTION''comun cannot be NULLvalue''; ENDIF; RETURNNEW; END;' LANGUAGE'plpgsql'; ALTERFUNCTION comun.persona() OWNER TO postgres; CREATETRIGGER tg_persona BEFOREINSERTON comun.persona FOREACHROWEXECUTEPROCEDURE comun.persona(); CREATEORREPLACEFUNCTION seguridad.modulo() RETURNS TRIGGERAS'BEGIN NEW.id_modulo :=(select ltrim(lpad(to_char(coalesce(max(to_number(id_modulo,''99'')),''0'')+1, ''00''),3,''0''))from seguridad.modulo); new.fecha_reg:= now(); new.hora_reg:= to_char(now(),''HH:MI:SS pm''); IFNEW.id_modulo ISNULL THEN RAISEEXCEPTION''seguridad cannot be NULLvalue''; ENDIF; RETURNNEW; END;' LANGUAGE'plpgsql'; ALTERFUNCTION seguridad.modulo() OWNER TO postgres; CREATETRIGGER tg_modulo BEFOREINSERTON seguridad.modulo FOREACHROWEXECUTEPROCEDURE seguridad.modulo(); CREATEORREPLACEFUNCTION seguridad.opcion() RETURNS TRIGGERAS' BEGIN NEW.id_opcion :=(select ltrim(lpad(to_char(coalesce(max(to_number(id_opcion,''999'')),''0'')+1 ,''000''),4,''0''))from seguridad.opcion); new.fecha_reg:= now();
  • 18. new.hora_reg:= to_char(now(),''HH:MI:SS pm''); IFNEW.id_opcion ISNULL THEN RAISEEXCEPTION''seguridad cannot be NULLvalue''; ENDIF;RETURNNEW;END;' LANGUAGE'plpgsql'; ALTERFUNCTION seguridad.opcion() OWNER TO postgres; CREATETRIGGER tg_opcion BEFOREINSERTON seguridad.opcion FOREACHROWEXECUTEPROCEDURE seguridad.opcion(); 4. Funciones PL/SQL  Una función es un bloque nombrado PL/SQL que devuelve un valor.  Una función puede estar almacenada en la B.D., como objeto de la B.D., para repetidas ejecuciones.  Una función puede ser llamada como parte de una expresión.  Se usa también en cualquier consulta para sacar datos de otras tablas sin usar sus relaciones, sólo filtrando el dato requerido.  Para ejecutar funciones de consulta solamente se usa como tabla en Oracle a Dual (select nombres(id_persona) from dual). Desde dónde llamarlas:  Como columna de un SELECT.  Condiciones en cláusulas WHERE y HAVING.  Cláusulas ORDER BY y GROUP BY.  Cláusula VALUES de un comando INSERT.  Cláusula SET de un comando UPDATE.  Función que evalúa de acuerdo al parámetro ingresado si accede o no al crédito, si es „1‟ evaluará en su propia tabla, sino en la tabla cm_tipo_persona. CREATEORREPLACEFUNCTION acceso_credito(pid_persona invarchar2)RETURNvarcharIS pcred_tb varchar2(1); pcred varchar2(2); ptipo_persona varchar2(22); BEGIN select cred_tb into pcred_tb fromcm_personawhereid_persona=pid_persona; if pcred_tb='1'then SELECT cred into pcred fromcm_personawhere id_persona=pid_persona; endif; if pcred_tb='2'then select id_tipo_persona into ptipo_persona fromcm_personawhere id_persona=pid_persona; select cred into pcred fromcm_tipo_personawhere
  • 19. id_tipo_persona=ptipo_persona; endif; RETURN(pcred); END; Nota: ésta función está implementada en la Base de datos de Bazar del Sistema del cafetín de la UPeU Tarapoto Función que saca los nombres de un cliente al ingresar su código de identificación. CREATEORREPLACEFUNCTION nombre_cliente(pid_cliente INVARCHAR2)RETURNVARCHAR2IS pnombre_cliente VARCHAR2(200); BEGIN SELECT Initcap(nombres)||' '||Initcap(apepat)||' '||Initcap(apemat)||' '||Initcap(razon_social)into pnombre_cliente FROMcm_personaWHERE id_persona = pid_cliente; RETURN(pnombre_cliente); END;  Función que saca la descripción de un producto. CREATEORREPLACEFUNCTIONnombre_producto_venta(pid_producto INVARCHAR2)RETURNVARCHAR2IS pnombre_producto_venta VARCHAR2(200); BEGIN select pro.NOMBRE_producto||' '||pro.CONC||' '||uni.NOMBRE_UNIDAD_MEDIDA into pnombre_producto_venta frombc_producto pro,bc_unidad_medida uni where pro.ID_UNIDAD_MEDIDA=uni.ID_UNIDAD_MEDIDA and id_producto=pid_producto; RETURN(pnombre_producto_venta); END;  Función que saca el total de entradas de un producto por mes. CREATEORREPLACEFUNCTIONsuma_ent_prod_tot_mes(pid_local invarchar2, pid_producto invarchar2,pid_mes invarchar2)RETURNnumberIS suma_TOT_entradas number(12,2); BEGIN select decode(sum(det.CANTIDAD_XMAY*det.COSTO),'',0,sum(det.CANTIDAD_XMAY*de t.COSTO))into suma_TOT_entradas frombc_entrada en,bc_entrada_detalle det where en.id_entrada=det.id_entrada and en.id_local=pid_local and det.id_producto=pid_producto and to_char(en.fecha_reg,'mm/yyyy')like'%'||pid_mes||'%'; RETURN(suma_TOT_entradas); END;
  • 20.  Función que inserta datos a una tabla. CREATEORREPLACEFUNCTION insertar_matricula(pmatricula_id INVARCHAR2, pfecha INDATE, palumno_id INVARCHAR2, pcod_matricula INVARCHAR2, psemestre INVARCHAR2 ) RETURNvarchar2 is BEGIN insertintomatricula(MATRICULA_ID, FECHA, ALUMNO_ID, COD_MATRICULA, SEMESTRE) values(pmatricula_id,to_date(pfecha,'dd/mm/yyyy'),palumno_id,pc od_matricula,psemestre); return pmatricula_id; end insertar_matricula; 5. Procedimientos almacenados Un procedimiento almacenado es un conjunto de instrucciones a las que se les da un nombre, se almacena en la base de datos en la cual trabaja el usuario. Permiten agrupar y organizar tareas repetitivas que ayudan al usuario, en confiabilidad, seguridad, y sobre todo protección de datos cuando trabajamos desde el lado del servidor. Un procedimiento almacenado puede contener cualquier cantidad y tipo de instrucciones DML (para la manipulación de datos, como insert, update, delete), no instrucciones DDL (de definición de datos, como create..., drop... alter...).  Procedimiento para registrar venta: Busca el Boucher vigente a partir de la fecha actual con el código del movimiento. Además verifica si hay stock suficiente de un producto en un local determinado, además genera un código para la venta y le asigna un número correlativo al movimiento diario. CREATEORREPLACEPROCEDUREregistrar_venta (pidcliente INVARCHAR2, pidproducto INVARCHAR2, pcantidad INNUMBER, pid_local INVARCHAR2, pidusuario INVARCHAR2, pid_forma_pago INVARCHAR2, p_precio innumber) IS pidsalida varchar(25); pnro varchar2(10); ptipo_cliente varchar(20);
  • 21. pid_movimiento varchar(5); pid_movimiento_voucher varchar(15); pstock number; BEGIN select id_movimiento into pid_movimiento frombc_movimiento_voucherwhere id_movimiento='S01'and to_char(fecha,'dd/mm/yyyy')=to_char(sysdate,'dd/mm/yyyy')AND ESTADO='1'; select id_movimiento_voucher into pid_movimiento_voucher frombc_movimiento_voucherwhere id_movimiento='S01'and to_char(fecha,'dd/mm/yyyy')=to_char(sysdate,'dd/mm/yyyy')AND ESTADO='1'; select lpad( to_number (coalesce(max(nro),'0'),'9999')+1,4,'0')into pnro frombc_salidawhere id_movimiento=pid_movimiento and id_movimiento_voucher=pid_movimiento_voucher; select stock into pstock frombc_mostradorwhere id_producto = pidproducto; select id_tipo_persona into ptipo_cliente fromcm_personawhere id_persona = pidcliente; select to_char(sysdate,'YYYYMMDD')||'SAL'||to_char(sysdate,'HHMISSMMPM')into pidsalida FROM DUAL; if pstock >= pcantidad then insertintobc_salidavalues(pidsalida, pnro, sysdate, pidcliente,0,0,0,0, pid_local, pidusuario , pid_movimiento, pid_movimiento_voucher,ptipo_cliente,pid_forma_pago,'',NULL,NULL,'0'); commit; insertintobc_salida_detallevalues(pidsalida, pid_local, pidproducto, pcantidad, p_precio,0); commit; updatebc_mostradorset stock = pstock-pcantidad where id_producto = pidproducto; commit; updatebc_salidaset sub_total = p_precio*pcantidad where id_salida = pidsalida; commit; beginsalida_total(pidsalida);end; commit; endif; if pstock < pcantidad then RAISE_APPLICATION_ERROR(-20010,'No hay sufiecinte sotck. Stock actual:'||pstock||', stock requerido:'||pcantidad); endif; ENDregistrar_venta;
  • 22.  Procedimiento para registrar salida: Este procedimiento hace el trabajo anterior y es más, saca el costo y precio del producto. También valida el precio de venta de un producto a partir la configuración del tipo de cliente. CREATEORREPLACEPROCEDUREregistrar_venta (pidcliente INVARCHAR2, pidproducto INVARCHAR2, pcantidad INNUMBER, pid_local INVARCHAR2, pidusuario INVARCHAR2, pid_forma_pago INVARCHAR2, p_precio innumber) IS pidsalida varchar(25); pnro varchar2(10); ptipo_cliente varchar(20); pid_movimiento varchar(5); pid_movimiento_voucher varchar(15); pstock number; BEGIN select id_movimiento into pid_movimiento frombc_movimiento_voucherwhere id_movimiento='S01'and to_char(fecha,'dd/mm/yyyy')=to_char(sysdate,'dd/mm/yyyy')AND ESTADO='1'; select id_movimiento_voucher into pid_movimiento_voucher frombc_movimiento_voucherwhere id_movimiento='S01'and to_char(fecha,'dd/mm/yyyy')=to_char(sysdate,'dd/mm/yyyy')AND ESTADO='1'; select lpad( to_number (coalesce(max(nro),'0'),'9999')+1,4,'0')into pnro frombc_salidawhere id_movimiento=pid_movimiento and id_movimiento_voucher=pid_movimiento_voucher; select stock into pstock frombc_mostradorwhere id_producto = pidproducto; select id_tipo_persona into ptipo_cliente fromcm_personawhere id_persona = pidcliente; select to_char(sysdate,'YYYYMMDD')||'SAL'||to_char(sysdate,'HHMISSMMPM')into pidsalida FROM DUAL; if pstock >= pcantidad then insertintobc_salidavalues(pidsalida, pnro, sysdate, pidcliente,0,0,0,0, pid_local, pidusuario , pid_movimiento, pid_movimiento_voucher,ptipo_cliente,pid_forma_pago,'',NULL,NULL,'0'); commit; insertintobc_salida_detallevalues(pidsalida, pid_local, pidproducto, pcantidad, p_precio,0);commit; updatebc_mostradorset stock = pstock-pcantidad where id_producto = pidproducto; commit; updatebc_salidaset sub_total = p_precio*pcantidad where id_salida = pidsalida; commit; beginsalida_total(pidsalida);end;commit; endif; if pstock < pcantidad then RAISE_APPLICATION_ERROR(-20010,'No hay sufiecinte sotck. Stock actual:'||pstock||', stock requerido:'||pcantidad); endif;
  • 23. ENDregistrar_venta;  Añadir un nuevo producto a una venta. CREATEORREPLACEPROCEDUREregistrar_salida_detalle (pid_salida INVARCHAR2,pid_local INVARCHAR2, pid_producto INVARCHAR2, pcantidad INNUMBER) IS p_precio number; pstock number; BEGIN select stock into pstock frombc_mostradorwhere id_producto = pid_producto; select precio into p_precio frombc_productowhere id_producto = pid_producto; if pstock >= pcantidad then insertintobc_salida_detallevalues(pid_salida, pid_local, pid_producto, pcantidad, p_precio,0); commit; updatebc_mostradorset stock = stock-pcantidad where id_producto = pid_producto; commit; beginsalida_total(pid_salida);end; commit; endif; if pstock < pcantidad then RAISE_APPLICATION_ERROR (-20010, 'No hay sufiecinte sotck. Stock actual:'||pstock||', stock requerido:'||pcantidad); rollback; endif; ENDregistrar_salida_detalle;  Procedimiento para anular una salida Este procedimiento verifica el estado de una salida, si el estado es “1” lo anula y le registra en una nueva tabla. También restaura los stocks de los productos CREATEORREPLACEPROCEDUREregistrar_anular_salida(pid_salida INVARCHAR2, pid_usuario INVARCHAR2, pmotivo inVARCHAR2) is contador integer; ptotal number(12,2); BEGIN select count(*)into contador frombc_salidawhere id_salida=pid_salida and terminada='1'; select total into ptotal frombc_salidawhere id_salida=pid_salida and terminada='1'; if contador=1then insertintobc_salida_anularvalues(pid_salida,pid_usuario,pmotivo,sysdat e, ptotal);commit; updatebc_salidaset terminada='A'where id_salida=pid_salida;commit; updatebcja_movimientoset extornado='1'where nro=pid_salida;
  • 24. commit; beginrestaurarStockSalida(pid_salida);end;commit; endif; ENDregistrar_anular_salida;  Calcular el total de una venta CREATEORREPLACEPROCEDUREsalida_total(pid_salida INVARCHAR2) is psub_total number; BEGIN select decode(sum(CANTIDAD*PRECIO),'',0,sum(CANTIDAD*PRECIO))into psub_total frombc_salida_detallewhere id_salida=pid_salida; if psub_total=0then updatebc_salidaset sub_total=0, igv=0, total=0where id_salida=pid_salida; COMMIT; endif; if psub_total>0then updatebc_salidaset sub_total=psub_total, total=psub_total+igv where id_salida=pid_salida; COMMIT; endif; ENDsalida_total; Cursores Un cursor es un conjunto de registros devuelto por una instrucción SQL. Técnicamente los cursores son fragmentos de memoria que reservados para procesar los resultados de una consulta SELECT.  Crear comprobante CREATEORREPLACEPROCEDUREREGISTRAR_SALIDA_CONTADO(pidsalida INVARCHAR2, pidusuario INVARCHAR2) IS pidcronograma varchar2(25); pidmovimiento varchar2(25); pid_persona varchar2(20); ptotal number(12,2); pid_local varchar2(10); pid_forma_pago varchar2(10); pid_comprobante_config varchar2(10); pnro_comprobante integer; pid_vou_det integer;pnro_mov_sal integer; pmonto_imprimir number(12,2); pid_producto VARCHAR2(30); pcantidad number; pprecio number; pdescuento number; CURSOR cursorlistasalidaproductos ISselect id_producto,
  • 25. id_local, cantidad,precio,descuento frombc_salida_detallewhere id_salida=pidsalida; BEGIN select total into ptotal fromBC_SALIDAwhere id_salida = pidsalida and terminada='0'; select monto_imprimir into pmonto_imprimir fromBC_MOVIMIENTO_VOUCHER where id_movimiento=(select id_movimiento frombc_salidawhere id_salida=pidsalida) and id_movimiento_voucher=(select id_movimiento_voucher frombc_salidawhere id_salida=pidsalida); if ptotal>=pmonto_imprimir then select to_char(sysdate,'YYYYMMDD')||'MOV'||to_char(sysdate,'HHMISSMMPM')into pidmovimiento FROM DUAL; select id_local into pid_local fromBC_SALIDAwhere id_salida = pidsalida; select id_cliente into pid_persona fromBC_SALIDAwhere id_salida = pidsalida; select id_forma_pago into pid_forma_pago fromBC_SALIDAwhere id_salida = pidsalida; select max(id_vou_det)into pid_vou_det fromBCJA_VOUCHER_DETALLEwhere ID_VOUCHER='VOU01'and to_char(fecha,'dd/mm/yyyy')=to_char(sysdate,'dd/mm/yyyy'); select decode(max(nro_mov_sal),'',1,max(nro_mov_sal)+1)into pnro_mov_sal fromBCJA_MOVIMIENTOWHERE to_char(fecha_mov,'yyyy')=to_char(sysdate,'yyyy'); insertintobcja_movimientovalues(pidmovimiento,'CEfec', pid_persona,'VENT',pidsalida,ptotal,'Cobro de venta al contado efectivo','',sysdate, pidusuario,pid_local,'0',pid_vou_det,pnro_mov_sal); commit; -- Proceso para crear el comprobante Ticket select C.ID_COMPROBANTE_CONFIG into pid_comprobante_config fromBC_ASIGNAR_CONFIG A,BC_COMPROBANTE_CONFIG C WHERE A.ID_COMPROBANTE_CONFIG=C.ID_COMPROBANTE_CONFIG AND A.ID_USUARIO=pidusuario AND A.ESTADO='1'AND C.ESTADO='1'; select max(CONT_MAX)+1into pnro_comprobante FROMBC_COMPROBANTE_CONFIGWHERE ID_COMPROBANTE_CONFIG=pid_comprobante_config; UPDATEBC_SALIDASET id_comprobante_config=pid_comprobante_config,nro_comprobante=pnro_compr obante,fecha_comprobante=sysdate,TERMINADA='1'where id_salida=pidsalida; updateBC_COMPROBANTE_CONFIGset CONT_MAX=pnro_comprobante WHERE ID_COMPROBANTE_CONFIG=pid_comprobante_config; commit; endif; if ptotal<pmonto_imprimir then select id_cliente into pid_persona fromBC_SALIDAwhere id_salida = pidsalida;
  • 26. OPEN cursorlistasalidaproductos;FETCH cursorlistasalidaproductos INTO pid_producto, pid_local, pcantidad,pprecio,pdescuento; WHILE cursorlistasalidaproductos%FOUNDLOOP insertintobc_temporalvalues('',pid_local,pid_producto,pcantidad,p precio,pdescuento, sysdate,pid_persona,pidusuario); COMMIT; FETCH cursorlistasalidaproductos INTO pid_producto, pid_local, pcantidad,pprecio,pdescuento; ENDLOOP; CLOSE cursorlistasalidaproductos; COMMIT; deletefrombc_salida_detallewhere id_salida=pidsalida; commit; deletefrombc_salidawhere id_salida=pidsalida; commit; endif; ENDREGISTRAR_SALIDA_CONTADO;  Eliminar venta. Éste procedimiento tiene un cursos que busca los detalles de la venta, seguidamente en un bucle recupera los stock y elimina la venta por si id. CREATEORREPLACEPROCEDURE anularSalida(pid_salida INVARCHAR2) IS pid_producto VARCHAR2(30); pid_local VARCHAR2(30); pcantidad number; CURSOR cursorlistasalidaproductos ISselect id_producto, id_local, cantidad frombc_salida_detallewhere id_salida=pid_salida; BEGIN OPEN cursorlistasalidaproductos; FETCH cursorlistasalidaproductos INTO pid_producto, pid_local, pcantidad; WHILE cursorlistasalidaproductos%FOUNDLOOP updatebc_mostradorset stock=stock+pcantidad where id_local=pid_local and id_producto=pid_producto; COMMIT; FETCH cursorlistasalidaproductos INTO pid_producto, pid_local, pcantidad; ENDLOOP; CLOSE cursorlistasalidaproductos; COMMIT; deletefrombc_salida_detallewhere id_salida=pid_salida; commit; deletefrombc_salidawhere id_salida=pid_salida; commit; END anularSalida;
  • 27.  Cargar stock al almacén Por medio de este procedimiento sumamos al stock los productos que ingresan. CREATEORREPLACEPROCEDURE cargar_produ_ent_propia(pidentrada INVARCHAR2, pidlocal INVARCHAR2) IS pid_producto VARCHAR2(30); ptotal_unidades number; CURSOR cursorlistaentradaproductos ISselect edt.ID_PRODUCTO, edt.CANTIDAD_XMAY*edt.CANTIDAD_XMEN total_unidades frombc_entrada_detalle edt,bc_mostrador mos,bc_producto pro where edt.ID_PRODUCTO=mos.ID_PRODUCTO and mos.ID_PRODUCTO=pro.ID_PRODUCTO and edt.ID_ENTRADA=pidentrada; BEGIN OPEN cursorlistaentradaproductos; FETCH cursorlistaentradaproductos INTO pid_producto, ptotal_unidades; WHILE cursorlistaentradaproductos%FOUNDLOOP updatebc_mostradorset stock=stock+ptotal_unidades where id_local=pidlocal and id_producto=pid_producto; COMMIT; FETCH cursorlistaentradaproductos INTO pid_producto, ptotal_unidades; ENDLOOP; CLOSE cursorlistaentradaproductos; COMMIT; END cargar_produ_ent_propia;  Restaurar stock. Este procedimiento restaura los stock de los productos por venta con solamente filtrando el id (llave principal) de la venta. CREATEORREPLACEPROCEDURE restaurarStockSalida(pid_salida INVARCHAR2) IS pid_producto VARCHAR2(30); pid_local VARCHAR2(30); pcantidad number; -- Este procedimieno restaura los stock, se utiliza en las anulaciones de los comprobantes CURSOR cursorlistasalidaproductos ISselect id_producto, id_local, cantidad frombc_salida_detallewhere id_salida=pid_salida; BEGIN OPEN cursorlistasalidaproductos; FETCH cursorlistasalidaproductos INTO pid_producto, pid_local, pcantidad; WHILE cursorlistasalidaproductos%FOUNDLOOP updatebc_mostradorset stock=stock+pcantidad where id_local=pid_local and id_producto=pid_producto; COMMIT;
  • 28. FETCH cursorlistasalidaproductos INTO pid_producto, pid_local, pcantidad; ENDLOOP; CLOSE cursorlistasalidaproductos; COMMIT; END restaurarStockSalida; 6. Vistas materializadas Objeto de base de datos que almacena los resultados de una consulta. Una vista materializada se define como una vista común, pero en lugar de almacenar la definición de la vista, almacena el resultado de la consulta, es decir, la materializa, como un objeto persistente en la base de datos. Evita realizar cálculos que requieren gran tiempo de ejecución en el momento de gran tiempo de ejecución en el momento deejecución de la consulta.  Vista materializada de los datos de la persona creatematerializedviewdatos_personaas select Initcap(p.NOMBRES)||' '||Initcap(p.APEPAT)||' '||Initcap(p.APEMAT) NOMBRES, D.NOMBRE_DISTRITO, TP.NOMBRE_TIPO_PERSONA, decode(acceso_credito(p.id_persona),'1','YES','NOT') acceso_credito fromcm_persona p, cm_distrito d, cm_tipo_persona tp where tp.id_tipo_persona=p.id_tipo_persona and p.ID_DISTRITO=d.ID_DISTRITO orderby p.nombre;  Vista materializada de los datos de la persona, que se actualiza cada 7 días creatematerializedview datos_persona2 REFRESHcompleteNEXT sysdate +7as select Initcap(p.NOMBRES)||' '||Initcap(p.APEPAT)||' '||Initcap(p.APEMAT) NOMBRES, D.NOMBRE_DISTRITO, TP.NOMBRE_TIPO_PERSONA, decode(acceso_credito(p.id_persona),'1','YES','NOT') acceso_credito fromcm_persona p, cm_distrito d, cm_tipo_persona tp where tp.id_tipo_persona=p.id_tipo_persona and p.ID_DISTRITO=d.ID_DISTRITO orderby p.nombres Para llamar a una vista se trata como a una tabla más. select*fromdatos_persona2; 7. Secuencias
  • 29. Una secuencia (sequence) se emplea para generar valores enteros secuenciales únicos y asignárselos a campos numéricos; se utilizan generalmente para las claves primarias de las tablas garantizando que sus valores no se repitan. Una secuencia es una tabla con un campo numérico en el cual se almacena un valor y cada vez que se consulta, se incrementa tal valor para la próxima consulta. Creación de secuencias CREATESEQUENCE UPEU_BAZAR.SEC_PERSONA STARTWITH0 INCREMENTBY1 MINVALUE0 NOCACHE NOCYCLE NOORDER Uso de la secuencia. insertintoCM_PERSONAvalues (SEC_PERSONA.nextval,'pRIMER REGIS'); 8. Jobs Los Jobs sirven para programar tareas que se ejecuten automáticamente en la base de datos. Para ello se tiene que indicar la fecha y hora de la primera ejecución, qué tareas va a realizar e indicar el tiempo que se va a repetir la tarea. Una de las principales ventajas es que nos ahorran trabajo porque el servidor de base de datos lo hace automáticamente.  Job que ejecuta un procedimiento cada 1 hora (60 minutos). DECLARE X NUMBER; BEGIN SYS.DBMS_JOB.SUBMIT ( job => X ,what =>'BEGIN guardar_saldos_diarios_hoy; END;' ,next_date => to_date('27/11/2013 13:58:46','dd/mm/yyyy hh24:mi:ss') ,interval=>'SYSDATE + 60/1440' ,no_parse =>TRUE ); SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x)); END;
  • 30.  Job que refresca una vista materializada cada 7 días DECLARE X NUMBER; BEGIN SYS.DBMS_JOB.SUBMIT ( job => X ,what=>'dbms_refresh.refresh(''"UPEU_BAZAR"."DATOS_PERSONA2"'');' ,next_date => to_date('04/12/2013 12:44:00','dd/mm/yyyy hh24:mi:ss') ,interval=>'sysdate + 7 ' ,no_parse =>TRUE ); SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x)); END; 9. DB Links Un Database Link (DBLink) en Oracle es un tipo de objeto que permite realizar una conexión desde una base de datos a otra. Su principal objetivo es ocultar el detalle de los parámetros de conexión necesarios, facilitándonos un sencillo acceso a los recursos disponibles en otras bases de datos, independientemente de que estas se encuentren instaladas en el mismo servidor o no. CREATEPUBLICDATABASELINK UPS_DBLINK CONNECTTO UPEU_SEGURIDAD IDENTIFIEDBY UPEU_SEGURIDAD USING '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST =192.168.60.20)(PORT = 1521)) (CONNECT_DATA = (SID = orcl)))' Para hacer la consulta se hace de ésta forma: SELECT*FROM SG_USUARIO@UPS_DBLINK 10. Ejecutar función en java
  • 31. public CMdistrito agregarDistrito222(CMdistrito dis) throws SQLException { boolean paso_insert_per = false; String result = ""; try { Class.forName("oracle.jdbc.driver.OracleDriver"); jn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl" , "upeu_bazar", "upeu_bazar"); CallableStatement val = jn.prepareCall("{?=call insertar_distrito(?)}"); // Se indica que el primer interrogante es de salida. val.registerOutParameter(1, Types.VARCHAR); // Se pasa un parámetro en el segundo interrogante. val.setString(2, dis.getNombre_distrito().trim()); // Se hace la llamada a la función. val.execute(); // Se recoge el resultado del primer interrogante. result = val.getString(1); jn.commit(); jn.close(); paso_insert_per = true; CMdistrito di = new CMdistrito(); di.setId_distrito(result); return di; } catch (Exception e) { String MError = e.getMessage(); System.out.println("Error al ejecutar la funcion " + MError); jn.rollback(); jn.close(); paso_insert_per = false; CMdistrito di = new CMdistrito(); di.setId_distrito("Error al ejecutar la funcion " + MError); return di; } } 11. Examen Final
  • 32. 1. Realizar un trigger que muestre el total de créditos multiplicado por s/ 120 si es adventista y si no por s/ 150, en la tabla matricula_alumno_curso(ojo crear nuevo atributo). CREATEORREPLACETRIGGERMATRICULA_ALUMNO_CURSObeforeinsertonMATRICULA_ALU MNO_CURSO foreachrow declare pid_religion varchar2(20); pcr numeric(12,2); begin SELECT C.CR into pcr FROMCARGA_CURSO CC,PLAN_ACAD_CURSO PA,CURSO C WHERE C.CURSO_ID=PA.CURSO_ID AND PA.PLAN_ACAD_CURSO_ID=CC.PLAN_ACAD_CURSO_ID AND CC.CARGA_CURSO_ID=:new.CARGA_CURSO_ID; SELECT PER.ID_RELIGION into pid_religion FROMPERSONA PER,ALUMNO A,MATRICULA M WHERE PER.PERSONA_ID=A.ALUMNO_ID AND A.ALUMNO_ID=M.ALUMNO_ID AND M.MATRICULA_ID=:new.MATRICULA_ID; if pid_religion='Adve'then :new.TOT_PAGAR:=pcr*120; else :new.TOT_PAGAR:=pcr*150; endif; end t_criterio; 2. Realizar una función que inserte en la tabla criterio_eval si es menor o igual a 100% del peso total de lo contrario un mensaje de error. CREATEORREPLACEFUNCTION proceso_criterio_eval (pcriterio_eval_id invarchar2, pcarga_curso_id invarchar2, pcriterio invarchar2, pdetalle invarchar2, ppeso innumber)RETURNvarchar2 is ptotal_peso numeric(12,2); BEGIN select NVL(sum(peso),0)into ptotal_peso fromcriterio_evalwhere CARGA_CURSO_ID=pcarga_curso_id; if ptotal_peso+ppeso<=100then insertintocriterio_eval(criterio_eval_id, carga_curso_id, criterio, detalle, peso) values(pcriterio_eval_id,pcarga_curso_id,pcriterio,pdetalle,ppes o); return(pcriterio_eval_id); else Raise_application_error(-20201,'EXCEDE EL PESO NORMAL DE
  • 33. 100%'); endif; end proceso_criterio_eval; 3. Realizar un procedimiento que haga el llamado a la función realizada si la operación ha sido realizado con éxito muestre un mensaje de ok y si no error. CREATEORREPLACEPROCEDURE ejecutar_funcion(pcriterio_eval_id invarchar2, pcarga_curso_id invarchar2, pcriterio invarchar2, pdetalle invarchar2, ppeso innumber) IS presultado varchar2(200); BEGIN presultado:=PROCESO_CRITERIO_EVAL(pcriterio_eval_id,pcarga_curs o_id,pcriterio,pdetalle,ppeso); if presultado!=pcriterio_eval_id then Raise_application_error(-20201,'***Error****'); endif; END ejecutar_funcion; 4. Realizar un cursor que matricule a todos los alumnos en el semestre seleccionado. CREATEORREPLACEPROCEDURE matricular_semestre(psemestre INVARCHAR2) IS palumno_id VARCHAR2(30); CURSOR cursor_lista_alumnos ISselect a.ALUMNO_ID fromalumno a where a.ALUMNO_ID notin(select m.ALUMNO_ID frommatricula m where m.semestre=psemestre); BEGIN OPEN cursor_lista_alumnos; FETCH cursor_lista_alumnos INTO palumno_id; WHILE cursor_lista_alumnos%FOUNDLOOP insertintomatricula(fecha, alumno_id,semestre)values(sysdate,palumno_id, psemestre); COMMIT; FETCH cursor_lista_alumnos INTO palumno_id; ENDLOOP; CLOSE cursor_lista_alumnos; COMMIT; END matricular_semestre; 5. Realizar un procedimiento que inserte, actualicé y elimine en la tabla carga periodo. CREATEORREPLACEPROCEDURE proceso_carga_periodo(pcarga_id invarchar2,
  • 34. pfecha_ini indate, pfecha_fin indate, psemestre invarchar2, pturno invarchar2, opcion integer) IS contador integer; BEGIN if opcion=1then-- insertar insertintocarga_periodo(carga_id, fecha_ini, fecha_fin, semestre, turno) values(pcarga_id, pfecha_ini, pfecha_fin, psemestre, pturno); commit; endif; if opcion=2then-- actualizar updatecarga_periodoset fecha_ini=pfecha_ini, fecha_fin=pfecha_fin, semestre=psemestre, turno=pturno where carga_id=pcarga_id; commit; endif; if opcion=3then-- eliminar select count(*)into contador fromCARGA_CURSOwhere carga_id=pcarga_id; if contador=0then deletefromcarga_periodowhere carga_id=pcarga_id; commit; else Raise_application_error(-20201,'NO PUEDE ELIMINAR ÉSTA CARGA PERIODO PORQUE SE ESTÁ USANDO'); endif; endif; END proceso_carga_periodo; Centro de Producciones Navegando CPN-TARAPOTO Persy.quiroz@upeu.edu.pe