Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle DBMS_应用程序_信息似乎在过程中工作,而不是在作业中_Oracle_Plsql - Fatal编程技术网

Oracle DBMS_应用程序_信息似乎在过程中工作,而不是在作业中

Oracle DBMS_应用程序_信息似乎在过程中工作,而不是在作业中,oracle,plsql,Oracle,Plsql,下面的示例代码说明了我在dbms_应用程序_信息方面遇到的一个问题。如果我在以下过程中使用它: 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_应用程序_信息方面遇到的一个问题。如果我在以下过程中使用它:

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$会话显示正在启动。。。我希望如此

但是,必须在作业中运行相关过程。如果我这样做,那么我就看不到开始

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;
/
这段代码应该是可执行的任何人谁可能希望有一个看,也许可以帮助我理解为什么会这样

谢谢!->利物浦

必须在execute immediate语句中使用INTO子句

create or replace procedure test01 is
vsql varchar2(50);
l_date DATE;
begin
vsql := 'select sysdate from dual';
execute immediate vsql into l_date;  --<<<< here
DBMS_APPLICATION_INFO.SET_MODULE('TEST','Starting...');
dbms_lock.sleep ( 20 );
DBMS_APPLICATION_INFO.SET_MODULE(NULL, NULL);
end;
/
使用INTO子句可以设置模块和操作

就好像你把这个从句写进从句一样,没有例外,但是

若dynamic_sql_语句是SELECT语句,并且您省略了into_子句和bulk_COLLET_into_子句,那个么execute_immediate_语句永远不会执行

所以我希望应用程序信息应该在没有INTO子句的情况下设置,但出于某种原因,它不是。不管怎么说,使用到它的作品很好


我在12.1上进行了测试,在设置任何应用程序信息之前,此过程将引发异常。但它不会。。。我在运行它。SQL>exectest01;PL/SQL过程已成功完成。SQL>您确定作业正在运行吗?选中“从所有作业中选择作业名称、状态”;是 啊状态更改为“运行”…@Scouse_Bob可能太晚了,无法提出此建议,但如果不立即执行,您可能会得到更集中的答案。很多人都会认为它会失败,尽管它实际上并没有失败。嗨,感谢这一点-对我来说,问题是该过程运行良好,或者作为作业运行,或者仅从exec test01运行;但是,如果将其作为作业运行,则在v$session中不会获得引用它按照dbms\u application\u info中的设置运行的条目。它以一种方式工作,但不能以另一种方式工作。这是我的问题…:-/关键是,你想要实现什么。如果你想有一个有意义的完整程序-添加INTO子句,一切都会按预期进行。如果你想理解,为什么你会通过输入INTO子句观察到奇怪的行为,最好的解释可能是@StevenFeuerstein