PL/SQL代码中的布尔变量解析和用法有什么问题?

NuC*_*dle 1 sql oracle variables plsql compiler-errors

我正在尝试编译以下PL/SQL:

PROCEDURE SP(INPUT1 IN VARCHAR2)
  V_BOL BOOLEAN := FALSE;
BEGIN
  IF (INPUT1 = 'XYZ')
    THEN V_BOL := TRUE;
  END IF;

  UPDATE T1 /* Line 17 */
  SET T1.C1 = (
    SELECT CASE
      WHEN (V_BOL AND T1.N1 BETWEEN 1 AND 10) THEN 'J' /* Line 20 */
      END
    FROM DUAL)
...
Run Code Online (Sandbox Code Playgroud)

但是得到以下错误:

Error(17,9): PL/SQL: SQL Statement ignored
Error(20,18): PL/SQL: ORA-00920: invalid relational operator
Run Code Online (Sandbox Code Playgroud)

Wer*_*eit 5

您不能BOOLEAN在SQL语句中使用变量(除非Oracle在最近的版本中更改了它),即**V_BOL**无效.

UPDATE T1 SET T1.C1 = 
CASE WHEN (**V_BOL** AND T1.N1 BETWEEN 1 AND 10) THEN 'J' else null end
Run Code Online (Sandbox Code Playgroud)

使用简单的SQL数据类型,即INTEGER(0/1)