CREATE OR REPLACE PACKAGE PKG_INCIDENCIAS IS
FUNCTION nueva_incidencia(pn_numincidencia IN INCIDENCIAS.NUMINCIDENCIA%TYPE,
pv_codpartido IN INCIDENCIAS.CODPARTIDO%TYPE,
pv_codjugador IN INCIDENCIAS.CODJUGADOR%TYPE,
pn_minuto IN INCIDENCIAS.MINUTO%TYPE,
pv_tipo IN INCIDENCIAS.TIPO%TYPE) RETURN BOOLEAN;
END PKG_INCIDENCIAS;
/
CREATE OR REPLACE PACKAGE BODY PKG_INCIDENCIAS IS
FUNCTION nueva_incidencia(pn_numincidencia IN INCIDENCIAS.NUMINCIDENCIA%TYPE,
pv_codpartido IN INCIDENCIAS.CODPARTIDO%TYPE,
pv_codjugador IN INCIDENCIAS.CODJUGADOR%TYPE,
pn_minuto IN INCIDENCIAS.MINUTO%TYPE,
pv_tipo IN INCIDENCIAS.TIPO%TYPE) RETURN BOOLEAN IS
aux PLS_INTEGER := 0;
BEGIN
SELECT count(*)
INTO aux
FROM incidencias i
WHERE i.numincidencia = pn_numincidencia;
IF aux <> 0 THEN
RETURN FALSE;
END IF;
SELECT count(*)
INTO aux
FROM jugadores j
WHERE j.codjugador = pv_codjugador;
IF aux = 0 THEN
RETURN FALSE;
END IF;
SELECT count(*)
INTO aux
FROM partidos p
WHERE p.codpartido = pv_codpartido;
IF aux = 0 THEN
RETURN FALSE;
END IF;
IF pn_minuto > 90 OR pn_minuto < 0 THEN
RETURN FALSE;
END IF;
INSERT
INTO incidencias(numincidencia, codpartido, codjugador, minuto, tipo)
VALUES (pn_numincidencia, pv_codpartido, pv_codjugador, pn_minuto, pv_tipo);
COMMIT;
RETURN TRUE;
EXCEPTION
WHEN OTHERS THEN
RETURN FALSE;
END;
END PKG_INCIDENCIAS;
BEGIN
IF PKG_INCIDENCIAS.nueva_incidencia(1, '1', '1', 101, 'tarjeta') THEN
DBMS_OUTPUT.PUT_LINE('INSERTADO');
ELSE
DBMS_OUTPUT.PUT_LINE('NO INSERTADO');
END IF;
END;
miércoles, 29 de enero de 2014
incidencias por minuto ex2
/*
*
*/
SET SERVEROUTPUT ON
CREATE OR REPLACE TYPE array_integer IS TABLE OF INTEGER;
CREATE OR REPLACE FUNCTION incidencias_por_minuto RETURN ARRAY_INTEGER IS
l_inc_by_min ARRAY_INTEGER;
BEGIN
l_inc_by_min := array_integer();
FOR I IN 1 .. 100 LOOP
l_inc_by_min.EXTEND;
l_inc_by_min(I) := 0;
END LOOP;
FOR I IN (SELECT * FROM incidencias) LOOP
l_inc_by_min(I.minuto) := l_inc_by_min(I.minuto) + 1;
END LOOP;
RETURN l_inc_by_min;
END incidencias_por_minuto;
/**Para mostrarlo **/ DECLARE
l_inc_by_min ARRAY_INTEGER;
BEGIN
l_inc_by_min := incidencias_por_minuto();
FOR I IN l_inc_by_min.FIRST .. l_inc_by_min.LAST LOOP
IF l_inc_by_min(I) <> 0 THEN
DBMS_OUTPUT.PUT_LINE('Minuto: ' || I || ' Numero de incidencias: ' || l_inc_by_min(I));
END IF;
END LOOP;
END;
*
*/
SET SERVEROUTPUT ON
CREATE OR REPLACE TYPE array_integer IS TABLE OF INTEGER;
CREATE OR REPLACE FUNCTION incidencias_por_minuto RETURN ARRAY_INTEGER IS
l_inc_by_min ARRAY_INTEGER;
BEGIN
l_inc_by_min := array_integer();
FOR I IN 1 .. 100 LOOP
l_inc_by_min.EXTEND;
l_inc_by_min(I) := 0;
END LOOP;
FOR I IN (SELECT * FROM incidencias) LOOP
l_inc_by_min(I.minuto) := l_inc_by_min(I.minuto) + 1;
END LOOP;
RETURN l_inc_by_min;
END incidencias_por_minuto;
/**Para mostrarlo **/ DECLARE
l_inc_by_min ARRAY_INTEGER;
BEGIN
l_inc_by_min := incidencias_por_minuto();
FOR I IN l_inc_by_min.FIRST .. l_inc_by_min.LAST LOOP
IF l_inc_by_min(I) <> 0 THEN
DBMS_OUTPUT.PUT_LINE('Minuto: ' || I || ' Numero de incidencias: ' || l_inc_by_min(I));
END IF;
END LOOP;
END;
Suscribirse a:
Entradas (Atom)