sql - IF EXISTS 条件不适用于 PLSQL

标签 sql oracle if-statement plsql

当条件为 TRUE 时,我试图打印 TEXT。选择代码完全正常。当我只运行选择代码时,它显示 403 值。但是当条件存在时我必须打印一些文本。以下代码有什么问题。

BEGIN
IF EXISTS(
SELECT CE.S_REGNO FROM
COURSEOFFERING CO
JOIN CO_ENROLMENT CE
  ON CE.CO_ID = CO.CO_ID
WHERE CE.S_REGNO=403 AND CE.COE_COMPLETIONSTATUS = 'C' AND CO.C_ID = 803
)
THEN
    DBMS_OUTPUT.put_line('YES YOU CAN');
END;

这是错误报告:
Error report:
ORA-06550: line 5, column 1:
PLS-00103: Encountered the symbol "JOIN" when expecting one of the following:

   ) , with group having intersect minus start union where
   connect
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

最佳答案

IF EXISTS()在语义上是不正确的。 EXISTS条件只能在 SQL 语句中使用。因此,您可以按如下方式重写 pl/sql 块:

declare
  l_exst number(1);
begin
  select case 
           when exists(select ce.s_regno 
                         from courseoffering co
                         join co_enrolment ce
                           on ce.co_id = co.co_id
                        where ce.s_regno=403 
                          and ce.coe_completionstatus = 'C' 
                          and ce.c_id = 803
                          and rownum = 1
                        )
           then 1
           else 0
         end  into l_exst
  from dual;

  if l_exst = 1 
  then
    DBMS_OUTPUT.put_line('YES YOU CAN');
  else
    DBMS_OUTPUT.put_line('YOU CANNOT'); 
  end if;
end;

或者您可以简单地使用 count函数确实确定查询返回的行数,并且rownum=1谓词 - 您只需要知道记录是否存在:
declare
  l_exst number;
begin
   select count(*) 
     into l_exst
     from courseoffering co
          join co_enrolment ce
            on ce.co_id = co.co_id
    where ce.s_regno=403 
      and ce.coe_completionstatus = 'C' 
      and ce.c_id = 803
      and rownum = 1;

  if l_exst = 0
  then
    DBMS_OUTPUT.put_line('YOU CANNOT');
  else
    DBMS_OUTPUT.put_line('YES YOU CAN');
  end if;
end;

关于sql - IF EXISTS 条件不适用于 PLSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13217600/

相关文章:

Python - 通过 pandas 数据帧迭代并分配和有条件更新日期时间变量

Python 简化 'If' 语句

java - 程序因文本字段为空而崩溃

java - 如何让用户决定按钮的特定颜色

sql - PostgreSQL,选择行直到达到并超过一定数量

mysql - 如何根据关联表获取数据?

Java 读取 Oracle EXP 命令输出

数据库分区 - 分区列

sql - Oracle:日期至半年

相当于 foreach 循环的 Oracle PL