无法在DB2中取消查询

时间:2016-11-16 00:16:54

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

结果,我得到以下内容:

enter image description here

但是,如果我再次执行获取连接ID的查询,则看起来连接ID似乎不见了。我仍然得到返回的36547值。

我很困惑这个查询取消是否正常工作。我正在执行代码的不同环境中收到一系列不同类型的错误。

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

Cannot cancel queries: Java::ComIbmDb2JccAm::SqlDataException: DB2 SQL Error: SQLCODE=-802, SQLSTATE=22003, SQLERRMC=null, DRIVER=4.16.53

我很好奇我做错了什么?

1 个答案:

答案 0 :(得分:2)

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

  

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

在您的程序中,您正在寻找应用程序句柄,uow和特定的活动ID。你看过你要取消的活动是/正在做什么的?您可以使用WLM_CAPTURE_ACTIVITY_IN_PROGRESS首先转储有关该活动的信息,以便您可以调试您的方案。