Невозможно получить NULL из пустого значения в pl/sql

В моей таблице «Группа» у меня нет имени = Джон, поэтому я хочу получить значение NULL в «новое_имя».

SELECT name INTO new_name FROM Group WHERE name = "John";

в пл/sql:

if (new_name IS NULL) then  ---here is the problem,I can't enter in "if",instead of having name=NULL, I have name = " ",and when I try to use if (new_name = " "), there's an error....---
     some code .....
end if;

Итак, как проверить в сатименте «если», это NULL или нет (нет необходимости использовать EXISTS)?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
91
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Похоже, у вас не NULL, а пробел; если это то, что вы говорите, то вы должны заключить это в одинарные кавычки:

if new_name = ' ' then ...

Однако: вернемся к началу. Если нет строки, чья name = 'John', то select не вернет null, а вызовет исключение no_data_found, которое вы должны каким-то образом обработать.

Один из вариантов - на самом деле «обработать» его:

begin
  begin
    select name into new_name from group where name = 'John';
  exception
    when no_data_found then new_name := null;
  end;

  if new_name is null then
     some code ...
  end if;
end;

Или, если вы используете агрегат, вы избежите раздела обработки исключений (что означает «меньше ввода», но это как бы скрывает то, что происходит):

begin
  select max(name) into new_name from group where name = 'John';

  if new_name is null then 
     some code ...
  end if;
end;

Я предлагаю вам справиться с этим должным образом.

Простой метод заключается в использовании агрегации:

SELECT MAX(name) INTO new_name
FROM Group 
WHERE name = 'John';

Запрос агрегации без GROUP BY гарантированно возвращает одну строку. Если все строки отфильтрованы, то результаты агрегации будут NULL.

ваше условие IF должно быть в порядке, но, как упоминал Littlefoot, ваша логика никогда не будет удовлетворять вашему условию If, поскольку NAME всегда будет не NULL.

Вы также можете использовать NVL(), если хотите присвоить значения в своей переменной new_name, отличные от NULL, а затем использовать это в своем условии IF.

Другие вопросы по теме