下面的 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 something。 select *
建议您将 selecting 这些表中的所有行,因此您很可能无法使用标量变量。一种选择是使用批量操作并将 select 所有内容 放入数组中。
基本上,这取决于你想做什么。
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 something。 select *
建议您将 selecting 这些表中的所有行,因此您很可能无法使用标量变量。一种选择是使用批量操作并将 select 所有内容 放入数组中。
基本上,这取决于你想做什么。