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

时间:2009-05-01 10:29:16

标签: oracle plsql conditional scalar-subquery

我有一个类似于下面的If语句块,但是没有错误 - PLS-00103:当期待下列之一时遇到符号“SELECT”....

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

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

select 
case 
    when (select count(*) from Table1) > 0
        then 2
    else
        1
end
from dual

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

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

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:0)

你有没有打电话给DBMS_OUTPUT.ENABLE

快速示例

BEGIN
DBMS_OUTPUT.DISABLE;
DBMS_OUTPUT.PUT_LINE('Disabled');
DBMS_OUTPUT.ENABLE;
DBMS_OUTPUT.PUT_LINE('Enabled');
END;

答案 2 :(得分:0)

我不相信在IF条件下支持子查询... PL / SQL期望SELECT给它一组记录,而不是在表达式/语句中使用的单个值。