DBMS_PARALLEL_EXECUTE.drop_task只有在它存在的情况下 - Oracle 11g

时间:2018-04-06 14:13:24

标签: oracle plsql oracle11g parallel-processing

在我的oracle过程中,我正在创建一个并行执行的任务。

DBMS_PARALLEL_EXECUTE.create_task('xyz');

在程序结束时,我将任务丢弃为

DBMS_PARALLEL_EXECUTE.drop_task('xyz');

然而,是否有一种简单的方法来检查' xyz'任务存在(它可以处于任何状态或根本不存在)并在创建具有相同名称的新任务之前删除它。

2 个答案:

答案 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.