Variables y constantes

Todas las variables, filas y registros que se utilizan en un bloque o sus sub-bloques deben declararse en la sección de declaraciones de un bloque. Hay algunas excepciones, como la variable de bucle de un bucle FOR que se itera en un rango de valores enteros y algunas variables incorporadas como FOUND, ROW_COUNT y LAST_OID.

Las variables NZPLSQL pueden tener cualquier tipo de datos SQL, por ejemplo INTEGER, VARCHAR y CHAR. A continuación se muestran algunas declaraciones de variable de ejemplo:

user_id INTEGER;
quantity NUMERIC(5,2);
url VARCHAR;
Una declaración de variable tiene la sintaxis siguiente:
name [ CONSTANT ] type [ NOT NULL ] [ { DEFAULT | := } value ];
  • La cláusula DEFAULT, si se incluye, especifica el valor inicial asignado a la variable cuando se entra en el bloque. Si no se especifica una cláusula DEFAULT, la variable utiliza el valor SQL NULL como valor predeterminado.
  • La opción CONSTANT significa que la variable no se puede cambiar; su valor permanece constante durante el tiempo que dura el bloque.
  • Si se especifica NOT NULL, una asignación de un valor NULL produce un error de tiempo de ejecución. Dado que el valor predeterminado de todas las variables es el valor SQL NULL, todas las variables declaradas como NOT NULL también deben especificar un valor predeterminado no nulo.

Cuando se especifican tipos en las declaraciones, se puede especificar NUMERIC con o sin una precisión y escala. CHAR, NCHAR, VARCHAR y NVARCHAR se pueden especificar con o sin tamaño. Cuando se especifican estos tipos con un tamaño o una precisión/escala, la asignación a la variable sigue las reglas normales de conversión. Si se especifican sin tamaños, la asignación conserva el tamaño o precisión/escala de origen iniciales.

El valor predeterminado se evalúa cada vez que se llama al procedimiento. Por consiguiente, si se asigna now() a una variable de tipo indicación de fecha y hora, la variable se establece en la hora de la llamada del procedimiento real, no en la hora a la que se ha precompilado el procedimiento en su código de bytes.

A continuación se muestran algunos ejemplos de asignaciones de variable:
quantity INTEGER := 32;
url varchar := 'http://mysite.com';
user_id CONSTANT INTEGER := 10;

Mediante el uso de los atributos %TYPE y %ROWTYPE, puede declarar variables con el mismo tipo o estructura de datos de otro elemento de la base de datos (por ejemplo un campo de tabla).

El atributo %TYPE proporciona el tipo de datos de una variable o una columna de base de datos. Puede utilizar este atributo para declarar variables que contienen valores de base de datos. Por ejemplo, si tiene una columna denominada user_id en la tabla de usuarios, puede declarar una variable con el mismo tipo de datos que user_id de la manera siguiente:
user_id users.user_id%TYPE;

Al utilizar %TYPE, no es necesario que conozca el tipo de datos de la estructura a la que está haciendo referencia. Además, si el tipo de datos del elemento al que se hace referencia cambia en el futuro (por ejemplo se cambia la definición de tabla de user_id para convertirla en REAL), no es necesario cambiar la definición de su procedimiento.

Puede declarar una fila con la estructura de una tabla, como se indica a continuación:
name table%ROWTYPE;

El valor table debe ser un nombre de tabla o vista existente de la base de datos. Se accede a los campos de la fila utilizando la notación de puntos.

En la fila, solo se puede acceder a los atributos de usuario de una fila de tabla. No puede acceder a un OID o a otro atributo de sistema porque la fila puede ser de una vista. Los campos del tipo de fila heredan de la tabla los tamaños o la precisión para los tipos de datos CHAR, NCHAR y NUMERIC.