Ya hemos visto las unidades léxicas que componen PL/SQL, los tipos de datos que podemos utilizar y cómo se definen las variables y las constantes. Ahora vamos a ver la unidad básica en PL/SQL que es el bloque.
Un bloque PL/SQL consta de tres zonas:
- Declaraciones: definiciones de variables, constantes, cursores y excepciones.
- Proceso: zona donde se realizará el proceso en sí, conteniendo las sentencias ejecutables.
- Excepciones: zona de manejo de errores en tiempo de ejecución.
La sintaxis es la siguiente:
[DECLARE
[Declaración de variables, constantes, cursores y excepciones]]
BEGIN
[Sentencias ejecutables]
[EXCEPTION
Manejadores de excepciones]
END;
Los bloques PL/SQL pueden anidarse a cualquier nivel. Como hemos comentado anteriormente el ámbito y la visibilidad de las variables es la normal en un lenguaje procedimental. Por ejemplo, en el siguiente fragmento de código se declara la variable aux
en ambos bloques, pero en el bloque anidado aux
con valor igual a 10 actúa de variable global y aux
con valor igual a 5 actúa como variable local, por lo que en la comparación evaluaría a FALSE
, ya que al tener el mismo nombre la visibilidad dominante sería la de la variable local.
DECLARE
aux number := 10;-- Variable global
BEGIN
DECLARE
aux number := 5; -- Variable local al bloque donde es definida
BEGIN
...
IF aux = 10 THEN --evalúa a FALSE, no entraría
...
END;
END;
La "visibilidad" de un identificador determina las partes del programa en las que se puede hacer referencia a él (su "ámbito"). Un identificador está visible (es decir, se puede utilizar) solo en las partes de un programa enmarcado por su "ámbito", que se puede limitar (en orden de restricción creciente) al archivo, función, bloque o prototipo de función en que aparece. El ámbito de un identificador es la parte del programa en que se puede usar el nombre. Esto a veces se denomina "ámbito léxico"