Está en la página 1de 7

Nombre de la Unidad de Aprendizaje: Programación de base de datos

Número de Evidencia: 3.1


Título de la Evidencia: Reporte de solución de un caso de construcción de
subprogramas de tipo STORE PROCEDURE y FUNCTION
Programa educativo: LICENCIATURA EN TECNOLOGIAS DE INFORMACION
Semestre: 3
Grupo: 31

Nombre del Docente: M.C. LAURA ALICIA HERNANDEZ MORENO


Nombre del Estudiante: Héctor Eduardo Colorado Doñez 1948385
López García Ángel Manuel 1945429
Miranda Carrillo Ariel Alejandro 2009216
Muñoz Gamez Mayte Lizzeth 1967539
Quiroa González Diego Alberto 2018996

San Nicolás de los Garza, ciudad universitaria a (06-11-2020)


Ejercicio 1
Realizar un PA que permita realizar búsquedas por ID en todas las tablas de la
base de datos de música. Por ejemplo, si el usuario pide buscar los datos de algún
artista o si busca los datos de un CD, etc., el PA debe permitir obtener dicha
información.

Código:
CREATE OR REPLACE PROCEDURE SP_ARTISTA_CONSULTAR_TODOS

( C_CURSOR OUT SYS_REFCURSOR,

P_IDARTISTA IN ARTISTA.IDARTISTA%TYPE,

P_IDCD IN CD.IDCD%TYPE,

P_IDTRACK IN TRACK.IDTRACK%TYPE,

P_IDGENERO IN GENERO.IDGENERO%TYPE,

P_IDTIPO IN TIPO.IDTIPO

IS

BEGIN

SELECT A.IDARTISTA, C.IDCD, T.IDTRACK, G.IDGENERO, T IDTIPO INTO ARTISTA_ID, CD_DC,


ID_TRACK, ID_GENERO, ID_TIPO

FROM ARTISTA A, CD C, CD_TRACK CT, TRACK T, GENERO G, TIPO TP

WHERE A.IDARTISTA = C.IDARTISTA AND C.IDGENERO = G.IDGENERO

END;
Ejercicio 2
Desarrolle un PA que aplique a un CD un descuento a su precio, indicar a través
de un parámetro el idCd a modificar. Si el precio que tiene actualmente es de 300
en adelante se le disminuye un 10%, si esta entre 200 y menos de 300 un 6% y
menos de 200 un 3%.

Código:
CREATE OR REPLACE PROCEDURE DESCUENTO_PRODUCTO_DISCO

(P_IDCD IN CD.IDCD%TYPE,

P_IDARTISTA IN ARTISTA.IDARTISTA%TYPE:=0,

P_FECHALANZAMIENTO IN CD.FECHALANZAMIENTO%TYPE:='',

P_NOMBREALBUM IN CD.NOMBREALBUM%TYPE:='',

P_PRECIO IN CD.PRECIO%TYPE:=0,

P_GENERO IN CD.IDGENERO%TYPE:=0,

P_EXIT OUT NUMBER

IS

D_COSTE NUMBER;

BEGIN

SELECT PRECIO INTO D_COSTE

FROM CD

WHERE IDCD=P_IDCD;

IF D_COSTE>300 THEN

UPDATE CD SET PRECIO=D_COSTE- (D_COSTE*0.10)

WHERE IDCD=P_IDCD;

P_EXIT:=D_COSTE;

ELSIF D_COSTE<200 THEN

UPDATE CD SET PRECIO=D_COSTE- (D_COSTE*0.03)

WHERE IDCD=P_IDCD;
P_EXIT:=D_COSTE;

ELSIF D_COSTE=200 AND D_COSTE<300 THEN

UPDATE CD SET PRECIO=D_COSTE- (D_COSTE*0.06)

WHERE IDCD=P_IDCD;

P_EXIT:=D_COSTE;

END IF;

END;
Procedimiento creado
Resultado del bloque anónimo
Ejercicio 3
Desarrolle una función que devuelva la palabra APROBADO si un artista
determinado(por ID) ha lanzado CDs en un rango de fecha determinado y si la
cantidad total de canciones es de cinco o más.

Código:
CREATE OR REPLACE FUNCTION FN_APROBADOS_CD

( P_IDARTISTA CD.IDARTISTA%TYPE,

P_FECHAUNO VARCHAR2,

P_FECHADOS VARCHAR2

RETURN VARCHAR2

IS

V_RESTA VARCHAR2(20):='APROBADO';

V_CONTADOR NUMBER(9):=0;

BEGIN

SELECT COUNT(T.IDTRACK) INTO V_CONTADOR FROM CD_TRACK CT, TRACK T, CD C

WHERE C.IDCD=CT.IDCD AND CT.IDTRACK=T.IDTRACK AND FECHALANZAMIENTO BETWEEN


TO_DATE(P_FECHAUNO, 'dd/mm/yy')

AND TO_DATE(P_FECHADOS,'dd/mm/yy') AND C.IDARTISTA=P_IDARTISTA;

IF V_CONTADOR<5 THEN

DBMS_OUTPUT.PUT_LINE('NO APROBADO');

ELSE

RETURN V_RESTA;

END IF;

END FN_APROBADOS_CD;

DECLARE

V_RESTA VARCHAR(20);

BEGIN

V_RESTA:=FN_APROBADOS_CD('1507459-1A','01/01/2009','31/12/2009');
DBMS_OUTPUT.PUT_LINE('EL ID REQUERIDO ES: '||V_RESTA);

END;
Procedimiento creado

Resultado del bloque anónimo

También podría gustarte