Проверьте, является ли переменная пустой в plsql

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

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

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

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

29
задан OMG Ponies 31 December 2009 в 06:08
поделиться

8 ответов

if var is NULL then
  var :=5;
end if;
54
ответ дан 28 November 2019 в 00:42
поделиться

Use:

IF Var IS NULL THEN
  var := 5;
ENDIF;

Oracle 9i+:

var = COALESCE(Var, 5)

Other alternatives:

var = NVL(var, 5)

Reference:

18
ответ дан 28 November 2019 в 00:42
поделиться

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

Я надеюсь это поможет.

EDIT

И так как прошло уже почти десять лет с тех пор как я написал этот ответ, давайте отпразднуем это, немного расширив его.

Функция COALESCE является ANSI-эквивалентом Oracle's NVL. Она отличается от NVL парой хороших способов IMO:

  1. Она берет любое количество аргументов и возвращает первый, который не является NULL. Если все аргументы, переданные в COALESCE, являются NULL, то он возвращает NULL.

  2. В отличие от NVL, COALESCE только аргументы, если должен, в то время как NVL оценивает оба своих аргумента, а затем определяет, является ли первый NULL и т.д. Таким образом, COALESCE может быть более эффективным, так как не тратит время на оценку вещей, которые не будут использоваться (и которые потенциально могут вызвать нежелательные побочные эффекты), но это также означает, что COALESCE не является дроп-ин-заменой для NVL.

15
ответ дан 28 November 2019 в 00:42
поделиться

использовать IS NULL

справочная страница

4
ответ дан 28 November 2019 в 00:42
поделиться

использовать, если var равен нулю

.
2
ответ дан 28 November 2019 в 00:42
поделиться

Всегда помните о том, чтобы быть осторожным с нулями в условных клаузулах pl/sql, так как ноль никогда не бывает больше, меньше, равна или неравна чему-либо. Лучший способ избежать их - использовать nvl.

Например

declare
  i integer;
begin
  if i <> 1 then
    i:=1;
    foobar();
  end if;
end;
/

Never goes in the if clause.

These would work.

if 1<>nvl(i,1) then
if i<> 1 or i is null then
2
ответ дан 28 November 2019 в 00:42
поделиться

Другой способ:

var := coalesce (var, 5);

COALESCE является ANSI-эквивалентом (более или менее) NVL функции Oracle.

.
2
ответ дан 28 November 2019 в 00:42
поделиться

Есть также функция NVL

http://www.techonthenet.com/oracle/functions/nvl. php

3
ответ дан 28 November 2019 в 00:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: