DBMS_PARALLEL_EXECUTE.drop_任务仅当存在时-Oracle 11g

DBMS_PARALLEL_EXECUTE.drop_任务仅当存在时-Oracle 11g,oracle,plsql,oracle11g,parallel-processing,Oracle,Plsql,Oracle11g,Parallel Processing,在我的oracle过程中,我创建了一个并行执行的任务 DBMS_PARALLEL_EXECUTE.create_task('xyz'); 在程序结束时,我会将任务作为 DBMS_PARALLEL_EXECUTE.drop_task('xyz'); 但是,是否有一种简单的方法可以检查“xyz”任务是否存在(它可能处于任何状态,也可能根本不存在),并在创建具有相同名称的新任务之前将其删除 您可以查询表USER\u PARALLEL\u EXECUTE\u TASKS或DBA\u PARALLEL

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

DBMS_PARALLEL_EXECUTE.create_task('xyz');
在程序结束时,我会将任务作为

DBMS_PARALLEL_EXECUTE.drop_task('xyz');

但是,是否有一种简单的方法可以检查“xyz”任务是否存在(它可能处于任何状态,也可能根本不存在),并在创建具有相同名称的新任务之前将其删除

您可以查询表
USER\u PARALLEL\u EXECUTE\u TASKS
DBA\u PARALLEL\u EXECUTE\u TASKS
,检查任务是否存在

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;

如果您删除一个不存在的任务,将引发
任务\u not\u FOUND
异常

SQL>
SQL>exec DBMS_PARALLEL_EXECUTE.DROP_TASK('NOTEXIST');
从命令中的第3行开始时出错-
开始DBMS_PARALLEL_EXECUTE.DROP_任务('NOTEXIST');结束;
错误报告-
ORA-29498:未找到任务
ORA-06512:在“SYS.DBMS\u PARALLEL\u EXECUTE\u INTERNAL”第219行
ORA-06512:“系统数据库管理系统并行执行内部”第316行
ORA-06512:SYS.DBMS_PARALLEL_EXECUTE第100行
ORA-06512:在第1行
2949800000-“未找到任务”
*原因:任务不存在。
*操作:使用现有任务。
因此,您可以放弃任务,然后像这样捕获异常

SQL>begin
2个DBMS_PARALLEL_EXECUTE.DROP_任务('NOTEXIST');
3例外情况
4当DBMS_PARALLEL_EXECUTE.TASK_未找到时,则为NULL;
5结束;
PL/SQL过程已成功完成。