Variables et constantes

Toutes les variables, lignes et enregistrements utilisés dans un bloc ou ses sous-blocs doivent être déclarés dans la section des déclarations d'un bloc. Il existe quelques exceptions, à savoir la variable loop d'une boucle FOR qui itère sur une plage de valeurs entières, et certaines variables intégrées telles que FOUND, ROW_COUNT et LAST_OID.

Les variables NZPLSQL peuvent avoir n'importe quel type de données SQL, comme INTEGER, VARCHAR et CHAR. Voici quelques exemples de déclarations de variables :

user_id INTEGER;
quantity NUMERIC(5,2);
url VARCHAR;
Une déclaration de variable a la syntaxe suivante :
name [ CONSTANT ] type [ NOT NULL ] [ { DEFAULT | := } value ];
  • La clause DEFAULT, si elle est incluse, spécifie la valeur initiale attribuée à la variable lors de l'entrée dans le bloc. Si aucune clause DEFAULT n'est spécifiée, la variable utilise la valeur SQL NULL comme valeur par défaut.
  • L'option CONSTANT signifie que la variable ne peut pas être modifiée ; sa valeur reste constante pendant toute la durée du bloc.
  • Si NOT NULL est spécifié, l'affectation d'une valeur NULL entraîne une erreur d'exécution. Étant donné que la valeur par défaut de toutes les variables est la valeur SQL NULL, toutes les variables déclarées comme NOT NULL doivent également spécifier une valeur par défaut non nulle.

Lors de la spécification des types dans les déclarations, NUMERIC peut être spécifié avec ou sans précision et échelle. CHAR, NCHAR, VARCHAR et NVARCHAR peuvent être spécifiés avec ou sans taille. Lorsque ces types sont spécifiés avec une taille ou une précision/échelle, l'affectation à la variable suit les règles normales de distribution. S'ils sont spécifiés sans taille, l'affectation conserve la taille ou la précision/échelle de la source d'origine.

La valeur par défaut est évaluée à chaque appel de la procédure. Ainsi, l'affectation de " now() à une variable de type timestamp a pour effet de fixer la variable à l'heure de l'appel effectif de la procédure, et non à l'heure à laquelle la procédure a été précompilée dans son bytecode.

Voici quelques exemples d'affectations de variables :
quantity INTEGER := 32;
url varchar := 'http://mysite.com';
user_id CONSTANT INTEGER := 10;

En utilisant les attributs %TYPE et %ROWTYPE, vous pouvez déclarer des variables ayant le même type de données ou la même structure qu'un autre élément de la base de données (par exemple, un champ de table).

L'attribut %TYPE indique le type de données d'une variable ou d'une colonne de base de données. Vous pouvez utiliser cet attribut pour déclarer des variables qui contiennent des valeurs de base de données. Par exemple, si vous avez une colonne nommée user_id dans votre table users, vous pouvez déclarer une variable avec le même type de données que user_id comme suit :
user_id users.user_id%TYPE;

En utilisant %TYPE, vous n'avez pas besoin de connaître le type de données de la structure à laquelle vous faites référence. De même, si le type de données de l'élément référencé change à l'avenir (par exemple, si vous modifiez la définition de la table user_id pour qu'elle devienne REAL), vous ne devez pas modifier la définition de votre procédure.

Vous pouvez déclarer une ligne avec la structure d'un tableau, comme suit :
name table%ROWTYPE;

La valeur de la table doit être un nom de table ou de vue existant dans la base de données. Les champs de la ligne sont accessibles en utilisant la notation par points.

Seuls les attributs utilisateur d'une ligne de tableau sont accessibles dans la ligne. Vous ne pouvez pas accéder à un OID ou à un autre attribut système car la ligne pourrait provenir d'une vue. Les champs du type de ligne héritent des tailles ou de la précision des types de données CHAR, NCHAR et NUMERIC de la table.