无法通过 DB2 中的光标打印数据

Unable to Print the Data Via Cursor in DB2

代码:

BEGIN   
  DECLARE EMPID INT DEFAULT 0;
  CALL dbms_output.put_line ('EMPID-' || EMPID);
  DECLARE c1 CURSOR FOR  select EMPLOYEE_ID from EMP.EMPLOYEESDET;
  OPEN c1;
  LOOP
  FETCH c1  INTO EMPID;
  CALL dbms_output.put_line ('Display EMPID-' || EMPID);
  end loop;
  close c1;
END
@

错误:

[Code: -104, SQL State: 42601]  An unexpected token <cursor declaration> was found following.  

Expected tokens may include:  <SQL statement>.. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.28.11

当使用带有复合 SQL(内联)的匿名块时,有效的语句是 SQL 语句的子集。 documentation 说明哪些语句是有效的。

具体来说,您只能在复合 SQL(已编译)块(即 routine/stored-procedure 内)中使用 DECLARE CURSOR。

相反,您应该像这样在匿名块中使用 FOR 语句:

BEGIN   
  DECLARE EMPID INT DEFAULT 0;
  CALL dbms_output.put_line ('EMPID-' || EMPID );
  FOR ROW AS select EMPLOYEE_ID from EMP.EMPLOYEESDET
  DO
      CALL dbms_output.put_line ('Display EMPID- ' || EMPID);
  end FOR;
END
@

如果可能的话,您的代码应该单独处理 EMPID 为 NULL 的情况(例如,使用 coalesce(empid, ...)。