miércoles, 29 de enero de 2014

pkg incidencias ex3

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;

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;