Sie sind auf Seite 1von 6

Profesor: Ezio Quispe Fernndez

Programa de Computacin e Informtica

BASE DE DATOS II
Cdigo: CC50 Ciclo Acadmico: V Ciclo Duracin: 20 semanas Horas semanales: 4 horas (02 Teora 02 Prctica) Cdigo curricular: CC19

TEMA

Gua 09: (2) Procedimientos almacenados

:: IDAT:: Programa Acadmico de Computacin e Informtica::

Profesor: Ezio Quispe Fernndez

Procedimientos Almacenados
La sintaxis de un procedimiento almacenado es la siguiente:
CREATE [OR REPLACE] PROCEDURE <procedure_name> [(<param1> [IN|OUT|IN OUT] <type>, <param2> [IN|OUT|IN OUT] <type>, ...)] IS -- Declaracion de variables locales BEGIN -- Sentencias [EXCEPTION] -- Sentencias control de excepcion END [<procedure_name>];

Parmetros: a la hora de crear un procedimiento almacenado de Oracle, podemos declarar parmetros de diferentes tipos (NUMBER, VARCHAR, etc) y estos pueden ser de entrada (IN), salida (OUT) o incluso de entrada y salida (INOUT).
o

IN: Se utiliza como un parmetro de entrada para el procedimiento almacenado. No se puede cambiar la informacin de este parmetro dentro del procedimiento. OUT: Se utiliza como parmetro de salida en el procedimiento almacenado. Se puede cambiar la informacin de este parmetro dentro del procedimiento. INOUT: Se utiliza como parmetro de entrada y de salida. Se puede cambiar la informacin de este parmetro dentro del procedimiento.

Zona de declaraciones: utilizaremos esta seccin del procedimiento para declarar las variables que necesitemos utilizar en el procedimiento. Zona de ejecucin: en esta seccin va la lgica del procedimiento, es decir, la parte de la aplicacin que se ejecutar. Zona de excepciones: se utiliza para el tratamiento de excepciones del procedimiento.

:: IDAT:: Programa Acadmico de Computacin e Informtica::

Profesor: Ezio Quispe Fernndez

PROCEDURE ventasde(xarticulo ventas.articulo%TYPE) is BEGIN DECLARE xnombre clientes.nombre%TYPE; xventas NUMBER; BEGIN SELECT nombre into xnombre FROM clientes,ventas WHERE clientes.codigo=ventas.codigo AND ventas.fecha=sysdate AND articulo=xarticulo; message( 'Solo una venta de ' xarticulo' a: 'xnombre); EXCEPTION WHEN NO_DATA_FOUND THEN message('No hay ventas de '||xarticulo); pause; WHEN TOO_MANY_ROWS THEN SELECT COUNT(*) INTO XVENTAS FROM ventas WHERE ventas.fecha=sysdate AND articulo=xarticulo; message( TO_CHAR(xventas) ' Ventas de 'xarticulo); pause; WHEN OTHERS THEN message('Error Indefinido'); pause; END; END;

Para ver los procedimientos almacenados que exiten: select *from user_objects where object_type='PROCEDURE';

:: IDAT:: Programa Acadmico de Computacin e Informtica::

Profesor: Ezio Quispe Fernndez

Veamos este procedimiento

SET FEEDBACK 1 SET NUMWIDTH 10 SET LINESIZE 80 SET TRIMSPOOL ON SET TAB OFF SET PAGESIZE 100 SET ECHO OFF REM procedimiento que permite hacer cambios solo en horario de oficina CREATE OR REPLACE PROCEDURE secure_dml IS BEGIN IF TO_CHAR (SYSDATE, 'HH24:MI') NOT BETWEEN '08:00' AND '18:00' OR TO_CHAR (SYSDATE, 'DY') IN ('SAT', 'SUN') THEN RAISE_APPLICATION_ERROR (-20205, 'Puede hacer cambios solo en horario de oficina'); END IF; END secure_dml; / CREATE OR REPLACE TRIGGER secure_EMPLEADOS BEFORE INSERT OR UPDATE OR DELETE ON EMPLEADOS BEGIN secure_dml; END secure_EMPLEADOS; / ALTER TRIGGER secure_EMPLEADOS DISABLE; REM ************************************************************************** REM procedimiento que aade filas a la tabla JOB_HISTORY y disparador de filas REM para ser llamado cunado los datos son catalizados en los cmapos job_id o REM department_id en la tabla EMPLEADOS CREATE OR REPLACE PROCEDURE add_job_history ( p_emp_id job_history.employee_id%type , p_start_date job_history.start_date%type , p_end_date job_history.end_date%type , p_job_id job_history.job_id%type , p_department_id job_history.department_id%type ) IS BEGIN INSERT INTO job_history (employee_id, start_date, end_date, :: IDAT:: Programa Acadmico de Computacin e Informtica:: 4

Profesor: Ezio Quispe Fernndez job_id, department_id) VALUES(p_emp_id, p_start_date, p_end_date, p_job_id, p_department_id); END add_job_history; / CREATE OR REPLACE TRIGGER update_job_history AFTER UPDATE OF job_id, department_id ON EMPLEADOS FOR EACH ROW BEGIN add_job_history(:old.employee_id, :old.hire_date, sysdate, :old.job_id, :old.department_id); END; / COMMIT;

:: IDAT:: Programa Acadmico de Computacin e Informtica::

Profesor: Ezio Quispe Fernndez

HR_MAIN.SQL clave para HR como parmetro 1: DEFINE pass = &1 PROMPT PROMPT Ingrese TABLASPACE por defecto para HR como el parametro 2: DEFINE tbs = &2

:: IDAT:: Programa Acadmico de Computacin e Informtica::

Das könnte Ihnen auch gefallen