Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Можно хранимую процедуру с параметрами из задания выполнить?  [new]
nufnuf13
Member

Откуда:
Сообщений: 6
Вот как это корректно написать можно:
BEGIN
DBMS_SCHEDULER.CREATE_JOB
( job_name => 'go_internal_railroad_hist'
, job_type => 'STORED_PROCEDURE'
, job_action => 'XXRWC_DATA_SET.uds_internal_railroad_hist('01.01.2018','31.01.2018')'
, enabled => TRUE
);
END;
3 окт 18, 12:40    [21693959]     Ответить | Цитировать Сообщить модератору
 Re: Можно хранимую процедуру с параметрами из задания выполнить?  [new]
merch
Member

Откуда:
Сообщений: 127
nufnuf13,

тебе нужно "выполнить немедленно".
3 окт 18, 13:02    [21693981]     Ответить | Цитировать Сообщить модератору
 Re: Можно хранимую процедуру с параметрами из задания выполнить?  [new]
merch
Member

Откуда:
Сообщений: 127
nufnuf13, хотя я наверное тебя не так понял.
Видимо, в твоем случае просто

''01.01.2018'',''31.01.2018''
3 окт 18, 13:06    [21693984]     Ответить | Цитировать Сообщить модератору
 Re: Можно хранимую процедуру с параметрами из задания выполнить?  [new]
nufnuf13
Member

Откуда:
Сообщений: 6
Обычным способом вот так запускаю:
exec XXRWC_DATA_SET.uds_internal_railroad_hist(to_date('01.01.2018','dd.mm.rrrr'),to_date('31.01.2018','dd.mm.rrrr'))
3 окт 18, 14:28    [21694115]     Ответить | Цитировать Сообщить модератору
 Re: Можно хранимую процедуру с параметрами из задания выполнить?  [new]
nufnuf13
Member

Откуда:
Сообщений: 6
А как здесь DBMS_SCHEDULER.CREATE_JOB это же написать.
3 окт 18, 14:29    [21694117]     Ответить | Цитировать Сообщить модератору
 Re: Можно хранимую процедуру с параметрами из задания выполнить?  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9244
nufnuf13
А как здесь DBMS_SCHEDULER.CREATE_JOB это же написать.


Используй Q-литералы если есть кавычки внутри строковых литералов. Для дат используй DATE литералы:

BEGIN
    DBMS_SCHEDULER.CREATE_JOB(
                              job_name => 'go_internal_railroad_hist',
                              job_type => 'STORED_PROCEDURE',
                              job_action => Q'[XXRWC_DATA_SET.uds_internal_railroad_hist(
                                                                                         DATE '2018-01-01',
                                                                                         DATE '2018-01-31'
                                                                                        )]',
                              enabled => TRUE
                             );
END;


Ну а смысл создавать одноразовый job я оставлю тебе на размышление.

SY.
3 окт 18, 14:43    [21694140]     Ответить | Цитировать Сообщить модератору
 Re: Можно хранимую процедуру с параметрами из задания выполнить?  [new]
nufnuf13
Member

Откуда:
Сообщений: 6
SY, Спасибки, но завершается с ошибкой :
Error report -
ORA-27452: XXRWC_DATA_SET.uds_internal_railroad_hist(
DATE '2018-01-01',
DATE '2018-01-31'
) является недопустимым именем объекта базы данных.
ORA-06512: на "SYS.DBMS_ISCHED", line 135
ORA-06512: на "SYS.DBMS_SCHEDULER", line 271
ORA-06512: на line 2
27452. 00000 - "\"%s\" is an invalid name for a database object."
*Cause: An invalid name was used to identify a database object.
*Action: Reissue the command using a valid name.
3 окт 18, 15:06    [21694185]     Ответить | Цитировать Сообщить модератору
 Re: Можно хранимую процедуру с параметрами из задания выполнить?  [new]
nufnuf13
Member

Откуда:
Сообщений: 6
На счет одноразовости: у меня есть процедура одноразовая (ну так уж получилось..) и многоразовая(без параметров).
И мне стало интересно, как с параметрами можно запустить. Вот такая история :)
3 окт 18, 15:09    [21694186]     Ответить | Цитировать Сообщить модератору
 Re: Можно хранимую процедуру с параметрами из задания выполнить?  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9244
nufnuf13
Спасибки, но завершается с ошибкой :


Упс:

BEGIN
    DBMS_SCHEDULER.CREATE_JOB(
                              job_name => 'go_internal_railroad_hist',
                              job_type => 'PLSQL_BLOCK',
                              job_action => Q'[BEGIN XXRWC_DATA_SET.uds_internal_railroad_hist(
                                                                                               DATE '2018-01-01',
                                                                                               DATE '2018-01-31'
                                                                                              ); END;]',
                              enabled => TRUE
                             );
