我是PLSQL(IDM db2)的新手,我正在尝试创建一个过程来查找和删除一些admin_tasks(如果存在)。
说明:通过运行下面的query 1,我可以找到调度程序中的任务列表:
SELECT * FROM SYSTOOLS.ADMIN_TASK_LIST;
要删除任务,我可以运行以下query 2:
call sysproc.admin_task_remove('TASK_NAME', null);
因此,我想创建一个过程来删除所有模式为“My_Task_"的任务。这应该会删除所有模式为”My_Task_“的任务,而保留其他现有任务不变。该过程应该处理admin_tasks不存在或没有创建admin_tasks的情况,并且应该在运行时不会引发任何错误。
我研究了一下,发现这可以通过使用游标来实现。
你能帮我实现这一点吗?
编辑:我设法找到了这个解决方案:
BEGIN
FOR v1 AS c1 CURSOR FOR
SELECT NAME
FROM SYSTOOLS.ADMIN_TASK_LIST
WHERE NAME LIKE 'My\_task\_%' ESCAPE '\'
DO
call sysproc.admin_task_remove(NAME, null);
END FOR;
END
除非尚未定义SYSTOOLS.ADMIN_TASK_LIST,否则这似乎是有效的。
如果未定义,则在运行查询时会出现以下错误:如果未定义,则会出现以下错误:[代码:-204,SQL状态:小行星42704
“SYSTOOLS.ADMIN_TASK_LIST”是一个未定义的名称。
那么我该如何绕过这个错误呢?首先检查SYSTOOLS.ADMIN_TASK_LIST是否被定义,如果它被定义到上面的查询中,如果没有,什么都不做。
1条答案
按热度按时间yc0p9oo01#
假设您的客户端工具使用“@”作为语句分隔符。
更新日期:
对不存在的表进行错误处理。错误处理程序只是“吃掉”使用不存在的表时的错误。您必须使用动态SQL来完成此操作。