代码之家  ›  专栏  ›  技术社区  ›  NuCradle

这个布尔变量在PL/SQL代码中的减容和使用有什么问题?

  •  1
  • NuCradle  · 技术社区  · 6 年前

    我正在尝试编译以下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 回复  |  直到 6 年前
        1
  •  5
  •   Wernfried Domscheit    6 年前

    你不能使用 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
    

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