Как проверить условие 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 шт):

Автор решения: 0xdb

Вызвать запрос в операторе 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.

→ Ссылка