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;
MUNDO ORACLE
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;
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;
* 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;
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;
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;
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;
//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;
Suscribirse a:
Entradas (Atom)