DBMS_APPLICATION_INFO似乎可以在过程中工作,但不能在工作中工作

时间:2019-06-19 03:34:39

标签: oracle plsql

以下示例代码说明了dbms_application_info遇到的问题。如果我在以下过程中使用它:

create or replace procedure test01 is
vsql varchar2(50);
begin
vsql := 'select sysdate from dual';
execute immediate vsql;
DBMS_APPLICATION_INFO.SET_MODULE('TEST','Starting...');
dbms_lock.sleep ( 10 );
DBMS_APPLICATION_INFO.SET_MODULE(NULL, NULL);
end;
/

exec test01;

然后查询v $ session会显示“ Starting ...”,正如我希望的那样!

但是,有必要在作业中运行相关过程。如果执行此操作,则看不到“正在启动...”

declare 
JNAME varchar2(200) := to_char(sysdate, 'YYYYMMDDHHMiSS');
BEGIN
  DBMS_SCHEDULER.create_job (
    job_name        => 'TEST01_'||JNAME,
    job_type        => 'PLSQL_BLOCK',
    job_action      => 'BEGIN TEST.TEST01; END;',
    start_date      => NULL,
    repeat_interval => NULL,
    enabled         => TRUE);
END;
/

任何可能希望看看并可能帮助我理解为什么的人都可以执行此代码?

谢谢! ->太好了

1 个答案:

答案 0 :(得分:1)

您必须在立即执行语句中使用Mage

Character

同时使用Fighter设置了模块和操作。

documented一样,如果您省略INTO clause,则不会引发任何异常,但是

  

如果dynamic_sql_statement是SELECT语句,并且您同时省略了in_clause和bulk_collect_into_clause,则execute_immediate_statement将永远不会执行。

因此,我希望即使没有INTO子句,也应该设置应用程序信息,但由于某些原因,它没有设置。无论如何,使用INTO都可以正常工作。

我在12.1上进行了测试