Excepciones y Procedimientos Almacenados

download Excepciones y Procedimientos Almacenados

If you can't read please download the document

description

Pl - SQL

Transcript of Excepciones y Procedimientos Almacenados

EXCEPCIONES Y PROCEDIMIENTOS ALMACENADOSNOVIEMBRE 7, 2015 ADMIN DEJAR UN COMENTARIO/* EJEMPLO CAPTURA DE EXCEPTION, por cursor implicito y exception explicita */DECLARElname VARCHAR2(15);exceptionLOCAL EXCEPTION;BEGINRAISE exceptionLOCAL;SELECT last_name INTO lnameFROM employeesWHERE first_name=John';DBMS_OUTPUT.PUT_LINE(El apellido de John es : ||lname);EXCEPTIONWHEN TOO_MANY_ROWS THENDBMS_OUTPUT.PUT_LINE(La setencia SELECT recupera multiples filas. Considere un cursor explicito);WHEN OTHERS THENDBMS_OUTPUT.PUT_LINE(Error desconocido);END;/* RAISE *//* Ejemplo de error de violacion de integridad referencial */DECLAREex_trabajo_invalido EXCEPTION;PRAGMA EXCEPTION_INIT(ex_trabajo_invalido,-2291);ex_mensaje VARCHAR2(50);BEGININSERT INTO employeesVALUES (210,Lorena,Lorca,llorca,92938913',23021987',AD_PREZZ, 2500,0.2,101,90);EXCEPTIONWHEN ex_trabajo_invalido THENex_mensaje := El trabajo no existe, asegura de crearlo primero';DBMS_OUTPUT.PUT_LINE(ex_mensaje);END;/* RAISE_APPLICATION_ERROR(num_error, mensaje error) */DECLAREnombre_excepcion EXCEPTION;PRAGMA EXCEPTION_INIT(nombre_excepcion, -20000);numero NUMBER;BEGINnumero := 1;IF numero = 1 THENRAISE_APPLICATION_ERROR(-20000,Mensaje personalizado);END IF;EXCEPTIONWHEN nombre_excepcion THENDBMS_OUTPUT.PUT_LINE(SQLERRM);END;/* PROCEDIMIENTO ALMACENADO */CREATE TABLE DEPT AS SELECT * FROM departments;CREATE OR REPLACE PROCEDURE sp_add_dept ISdept_id dept.department_id%TYPE;dept_name dept.department_name%TYPE;BEGINdept_id:=290;dept_name:=SPT-Curriculum';INSERT INTO dept(department_id, department_name) VALUES (dept_id, dept_name);DBMS_OUTPUT.PUT_LINE(Fila insertadas:||SQL%ROWCOUNT);END;EXECUTE sp_add_dept;BEGINsp_add_dept;END;SELECT * FROM DEPT;DROP PROCEDURE sp_add_dept;/* USER_SOURCE, USER_OBJECTS, USER_ERRORS *//* PROCEDIMIENTO CON PARAMETROS */CREATE OR REPLACE PROCEDURE sp_aumenta_salario(p_id NUMBER, p_sal NUMBER)ISBEGINUPDATE employeesSET salary = p_salWHERE employee_id = p_id;END sp_aumenta_salario;BEGINsp_aumenta_salario(100,2000);END;SELECT * FROM employees WHERE employee_id = 100;/* PROCEDIMIENTO PARAMETROS IN */CREATE OR REPLACE PROCEDURE sp_aumentar_salario(p_id IN employees.employee_id%TYPE, p_porcent NUMBER)ISBEGINUPDATE employeesSET salary = salary * (1+p_porcent/100)WHERE employee_id = p_id;END sp_aumentar_salario;EXECUTE sp_aumentar_salario(176,10);SELECT * FROM employees where employee_id = 176;/* USANDO PARAMETROS OUT */CREATE OR REPLACE PROCEDURE sp_selecciona_emp(p_id IN employees.employee_id%TYPE,p_nombre OUT employees.last_name%TYPE,p_salario OUT employees.salary%TYPE)ISBEGINSELECT last_name, salary INTO p_nombre, p_salarioFROM employeesWHERE employee_id = p_id;END sp_selecciona_emp;DECLAREv_apellido employees.last_name%TYPE;v_salario employees.salary%TYPE;BEGINsp_selecciona_emp(171,v_apellido, v_salario);DBMS_OUTPUT.PUT_LINE(El apellido y salario del empleado 171 son : ||v_apellido|| ||v_salario);END;SELECT * FROM employees WHERE employee_id = 171;/* USO DE IN OUT */CREATE OR REPLACE PROCEDURE sp_formato_telefono(p_num_telefono IN OUT VARCHAR2)ISBEGINp_num_telefono := ( || SUBSTR(p_num_telefono,1,3)||)||SUBSTR(p_num_telefono,4,3)||-||SUBSTR(p_num_telefono,7);END sp_formato_telefono;DECLAREv_num_telefono VARCHAR2(15):=8006330575';BEGINdbms_output.put_line(Valor de entrada al procedimiento : ||v_num_telefono);sp_formato_telefono(v_num_telefono);dbms_output.put_line(Valor de retorno del procedimiento : ||v_num_telefono);END;