Dentro de la seccion DECLARE de un bloque anónimo podemos declarar funciones y procedimientos almacenados y ejecutarlos desde el bloque de ejecución del script.
Este tipo de subprogramas son menos conocidos que los procedimientos almacenados, funciones y triggers, pero son enormemente útiles.
EJEMPLO
EJEMPLO
DECLARE
CURSOR CUR4 IS
SELECT ENAME, DNAME FROM EMP, DEPT
WHERE EMP.DEPTNO=DEPT.DEPTNO;
V_N VARCHAR2(20);
V_D VARCHAR2(20);
BEGIN
OPEN CUR4;
LOOP
FETCH CUR4 INTO V_N,V_D;
EXIT WHEN CUR4%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(V_N||'*'||'ESTA EN ELDEPNO'||V_D);
END LOOP
CLOSE;
END;
Los procedimientos o funciones PLSQL son dinámicos ya que admiten parámetros que les pueden ser pasados antes de su ejecución. Por lo tanto, un procedimiento o función puede realizar diferentes tareas dependiendo de los parámetros que le hayan pasado. Los procedimientos y funciones Oracle están compuestos por una parte en la que se definen de variables y cursores, otra parte ejecutable compuesta por sentencias SQL y PLSQL, y otra parte opcional enfocada a manejar las excepciones y errores ocurridos durante la ejecución. Los pasos que sigue Oracle para ejecutar un procedimiento o función son los siguientes: - Verificar si el usuario tiene permiso de ejecución. - Verificar la validez del procedimiento o función. - Y finalmente ejecutarlo. Las ventajas de usar procedimientos y funciones en lugar de scripts SQL son: - Mejor rendimiento al estar compilados y almacenados en la base de datos. - Mejor gestión de la memoria. - Mayor productividad e integridad. La diferencia más importante entre los procedimientos y las funciones es que una función, al final de su ejecución, devuelve un valor al bloque PL/SQL que la llamó. Sin embargo, en los procedimientos esto no es posible, aunque si que podemos definir múltiples parámetros de salida que se devolverían al bloque PL/SQL desde el que se ejecutó el procedimiento (esto último también es posible en las funciones). Sintaxis de un procedimiento PLSQL CREATE OR REPLACE PROCEDURE [esquema].nombre-procedim (nombre-parámetro {IN, OUT, IN OUT} tipo de dato, ..) {IS, AS} Declaración de variables; Declaración de constantes; Declaración de cursores; BEGIN Cuerpo del subprograma PL/SQL; EXCEPTION Bloque de excepciones PL/SQL; END; Sintaxis de una función PLSQL: CREATE OR REPLACE FUNCTION [esquema].nombre-funcion (nombre-parámetro {IN, OUT, IN OUT} tipo-de-dato, ..) RETURN tipo-de-dato {IS, AS} Declaración de variables; Declaración de constantes; Declaración de cursores; BEGIN Cuerpo del subprograma PL/SQL; EXCEPTION Bloque de excepciones PL/SQL; END; |