PL/SQL 代码中带有 IN 运算符的 IF 语句

问题描述 投票:0回答:1

我想使用

VARCHAR2
运算符比较值(
IN
与列表中的值之一)。例如,值是 A,列表值是 B 和 C。值是

有效的简单静态代码:

IF 'A' NOT IN ('B', 'C') THEN
    DBMS_OUTPUT.PUT_LINE('Not');
ELSE
    DBMS_OUTPUT.PUT_LINE('In');
END IF;

非工作动态代码:

IF 'A' NOT IN ( SELECT COLUMN_VALUE FROM APEX_STRING.SPLIT('B:C', ':') ) THEN
    DBMS_OUTPUT.PUT_LINE('Not');
ELSE
    DBMS_OUTPUT.PUT_LINE('In');
END IF;

出现错误:

Error at line 39/48: ORA-06550: line 20, column 67:
PLS-00103: Encountered the symbol "(" when expecting one of the following:

   . ) , @ with <an identifier>
   <a double-quoted delimited-identifier> group having intersect
   minus partition start subpartition union where connect sample
The symbol "having" was substituted for "(" to continue.

不明白哪里出错了。在 SQL 查询中,使用

IN
运算符的类似代码可以工作。

plsql oracle-apex
1个回答
0
投票

不能在运算符 IN 中使用 SELECT。您必须在执行查询 INTO 变量之前并在 IF TEST 中使用 after 。 例如使用计数功能:

SELECT count(*)
  INTO my_var
  FROM APEX_STRING.SPLIT('B:C', ':')
 WHERE COLUMN_VALUE  = 'A';

IF my_var > 0  THEN
   DBMS_OUTPUT.PUT_LINE('Not');
ELSE
   DBMS_OUTPUT.PUT_LINE('In');
END IF;

谢谢你。

© www.soinside.com 2019 - 2024. All rights reserved.