if语句中的标量子查询PL/SQL中的条件

Din*_*nne 2 oracle conditional plsql scalar-subquery

我有一个类似下面的If语句块,它没有错误 - PLS-00103:遇到以下其中一个时遇到符号"SELECT"....

Begin
    If (select count(*) from Table1) > 0 then
        dbms_output.put_line('Test');
    end if;
end;
Run Code Online (Sandbox Code Playgroud)

我有类似的Case语句,工作正常

select 
case 
    when (select count(*) from Table1) > 0
        then 2
    else
        1
end
from dual
Run Code Online (Sandbox Code Playgroud)

从我在Oracle Documentation中读到的if和when何时支持布尔表达式,任何想法是否在If条件中支持子查询.

注意:语句已经简化,我真的不会得到整个表的计数,所以请不要优化建议

Dav*_*sta 5

不,你不能以你想要的方式使用SELECT.

在使用CASE的示例中,您没有使用CASE"语句" - 您正在使用CASE 表达式,该表达式恰好嵌入在SQL语句中.在这种情况下,您可以使用子查询,因为它位于SQL语句的上下文中,而不是过程语句中.您将无法在过程CASE语句中使用这样的子查询.