Stored procedures 无法取消DB2中的查询

Stored procedures 无法取消DB2中的查询,stored-procedures,db2,Stored Procedures,Db2,我在DB2中有以下存储过程: CREATE OR REPLACE PROCEDURE CANCEL_ACTIVITY (IN application_handle INTEGER) LANGUAGE SQL BEGIN DECLARE UOW_ID INTEGER; DECLARE ACTIVITY_ID INTEGER; FOR v AS cur1 CURSOR FOR SELECT UOW_ID, ACTIVITY_ID FROM TABLE(SYSPROC.MO

我在DB2中有以下存储过程:

CREATE OR REPLACE PROCEDURE CANCEL_ACTIVITY (IN application_handle INTEGER)
  LANGUAGE SQL
BEGIN
  DECLARE UOW_ID INTEGER;
  DECLARE ACTIVITY_ID  INTEGER;

  FOR v AS cur1 CURSOR FOR
    SELECT UOW_ID, ACTIVITY_ID FROM TABLE(SYSPROC.MON_GET_ACTIVITY(application_handle, -1))
  DO
    CALL WLM_CANCEL_ACTIVITY(application_handle, v.uow_id, v.activity_id);
  END FOR ;
END
使用以下查询,我可以找到我的连接ID:

SELECT MON_GET_APPLICATION_HANDLE() from SYSIBM.SYSDUMMY1
它将返回类似于
36547
的值。所以我调用刚才创建的过程,如下所示:

CALL CANCEL_ACTIVITY(36547);
因此,我得出以下结论:

但是,如果我再次执行获取连接ID的查询,则该连接ID似乎不会消失。我仍然得到返回的
36547

我很困惑这个查询取消是否有效。在执行代码的不同环境中,我会遇到一系列不同类型的错误

当我将其作为SQL查询运行时,会得到上面的错误代码/响应。当我的代码在我的网页中执行时,我得到以下错误:

Cannot cancel queries: Java::ComIbmDb2JccAm::SqlDataException: DB2 SQL Error: SQLCODE=-802, SQLSTATE=22003, SQLERRMC=null, DRIVER=4.16.53
我很好奇我做错了什么

我建议您阅读DB2文档。取消活动不是关闭连接,而是有选择地中止查询或其他正在运行的任务:

如果某个活动消耗了太多资源,或正在运行太多 长,你可以取消它。取消一项活动比强制更温和 提交活动的应用程序。取消的活动 将SQL4725N返回给用户,但不结束连接或 影响任何其他用户活动。强制应用程序结束两个 连接和用户活动


在您的过程中,您正在查找应用程序句柄、uow和特定的活动ID。您是否查看了要取消的活动正在/正在执行的内容?您可以使用
WLM\u CAPTURE\u ACTIVITY\u IN\u PROGRESS
首先转储有关该活动的信息,以便调试您的场景。

Hi@data\u henrik--感谢您的解释。这是取消活动的完整查询吗<代码>调用WLM\u取消\u活动(1、2、5)是,应用程序句柄/UOW标识符/活动id。等等,如果你检查我的过程,我就是这么做的,不是吗?我使用
CALL WLM\u CANCEL\u ACTIVITY(..)
您正在传递一个应用程序句柄,但特定的活动被取消。你到底希望取消什么。。。?