PL SQL
PL SQL
El manejo de variables.
Estructuras modulares.
Estructuras de control de flujo y toma de decisiones.
Control de excepciones.
El lenguaje PL/SQL está incorporado en:
Identificadores
Un identificador es un nombre que se le pone a un objeto que interviene en un
programa, que puede ser variable, constante, procedimientos, excepciones,
cursores... Debe tener un máximo de 30 caracteres que empiece siempre por una
letra, y puede contener letras, números, los símbolos $, #, _, y mayúsculas y
minúsculas indiferentemente. Los identificadores no pueden ser palabras
reservadas (SELECT, INSERT, DELETE, UPDATE, DROP).
Variables
Las variables son nombres para procesar los elementos de los datos. Declaración:
Constantes]
Las constantes son como las variables pero no puede modificarse su valor. Se
declaran de la siguiente manera:
nombre_constante CONSTANT tipo_de_dato := valor
Bloque PL/SQL
Bloque es la unidad de estructura básica en los programas PL/SQL. Supone una
mejora en el rendimiento, pues se envían los bloques completos al servidor para
ser procesados en lugar de enviar cada secuencia SQL.
Partes de un bloque:
Bloque de código
Donde "modo" puede contener los valores IN, OUT, IN OUT. Por defecto tiene el
valor IN si no se pone nada. IN indica que el parámetro es de entrada y no se
podrá modificar. OUT indica que el parámetro es de salida con lo que el
procedimiento devolverá un valor en él. IN OUT indica que el parámetro es de
entrada/salida. Con lo que al llamar al procedimiento se le dará un valor que luego
podrá ser modificado por el procedimiento y devolver este nuevo valor.
DECLARE
nombre_parametro tipodatos_parametro;
BEGIN
nombre_parametro tipodatos_parametro := valor_de_inicializacion;
nombre_procedimiento (nombre_parametro => nombre_parametro);
END;
/
Funciones
Una función es un bloque de código PL/SQL que tiene las mismas características
que un procedimiento almacenado. La diferencia estriba que una función devuelve
un valor al retornar. Al devolver un valor puede ser llamado como parte de una
expresión.
La sintaxis sería
CREATE [OR REPLACE] FUNCTION nombre_función
[nombre_parámetro modo tipodatos_parametro ]
RETURN tipodatos_retorno IS | AS
bloque de código
Donde "modo" puede contener los valores IN, OUT, IN OUT. Por defecto tiene el
valor IN si no se pone nada. IN indica que el parámetro es de entrada y no se
podrá modificar. OUT indica que el parámetro es de salida con lo que la función
devolverá un valor en él. IN OUT indica que el parámetro es de entrada/salida.
Con lo que al llamar a la función se le dará un valor que luego podrá ser
modificado por la misma y devolver este nuevo valor. Sin embargo, en este caso
solo tendría sentido (por el concepto de función en sí mismo) declarar parámetros
del tipo IN y devolver el valor como retorno de la función.
Paquetes
Se usan para agrupar procedimientos y funciones. Facilitan la descomposición
modular y el mantenimiento.
Constan de dos partes: la especificación o prototipo y el cuerpo.
Especificación
Se declaran los elementos públicos que componen el paquete, es decir, variables,
funciones y procedimientos que serán accesibles desde fuera del paquete. De las
funciones y procedimientos solo indicamos la cabecera, no el cuerpo.
Cursores
declare
cursor c_paises is
SELECT CO_PAIS, DESCRIPCION
FROM PAISES;
begin
/* Sentencias del bloque ...*/
end;
Para procesar instrucciones SELECT que devuelvan más de una fila, son
necesarios cursores explicitos combinados con un estructura de bloque.
declare
cursor c_paises (p_continente IN VARCHAR2) is
SELECT CO_PAIS, DESCRIPCION
FROM PAISES
Packages
Lo primero que debemos tener en cuenta es que los paquetes están formados por
dos partes: la especificación y el cuerpo. La especificación del un paquete y su
cuerpo se crean por separado.
La especificación es la interfaz con las aplicaciones. En ella es posible declarar
los tipos, variables, constantes, excepciones, cursores y subprogramas
disponibles para su uso posterior desde fuera del paquete. En la especificación del
paquete sólo se declaran los objetos (procedures, funciones, variables ...), no se
implementa el código. Los objetos declarados en la especificación del paquete son
accesibles desde fuera del paquete por otro script de PL/SQL o programa.
Haciendo una analogía con el mundo de C, la especificación es como el archivo
de cabecera de un programa en C.