Llevamos un buen rato hablando de tipos de datos, variables e incluso de constantes y te estarás preguntando cuál es la forma adecuada de definirlas. En este apartado vamos a ver las diferentes posibilidades a la hora de definirlas y dejaremos para el apartado siguiente ver cuál es el lugar adecuado para hacerlo dentro de un bloque PL/SQL.
Para declarar variables o constantes pondremos el nombre de la variable, seguido del tipo de datos y opcionalmente una asignación con el operador :=
. Si es una constante antepondremos la palabra CONSTANT
al tipo de dato (lo que querrá decir que no podemos cambiar su valor). Podremos sustituir el operador de asignación en las declaraciones por la palabra reservada DEFAULT
. También podremos forzar a que no sea nula utilizando la palabra NOT NULL
después del tipo y antes de la asignación. Si restringimos una variable con NOT NULL
deberemos asignarle un valor al declararla, de lo contrario PL/SQL lanzará la excepción VALUE_ERROR
(no te asustes que más adelante veremos lo que son las excepciones, pero como adelanto te diré que es un error en tiempo de ejecución).
id SMALLINT;
hoy DATE := sysdate;
pi CONSTANT REAL:= 3.1415;
id SMALLINT NOT NULL; --ilegal, no está inicializada
id SMALLINT NOT NULL := 9999; --legal
nombre varchar2(30):= ;'Alejandro Magno';
num INTEGER DEFAULT 4; -- también se puede utilizar DEFAULT para inicializar una variable
El alcance y la visibilidad de las variables en PL/SQL será el típico de los lenguajes estructurados basados en bloques, aunque eso lo veremos más adelante.
Conversión de tipos.
Aunque en PL/SQL existe la conversión implícita de tipos para tipos parecidos, siempre es aconsejable utilizar la conversión explícita de tipos por medio de funciones de conversión (TO_CHAR
, TO_DATE
, TO_NUMBER
, …) y así evitar resultados inesperados.
Precedencia de operadores.
Al igual que en nuestro lenguaje matemático se utiliza una precedencia entre operadores a la hora de realizar las operaciones aritméticas, en PL/SQL también se establece dicha precedencia para evitar confusiones. Si dos operadores tienen la misma precedencia, se evalúa de izquierda a derecha, pero lo aconsejable es utilizar los paréntesis (al igual que hacemos en nuestro lenguaje matemático) para alterar la precedencia de los mismos ya que las operaciones encerradas entre paréntesis tienen mayor precedencia. En la tabla siguiente se muestra la precedencia de los operadores de mayor a menor.
Operador. | Operación. |
---|---|
** , NOT |
Exponenciación, negación lógica. |
+ , - |
Identidad, negación. |
* , / |
Multiplicación, división. |
+ , - , || |
Suma, resta y concatenación. |
= , ¡= , < , > , <= , >= , IS NULL , LIKE , BETWEEN , IN |
Comparaciones. |
AND |
Conjunción lógica |
OR |
Disyunción lógica. |
En ciencias de la computación la conversión de tipos (type casting en inglés) se refiere a la transformación de un tipo de dato en otro. Esto se hace para tomar las ventajas que pueda ofrecer el tipo a que se va a convertir. Por ejemplo, los valores de un conjunto más limitado, como números enteros, se pueden almacenar en un formato más compacto y más tarde convertidos a un formato diferente que permita las operaciones que anteriormente no eran posibles, tales como la división con decimales.