Hola a todos, hoy os voy a explicar como funcionan las excepciones en PL/SQL.
Igual que pasa en programación, nuestro código PL/SQL pude dar problemas o pueden lanzar excepciones, entonces también necesitamos controlarlos.
Dijimos en su día que tenemos en un bloque anónimo varias partes: declare, begin, end y exception, que es lo que nos interesa.
Os dejo un ejemplo de exception:
declare v_codigocliente clientes.codigocliente%type := &codigo; v_nombrecliente clientes.nombrecliente%type; begin select nombrecliente into v_nombrecliente from clientes where codigocliente = v_codigocliente; DBMS_OUTPUT.PUT_LINE('El nombre del cliente es ' || v_nombrecliente); exception when no_data_found then DBMS_OUTPUT.PUT_LINE('No existe el cliente.'); end; /
Tener en cuenta que SELECT INTO puede hacer que provoque excepciones por eso deberíamos controlarlas en caso de fallo.
También podemos crear nuestras propias excepciones para hacerlas saltar cuando queramos.
Para crear nuestras excepciones debemos crear variables del tipo exception:
limite_superado exception;
Y si queremos lanzarla, tenemos que usar raise:
raise limite_superado;
También podemos lanzar las excepciones predefinidas de PL/SQL.
raise no_data_found;
Y en el bloque exception deberemos de controlarla:
exception when no_data_found then DBMS_OUTPUT.PUT_LINE('No existe el pedido.'); when limite_superado then DBMS_OUTPUT.PUT_LINE('Limite superado');
Os dejo un ejemplo completo:
declare v_total number(8) := 0; limite_superado exception; begin select sum(dp.cantidad * dp.PRECIOUNIDAD) into v_total from pedidos p, detallepedidos dp where p.codigopedido = dp.codigopedido and p.codigopedido = v_codigopedido; if v_total is null then raise no_data_found; else if v_limite < v_total then raise limite_superado; else DBMS_OUTPUT.PUT_LINE('Total: ' ||v_total ); end if; end if; exception when no_data_found then DBMS_OUTPUT.PUT_LINE('No existe el pedido.'); when limite_superado then DBMS_OUTPUT.PUT_LINE('Limite superado'); end; /
Por último, os dejo un vídeo donde hago un ejercicio relacionado con excepciones.
Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.
Deja una respuesta