Je veux vérifier si une variable est nulle. Si elle est nulle, je veux définir une valeur pour cette variable:
//data type of var is number
if Var = null then
var :=5;
endif
Mais je me trompe. Comment puis-je vérifier si une variable est nulle?
J'utilise le type de données Oracle
if var is NULL then
var :=5;
end if;
Utilisation:
IF Var IS NULL THEN
var := 5;
ENDIF;
Oracle 9i +:
var = COALESCE(Var, 5)
Autres alternatives:
var = NVL(var, 5)
Référence:
En PL/SQL, vous ne pouvez pas utiliser d'opérateurs tels que '=' ou '<>' pour tester NULL
car toutes les comparaisons avec NULL
renvoient NULL
. Pour comparer quelque chose avec NULL
, vous devez utiliser les opérateurs spéciaux IS NULL
ou IS NOT NULL
qui sont là précisément dans ce but. Ainsi, au lieu d'écrire
IF var = NULL THEN...
tu devrais écrire
IF VAR IS NULL THEN...
Dans le cas que vous avez indiqué, vous avez également la possibilité d'utiliser la fonction intégrée NVL
. NVL
prend deux arguments, le premier étant une variable et le second une valeur (constante ou calculée). NVL
examine son premier argument et, s'il trouve que le premier argument est NULL
, retourne le deuxième argument. Si le premier argument de NVL
n'est pas NULL
, le premier argument est renvoyé. Vous pouvez donc réécrire
IF var IS NULL THEN
var := 5;
END IF;
comme
var := NVL(var, 5);
J'espère que ça aide.
Utilisez IS NULL
Il y a aussi la fonction NVL
Autrement:
var := coalesce (var, 5);
COALESCE est l'équivalent ANSI (plus ou moins) de la fonction NVL d'Oracle.
N'oubliez pas de faire attention aux valeurs null dans les clauses conditionnelles pl/sql car null n'est jamais plus grand, plus petit, égal ou inégal à quoi que ce soit. La meilleure façon de les éviter est d'utiliser nvl.
Par exemple
declare
i integer;
begin
if i <> 1 then
i:=1;
foobar();
end if;
end;
/
N'entre jamais dans la clause if.
Cela fonctionnerait.
if 1<>nvl(i,1) then
if i<> 1 or i is null then
utiliser si var est nul