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;

lunes, 30 de diciembre de 2013

crear calendario ex1

/** 
 * Realizar un procedimiento que realize todas las combinaciones posibles de 
 * emfentamientos entre equipos, teniendo en cuenta que un equipo no se podrá 
 * enfrentar contra si mismo y cada enfrentamiento entre equipos difenrentes 
 * supone dos enfrentamientos uno como local y otro como visitante
 */


CREATE OR REPLACE PROCEDURE crear_calendario IS
BEGIN
  FOR I IN (SELECT * FROM equipos) LOOP
    FOR J IN (SELECT * FROM equipos) LOOP        
      IF I.codequipo != J.codequipo THEN
        DBMS_OUTPUT.PUT_LINE('Local: ' || I.codequipo || '. ' || I.nombre || ' *** Visitante: ' || J.codequipo || '. ' || J.nombre );
      END IF;
    END LOOP;
  END LOOP;
END crear_calendario;


/* Para mostrar */
SET SERVEROUTPUT ON

BEGIN
  crear_calendario();
END;

lunes, 9 de diciembre de 2013

proc jugadores_todos

CREATE OR REPLACE
PROCEDURE jugadores_todos IS

CURSOR c_jugadores IS 
  SELECT * FROM jugadores j;

lm_equipo VARCHAR2(400);

BEGIN
  FOR I IN c_jugadores LOOP
    
    SELECT nombre
    INTO lm_equipo
    FROM equipos e
    WHERE e.codequipo = I.codequipo;
    
    DBMS_OUTPUT.PUT_LINE('Nombre de jugador: '||I.nombre);
    DBMS_OUTPUT.PUT_LINE('Fecha Nacimiento '||I.fechanacimiento);
    DBMS_OUTPUT.PUT_LINE('Posicion: '||I.demarcacion);
    DBMS_OUTPUT.PUT_LINE('Equipo: '|| lm_equipo);
    DBMS_OUTPUT.PUT_LINE('');
    
  END LOOP;

END;


/** Para mostrar**/
EXECUTE jugadores_todos;

Strings Ejemplos

SUBSTR Obtiene una parte de una expresion, desde una posición de inicio hasta una determinada longitud.

SUBSTR(<expresion>, <posicion_ini>, <longitud> )

SELECT SUBSTR('HOLA MUNDO', 6, 5) -- Devuelve MUNDO
      FROM DUAL;




INSTR Busca una cadena de caracteres dentro de otra. Devuelve la posicion de la ocurrencia de la cadena buscada.

INSTR(<char>, <search_string>, <startpos>, <occurrence> )

SELECT INSTR('AQUI ES DONDE SE BUSCA', 'BUSCA', 1, 1 )
FROM DUAL;

domingo, 8 de diciembre de 2013

factorial

//Consigue el factorial de un numero 

CREATE OR REPLACE
FUNCTION factorial (obj IN PLS_INTEGER) RETURN PLS_INTEGER IS
num PLS_INTEGER := 1;
res PLS_INTEGER := 1;


BEGIN
  DBMS_OUTPUT.PUT_LINE('Numeros factoriales');
  WHILE res < obj LOOP
    res := res * num;
    DBMS_OUTPUT.PUT_LINE(num);
    num := num + 1;
  END LOOP;
  
  IF res = obj THEN
    DBMS_OUTPUT.PUT_LINE('El resultado es ');
    RETURN res;
  ELSE
    DBMS_OUTPUT.PUT_LINE('El resultado no dio exacto : ');
    RETURN res;
  END IF;

  
END;


/** Para mostrarlo**/
SET SERVEROUTPUT ON
DECLARE
  x PLS_INTEGER := 180;

BEGIN
DBMS_OUTPUT.PUT_LINE(factorial(x));

END;

ficha_jugador examen

// Crea una funcion, a la que introduciendo un codigo de jugador nos devuelva.
//Nombre: <nombre>  Fecha nac: <fechanac>  Posicion: <demarcacion>

create or replace 
FUNCTION ficha_jugador(cj IN jugadores.codjugador%TYPE) RETURN VARCHAR IS
ficha VARCHAR(3000);

BEGIN
  SELECT 'Nombre: ' || j.nombre ||'  Fecha nacimento: ' || j.fechanacimiento || '  Posicion: ' || j.demarcacion

  INTO ficha
  FROM jugadores j
  WHERE j.codjugador = cj;
  
  COMMIT;
  
  RETURN ficha;

  EXCEPTION
    WHEN NO_DATA_FOUND THEN

      RETURN 'No existe ese codigo de jugador';


END ficha_jugador;



/**  Para mostrarlo **/
DECLARE
x NUMBER := 2;

BEGIN
DBMS_OUTPUT.PUT_LINE(ficha_jugador(x));

END;