3

我有一个类似于下面的 If 语句块,它因错误而失败 - PLS-00103:在期望以下之一时遇到符号“SELECT”....

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

我有类似的案例陈述,效果很好

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

从我在 Oracle 文档中读到的 if 和 when 支持布尔表达式,如果条件中是否支持子查询的任何想法。

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

4

3 回答 3

6

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

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

于 2009-05-01T11:54:55.353 回答
0

你有没有打电话给 DBMS_OUTPUT.ENABLE

快速示例

BEGIN
DBMS_OUTPUT.DISABLE;
DBMS_OUTPUT.PUT_LINE('Disabled');
DBMS_OUTPUT.ENABLE;
DBMS_OUTPUT.PUT_LINE('Enabled');
END;
于 2009-05-01T10:46:27.640 回答
0

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

于 2009-05-01T11:24:09.407 回答