代码之家  ›  专栏  ›  技术社区  ›  ES.

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

  •  0
  • ES.  · 技术社区  · 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查询中使用类似代码 操作员工作。

    1 回复  |  直到 1 年前
        1
  •  1
  •   Massi FD    1 年前

    不能在运算符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;
    

    非常感谢。