我有一个类似于下面的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条件中支持子查询。
注意:语句已经简化了,我真的不会得到整个表的计数,所以没有优化建议请
答案 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给它一组记录,而不是在表达式/语句中使用的单个值。