Как сравнить нулевое значение в PLSQL - PullRequest
2 голосов
/ 20 мая 2019

Ниже мой код.

Одна переменная НЕ имеет значения.Другая переменная имеет значение.В приведенном ниже коде я хочу напечатать, что переменные не одинаковы даже в случае, когда var1 не имеет никакого значения.Как я могу это сделать?

CREATE OR REPLACE PACKAGE BODY mypackagebody IS

 PROCEDURE comparenull() IS
  l_var1 mytable.mycolumn1%TYPE;
  l_var2 mytable.mycolumn2%TYPE;

 BEGIN
  BEGIN
   SELECT var1
         ,var2
   INTO   l_var1
         ,l_var2
   FROM   mytable;
  EXCEPTION
   WHEN no_data_found THEN
    var1 := NULL;
    var2 := NULL;
  END;

  /* At this point var1 is NOT having any value and var2 is having a value.*/
  /* The below if condition is returing false. But, I wanted to go inside the if condition and print that the var values are not same*/
  IF var1 <> var2
  THEN
   dbms_ouput.put_line('var1 and var2 are not same');

  END IF;

 END comparenull;

END mypackagebody;

Ответы [ 2 ]

4 голосов
/ 20 мая 2019

Я думаю, вы хотите NULL -безопасное сравнение.В Oracle вы можете использовать несколько условий:

IF var1 <> var2 OR
   (var1 is null and var2 is not null) OR
   (var1 is not null and var2 is null)
2 голосов
/ 20 мая 2019

Вероятно, наиболее удачный способ справиться с этим - использовать NVL

if NVL(var1, 'NULL') <> NVL(var2, 'NULL')

NVL оценит переменную, и если она равна нулю, используйте строку в сравнении, вместо этого эта строка может быть любой, какой вы хотите, не обязательно должна быть литеральной строкой NULL. Я просто нахожу это полезным.

...