Как проверить условие IF с оператором IN в результатах SELECT?
Пытаюсь проверить, существует ли значение в результатах запроса SELECT.
Знаю, что можно сделать что-то вроде:
IF var IN ('A', 'B') THEN
DBMS_OUTPUT.PUT_LINE('True');
END IF;
Но хотел бы сделать что-то вроде:
IF var IN (SELECT x FROM DUAL) THEN
DBMS_OUTPUT.PUT_LINE('True');
END IF;
Есть ли синтаксически правильный способ сделать это?
Свободный перевод вопроса IF Statement Using IN Operator On SELECT Results от участника @Acroyear
Ответы (1 шт):
Вызвать запрос в операторе IN возможно в SQL, но в PL/SQ это синтаксически неверно.
Запрос можно вызвать до оператора IF ... THEN, который и проверит результат запроса:
declare
var char (1) := 'x';
found int;
begin
select count(*) into found from t where val = var and rownum=1;
if found = 1 then
dbms_output.put_line (var||' Found');
end if;
end;
x Found
Где found примет значение 1 - найдено, а 0 - не найдено.
Обратите внимание, что с предикатом rownum=1 запрос сразу же закончится, как только будет найдено одно первое совпадение для значения var, что полностью соответствует логике работы оператора IN.