Ответ 1
if var is NULL then
var :=5;
end if;
Я хочу проверить, является ли переменная нулевой. Если оно равно null, то я хочу установить значение для этой переменной:
//data type of var is number
if Var = null then
var :=5;
endif
Но я заблуждаюсь. Как проверить, является ли переменная нулевой?
Я использую тип данных оракула
if var is NULL then
var :=5;
end if;
Использование:
IF Var IS NULL THEN
var := 5;
ENDIF;
Oracle 9i +:
var = COALESCE(Var, 5)
Другие альтернативы:
var = NVL(var, 5)
Ссылка:
В PL/SQL вы не можете использовать такие операторы, как '=' или '< > ' для тестирования NULL
, потому что все сравнения с NULL
возвращают NULL
. Чтобы сравнить что-то против NULL
, вам нужно использовать специальные операторы IS NULL
или IS NOT NULL
, которые существуют именно для этой цели. Таким образом, вместо написания
IF var = NULL THEN...
вам следует написать
IF VAR IS NULL THEN...
В том случае, если вы указали, вы также можете использовать встроенную функцию NVL
. NVL
принимает два аргумента, первый из которых является переменной, а второй - значением (постоянным или вычисленным). NVL
смотрит на свой первый аргумент и, если обнаруживает, что первый аргумент NULL
, возвращает второй аргумент. Если первый аргумент NVL
не равен NULL
, возвращается первый аргумент. Таким образом, вы можете переписать
IF var IS NULL THEN
var := 5;
END IF;
а
var := NVL(var, 5);
Надеюсь, это поможет.
Используйте NULL
Там также функция NVL
использовать, если var имеет значение null
Всегда помните о том, чтобы быть осторожным с нулями в условных предложениях pl/sql, поскольку значение null никогда не больше, меньше, равно или не соответствует чему-либо. Лучший способ избежать их - использовать nvl.
Например
declare
i integer;
begin
if i <> 1 then
i:=1;
foobar();
end if;
end;
/
Никогда не входит в предложение if.
Они будут работать.
if 1<>nvl(i,1) then
if i<> 1 or i is null then
Другой способ:
var := coalesce (var, 5);
COALESCE - эквивалент ANSI (более или менее) функции Oracle NVL.