Stored procedures 无法取消DB2中的查询
我在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
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(..)
您正在传递一个应用程序句柄,但特定的活动被取消。你到底希望取消什么。。。?