Está en la página 1de 4

PL/SQL PROCEDIMIENTOS: Los procedimientos PL/SQL son muy parecidos a otros procedimientos en otros lenguajes de programacin.

Ejemplo de insercin de un registro compuesto por un nmero entero dado y una cadena, (i, xxx):
CREATE TABLE T2 ( a INTEGER, b CHAR(10) ); CREATE PROCEDURE addtuple1(i IN NUMBER) AS BEGIN INSERT INTO T2 VALUES(i, 'xxx'); END addtuple1; . run;

Un procedimiento se indica mediante las palabras clave CREATE PROCEDURE seguido del nombre y sus parmetros. Opcional es continuarlo de CREATE seguido de OR REPLACE. Esto permitir crear o reemplazar el procedimiento, si existe previamente, sin advertencias. Puede haber un nmero ilimitado de parmetros, seguidos de un modo y un tipo. Los modos posibles son:

IN: Solo lectura. OUT: Solo escritura. INOUT: Lectura y escritura.


A diferencia del tipo especificado en la declaracin de una variable PL/SQL, el tipo especificado en la declaracin de un parmetro, NO puede tener restricciones. Por ejemplo, VARCHAR(10) o CHAR(2) NO son vlidos; deberan usarse los

tipos CHAR o VARCHAR en su lugar. La longitud depende del parmetro que se pase cuando el procedimiento es invocado.

A continuacin de los argumentos, se debe usar la palabra clave AS (IS es un sinnimo). A continuacin va el cuerpo, esencial en un bloque PL/SQL. Hemos repetido al final el nombre del procedimiento tras el END, pero esto es opcional. La seccin de declaracin, NO debe empezar con la palabra clave DECLARE. En su lugar, usamos AS. El run; tras un procedimiento, no lo ejecuta, sino que tan slo ejecuta la sentencia que crea el procedimiento. Para ejecutar el procedimiento hay que usar otra sentencia PL/SQL, en la que el procedimiento es invocado como una sentencia de ejecucin. Ejemplo 1:
CREATE PROCEDURE addtuple2(x T2.a%TYPE, y T2.b%TYPE) AS BEGIN INSERT INTO T2(a, b) VALUES(x, y); END addtuple2; . run; /* -- Ahora aade el registro (10, 'abc') a T2: -- */ BEGIN addtuple2(10, 'abc'); END; . run;

Ejemplo 2: Con parmetro OUT.


/* -- Creamos la tabla con SQL -- */ CREATE TABLE T3 (a INTEGER, b INTEGER); /* -- Procedimiento -- */ CREATE PROCEDURE addtuple3(a NUMBER, b OUT NUMBER) AS BEGIN b := 4;

INSERT INTO T3 VALUES(a, b); END; . run; /* -- Invocacin al procedimiento -- */ DECLARE v NUMBER; BEGIN addtuple3(10, v); END; . run;

Cuando usemos OUT o INOUT, no se puede usar una constante, ya que su valor cambiar.

FUNCIONES: Tambin podemos crear Funciones en lugar de Procedimientos. En su declaracin y tras los parmetros pondremosRETURN y el tipo de valor que retornar:
CREATE FUNCTION <nombre_funcion>(<lista_params>) RETURN <tipo_var_retorno> AS

En el cuerpo de la funcin debe existir un valor de retorno, con la siguiente sintaxis:


RETURN <expression>;

CONSULTAS SOBRE PROCEDIMIENTOS Y FUNCIONES: Para encontrar qu procedimientos y funciones hemos creado, usamos la siguiente query de SQL:
select object_type, object_name from user_objects where object_type = 'PROCEDURE' or object_type = 'FUNCTION';

Para eliminar un procedimiento/funcin almacenados:


drop procedure <procedure_name>; drop function <function_name>;

También podría gustarte