END;


JOB_TYPE STORED_PROCEDURE параметров не поддерживает:

SQL> create or replace
  2    procedure p1(n number)
  3      is
  4      begin
  5          null;
  6  end;
  7  /

Procedure created.

SQL> BEGIN
  2      DBMS_SCHEDULER.CREATE_JOB(
  3                                job_name => 'go_internal_railroad_hist',
  4                                job_type => 'STORED_PROCEDURE',
  5                                job_action => 'SCOTT.P1(1)',
  6                                enabled => TRUE
  7                               );
  8  END;
  9  /
BEGIN
*
ERROR at line 1:
ORA-27452: "SCOTT.P1(1)" is an invalid name for a database object.
ORA-06512: at "SYS.DBMS_ISCHED", line 175
ORA-06512: at "SYS.DBMS_SCHEDULER", line 288
ORA-06512: at line 2


SQL> BEGIN
  2      DBMS_SCHEDULER.CREATE_JOB(
  3                                job_name => 'go_internal_railroad_hist',
  4                                job_type => 'PLSQL_BLOCK',
  5                                job_action => 'BEGIN SCOTT.P1(1); END;',
  6                                enabled => TRUE
  7                               );
  8  END;
  9  /

PL/SQL procedure successfully completed.

SQL> 


SY.
3 окт 18, 16:20    [21694285]     Ответить | Цитировать Сообщить модератору
 Re: Можно хранимую процедуру с параметрами из задания выполнить?  [new]
nufnuf13
Member

Откуда:
Сообщений: 6
SY,ясно, завтра попробую, сегодня не успеваю...
3 окт 18, 16:28    [21694292]     Ответить | Цитировать Сообщить модератору
 Re: Можно хранимую процедуру с параметрами из задания выполнить?  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 16916
SY
JOB_TYPE STORED_PROCEDURE параметров не поддерживает

Я бы сказал - JOB_TYPE STORED_PROCEDURE не интерпретирует job_action как pl/sql блок, что как бы логично.
А параметры он вполне себе поддерживает.
Литералы нет, а параметры - да :)
Хинт: надо program создать и задефайнить эти самые параметры.
3 окт 18, 16:38    [21694314]     Ответить | Цитировать Сообщить модератору
 Re: Можно хранимую процедуру с параметрами из задания выполнить?  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28496
andrey_anonymous
Хинт: надо program создать и задефайнить эти самые параметры.
Что-то вы оба недоперегибаете…
+
SQL> BEGIN
  2    DBMS_SCHEDULER.create_job(
  3      job_name            => 'QZ_JOB'
  4     ,job_type            => 'STORED_PROCEDURE'
  5     ,job_action          => 'DBMS_APPLICATION_INFO.SET_ACTION'
  6     ,number_of_arguments => 1);
  7
  8    DBMS_SCHEDULER.set_job_argument_value(
  9      job_name          => 'QZ_JOB'
 10     ,argument_position => 1
 11     ,argument_value    => 'be or not');
 12  END;
 13  /

PL/SQL procedure successfully completed.

SQL> BEGIN
  2    DBMS_SCHEDULER.run_job(
  3      job_name            => 'QZ_JOB'
  4     ,use_current_session => TRUE);
  5  END;
  6  /

PL/SQL procedure successfully completed.

SQL>
SQL> select action from v$session where sid = sys_context('userenv', 'sid');

ACTION
----------------------------------------------------------------
be or not

1 row selected.

SQL>
SQL> exec  DBMS_SCHEDULER.drop_job('QZ_JOB');

PL/SQL procedure successfully completed.
3 окт 18, 17:01    [21694348]     Ответить | Цитировать Сообщить модератору
 Re: Можно хранимую процедуру с параметрами из задания выполнить?  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9244
А какой смысл при одноразовом выполнении?

При многоразовом тоже смысла не так чтобы:

JOB_TYPE STORED_PROCEDURE:

1. DBMS_SCHEDULER.create_job - один раз
2. DBMS_SCHEDULER.set_job_argument_value - каждый раз перед выполнением

JOB_TYPE PLSQL_BLOCK:

1. DBMS_SCHEDULER.create_job - каждый раз когда нужно выполнить

За исключеним экзотики когда значения параметров для следующего выполнения становятся известны сразу после текущего выполнения a потом пропадают и DBMS_SCHEDULER.set_job_argument_value можно засунуть в SP.

SY.
3 окт 18, 17:20    [21694374]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить