DBMS_APPLICATION_INFO, кажется, работает в процедуре, но не в работе - PullRequest
0 голосов
/ 19 июня 2019

Приведенный ниже пример кода иллюстрирует проблему, которую я имею с 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;
/

Этот код должен выполняться любым, кто потенциально хочет посмотреть и, возможно, помочь мне понять, почему это так?

Спасибо!-> Scouse.

1 Ответ

1 голос
/ 19 июня 2019

Вы должны использовать INTO clause в своем немедленном выполнении оператора

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 clause, установлены и модуль, и действие.

Как задокументировано если вы пропустите INTO clause, исключение не возникает, но

Если dynamic_sql_statement является оператором SELECT, и вы опускаете оба параметра into_clause и bulk_collect_into_clause, то execute_immediate_statement никогда не выполняется.

Таким образом, я ожидаю, что информация приложения должна быть установлена ​​даже без предложения INTO, но по некоторым причинам это не так.В любом случае, используя INTO, он работает нормально.

Я тестировал на 12,1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...