Oracle 12.1.0.2 - пустая строка больше не Null ?

defecator
Дата: 20.10.2015 15:54:06
Стояла 12.1.0.1
В ней:

is
  vTest VarChar(256);
begin
   vTest := Null ;

   if vTest = '' 
   then 
         dbms_output.put_line('пустая строка') ;
   end if ;
end ;


В 12.1.0.1 этот IF прокатывал.
В 12.1.0.2 этот IF всегда ложный, прокатывает только прямая проверка на if vTest Is Null

Что-то поменялось ? Наткнулся на это в собственном древнем коде, перенесённом ещё с 9-й версии.
Понятно, что нужно писать Is Null, но просто стало интересно.
Opus Magnum
Дата: 20.10.2015 15:56:54
NULL != NULL
Соответственно, условие не будет выполняться.
В 9-й версии, однако же, мне пару раз попадалось такое условие.
Не помню, работало или нет, но заменялось мной на IS NOT NULL/IS NULL.
Vint
Дата: 20.10.2015 15:58:15
defecator,
"В 12.1.0.1 этот IF прокатывал." - неправда.... давай тест...
defecator
Дата: 20.10.2015 16:00:33
Opus Magnum
NULL != NULL
Соответственно, условие не будет выполняться.
В 9-й версии, однако же, мне пару раз попадалось такое условие.
Не помню, работало или нет, но заменялось мной на IS NOT NULL/IS NULL.


да это понятно всё, только на 12.1.0.1 эти проверки срабатывали одинаково при пустой строке:

1. if vStr = ''
2. if vStr Is Null

а в версии 12.1.0.2 срабатывает только вторая, если делать vStr := Null,
и первая, если писать vStr := ''
defecator
Дата: 20.10.2015 16:02:33
Vint
defecator,
"В 12.1.0.1 этот IF прокатывал." - неправда.... давай тест...


Сам не верю, потому и спросил, на всякий случай.
у меня нет уже версии 12.1.0.1

Код работал несколько лет, с 9-тки до 12.1.0.1, после установки 12.1.0.2 всплыла эта ситуация
Opus Magnum
Дата: 20.10.2015 16:04:20
defecator,

Вообще, если мне память не изменяет, такая запись делалась (где-то или когда-то во времена моей учебы в средне-специальном учебном заведении), но с 9-го по 12-й Oracle ни разу не встречалось, что такое условие работает корректно.
Более того, в 11-м не работало точно, один новенький такую запись использовал в запросе.
AlexFF__|
Дата: 20.10.2015 16:06:10
Предлагаю к подфорумам Oracle APEX и Oracle Forms сделать Oracle Idiots.
Туда и сливать таких.
И они не буду никого раздражать и люди будут спокойнее реагировать.
прокатывальщик
Дата: 20.10.2015 16:06:38
defecator

Код работал несколько лет, с 9-тки
и как же работало сравнение varchar = '' в 9?
Жук в муравейнике
Дата: 20.10.2015 16:21:17
SQL> select banner from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE    11.2.0.4.0      Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

SQL> declare
   vTest VarChar(256);
begin
   vTest := Null ;

   if vTest = ''
   then
         dbms_output.put_line('vTest = ''''') ;
   end if ;

   if vTest is null
   then
         dbms_output.put_line('vTest is null') ;
   end if ;

end ;
/  2    3    4    5    6    7    8    9   10   11   12   13   14   15   16   17
vTest is null

PL/SQL procedure successfully completed.
j2k
Дата: 20.10.2015 16:25:54
defecator, не с той стороны смотришь :)

declare
  vTest VarChar(256);
begin
   vTest := '';

   if vTest is null 
   then 
         dbms_output.put_line('пустая строка') ;
   end if ;
end ;