Проверьте, нет ли переменной в plsql

Я хочу проверить, является ли переменная нулевой. Если оно равно null, то я хочу установить значение для этой переменной:

//data type of var is number 
if Var = null then
 var :=5;
endif

Но я заблуждаюсь. Как проверить, является ли переменная нулевой?

Я использую тип данных оракула

8 ответов

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);

Надеюсь, это поможет.


Всегда помните о том, чтобы быть осторожным с нулями в условных предложениях 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.


использовать, если var имеет значение null

licensed under cc by-sa 3.0 with attribution.