下面的 PLSQL 条件似乎没问题,但出现 PLS-00103 异常

The below PLSQL Condition seems Ok but getting PLS-00103 Exception

if (insflag = 'P' and (dd_flag = 'DC' || dd_flag != 'CC' || dd_flag != 'BC' || dd_flag != 'AC')) then
{
        select * from tabOne;
}
elsif (del_flag = 'DC' || del_flag = 'CC' || del_flag = 'BC' || del_flag = 'AC') then
{
        select * from tabTwo;
}

异常:

 PLS-00103: Encountered the symbol "=" when expecting one of the
         following:
         . ( ) , * @ % & - + / at mod remainder rem <an exponent (**)>
         and or as ||
         The symbol ")" was substituted for "=" to continue.

好像还可以?我不这么认为。这是 Oracle 的 PL/SQL,所以:

    应该使用
  • OR,而不是双管道 ||(即 Oracle 中的 concatenation 运算符)
  • 没有大括号
  • 你不见了END IF

修复后:

   IF (    insflag = 'P'
       AND (   dd_flag = 'DC'
            OR dd_flag != 'CC'
            OR dd_flag != 'BC'
            OR dd_flag != 'AC'))
   THEN
      SELECT * FROM tabOne;
   ELSIF (   del_flag = 'DC'
          OR del_flag = 'CC'
          OR del_flag = 'BC'
          OR del_flag = 'AC')
   THEN
      SELECT * FROM tabTwo;
   END IF;

然而,这仍然是错误的并且不会起作用,因为 - 在 PL/SQL - 你必须 select into somethingselect * 建议您将 selecting 这些表中的所有行,因此您很可能无法使用标量变量。一种选择是使用批量操作并将 select 所有内容 放入数组中。

基本上,这取决于你想做什么。