在我的oracle过程中,我正在创建一个并行执行的任务。
DBMS_PARALLEL_EXECUTE.create_task('xyz');
在程序结束时,我将任务丢弃为
DBMS_PARALLEL_EXECUTE.drop_task('xyz');
然而,是否有一种简单的方法来检查' xyz'任务存在(它可以处于任何状态或根本不存在)并在创建具有相同名称的新任务之前删除它。
答案 0 :(得分:2)
您可以查询表格SQL> select TASK_NAME,STATUS FROM user_parallel_execute_tasks WHERE TASK_NAME = 'xyz';
TASK_NAME |STATUS
--------------------------------------------
xyz |CREATED
或SELECT COUNT(*)
INTO ct
FROM user_parallel_execute_tasks
WHERE task_name = p_task_name;
IF ct > 0 THEN
DBMS_PARALLEL_EXECUTE.DROP_TASK(p_task_name);
END IF;
以检查任务是否存在。
addEventListner()
所以,在你的程序中添加这样的东西。
onclick()
答案 1 :(得分:1)
如果删除不存在的任务,则抛出TASK_NOT_FOUND
异常
SQL>
SQL> exec DBMS_PARALLEL_EXECUTE.DROP_TASK('NOTEXIST');
Error starting at line : 3 in command -
BEGIN DBMS_PARALLEL_EXECUTE.DROP_TASK('NOTEXIST'); END;
Error report -
ORA-29498: task not found
ORA-06512: at "SYS.DBMS_PARALLEL_EXECUTE_INTERNAL", line 219
ORA-06512: at "SYS.DBMS_PARALLEL_EXECUTE_INTERNAL", line 316
ORA-06512: at "SYS.DBMS_PARALLEL_EXECUTE", line 100
ORA-06512: at line 1
29498. 00000 - "task not found"
*Cause: The task did not exist.
*Action: Use an existing task.
所以你可以放弃任务并像这样捕捉异常
SQL> begin
2 DBMS_PARALLEL_EXECUTE.DROP_TASK('NOTEXIST');
3 exception
4 WHEN DBMS_PARALLEL_EXECUTE.TASK_NOT_FOUND THEN NULL;
5 END;
PL/SQL procedure successfully completed.