> Manuales > Tutorial de Oracle

Los subprogramas son los bloques PL/SQL con nombre que pueden recibir y devolver valores.

En cualquier subprograma podemos distinguir:

Podemos distinguir entre dos tipos de subprogramas, como ya hemos comentado en artículos anteriores:

Procedimientos

Los procedimientos ya los hemos visto en el articulo “Bloques anónimos y procedimientos PL/SQL ” por lo que pasamos directamente a las funciones.

Funciones

Las funciones son muy similares a los procedimiento con la diferencia que éstas siempre devolverán un valor. Su estructura es la siguiente:

CREATE [OR REPLACE] FUNCTION NombreFuncion [(parámetros)] RETURN tipo
IS [parte declarativa]
BEGIN   
   instrucciones
   RETURN <valor o expresión>;
[EXCEPTION excepciones]
END;

La cláusula RETURN de la cabecera nos especifica el tipo de valor que nos va a devolver la función.

Parámetros

Todos los subprogramas utilizan parámetros para pasar y recibir información.
Dentro de los parámetros podemos distinguir dos tipos:

Además podemos hacer el paso de parámetros de un tipo a otro. Generalmente si los tipos son compatibles PL/SQL lo hace automáticamente. En cualquier caso, podemos hacerlo de forma manual utilizando las siguientes notaciones:

Para que esto quede más claro pasamos a escribir un ejemplo de paso de parámetros y conversión de tipos.

Tenemos la especificación de un procedimiento como esta:

   PROCEDURE departamento(
      n_departamento INTEGER,
      localidad VARCHAR2
   IS...

Desde el siguiente bloque se podrán realizar las llamadas indicadas:

   DECLARE
      num_departamento INTEGER;
      aula VARCHAR(30)
   BEGIN
   ...
    - - posicional departamento(num_departamento, aula);
    - - nominal departamento(num_departamento => n_departamento, aula =>localidad);
   ...
   END;

Esto nos pasaría los parámetros num_departamento al mismo tipo que n_departamento y localidad al mismo tipo que aula.

Los parámetros que soporta PL/SQL pueden ser de entrada, salida o entrada/salida

INNos permite pasar valores a un subprograma. Dentro del subprograma, el parámetro actuá como una constante. Puede ser una variable, constante, literal o expresión.
OUTPermite devolver valores al bloque que llamó al subprograma. Dentro del subprograma, el parámetro actúa como una variable no inicializada. Solo puede ser una variable.
IN OUTPermite pasar un valor inicial y devolver un valor actualizado. Dentro del subprograma, el parámetro actuá como variable inicializada. Puede intervenir otras expresiones. El valor actual debe ser una variable.

El formato genérico es el siguiente:

<nombrevariable> [IN | OUT | IN OUT] <tipodato>
         [ { := | DEFAULT} <valor>]

Además es importante recordar que al especificar parámetros debemos indicar el tipo, pero no el tamaño.

Creación, modificación y borrado de subprogramas

Cuando creamos subprogramas con SQL * PLUS utilizando los comandos CREATE, Oracle automáticamente compila el código fuente, genera el código objeto y los guarda en el diccionario de datos, quedando disponibles para su utilización.

Para volver a compilar un subprograma almacenado utilizaremos la orden ALTER en vez del CREATE y su formato es el siguiente:

   ALTER {PROCEDURE | FUNCITON} nombresubprograma COMPILE;

Para ver el código de un subprograma almacenado podemos ejecutar una sentencia como esta;

   select LINE, SUBSTR(TEXT,1,60) from USER_SOURCE where name = 'nombresubprograma';

Para borrar un subprograma almacenado utilizaremos la orden DROP de la siguiente forma:

   DROP {PROCEDURE | FUNCTION} nombresubprograma;

Nota: PL/SQL implementa la recursividad en los subprogramas, esto quiere decir, que un programa puede llamarse a si mismo.

Sara Alvarez

Equipo DesarrolloWeb.com

Manual