PL / SQL代码中这种布尔变量声明和用法有什么问题?

时间:2018-07-20 19:10:40

标签: 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)
...

但是出现以下错误:

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

1 个答案:

答案 0 :(得分:5)

您不能在SQL语句中使用BOOLEAN变量(除非Oracle在最新版本中进行了更改),即**V_BOL**无效。

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

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