无法通过 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, ...)。
代码:
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, ...)。