Используемое вами DBMS_SCHEDULER.CREATE_JOB
содержит неверные аргументы. Желательно следовать этим стандартным шагам для запуска программы.
Сначала создайте программу с соответствующим именем и определите, что запускать. В приведенном ниже примере я запускаю команду bash
напрямую. Вы можете поместить их в отдельный сценарий оболочки с соответствующими разрешениями и добавить его имя в program_action
BEGIN
DBMS_SCHEDULER.CREATE_PROGRAM (
program_name=> 'COPY_PROGRAM',
program_type=> 'EXECUTABLE',
program_action => '/bin/bash -c "echo hello world"',
enabled=> TRUE,
comments=> 'Push files to Amazon S3 Bucket.'
);
END;
/
. Затем создайте задание, используя эта программа.
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'TEST_JOB',
program_name => 'COPY_PROGRAM',
start_date => NULL,
repeat_interval => NULL,
end_date => NULL,
enabled => FALSE,
auto_drop => FALSE,
comments => '');
END;
/
См. эту ссылку для более подробной информации.
Я думаю, что ответ должен содержать дескриптор к msclr:: com:: ptr вместо того, чтобы содержать его 'значением' (который все еще содержит его как, дескриптор 'негласно', кроме компилятора CLI C++ рассматривает его как значение - 'удаление' его (вызов Располагают), когда объект владельца удален (Склонный)).
Я не уверен, что соглашаюсь с объяснением для предотвращения реализации IDispose - но почему не только хранят IWhatever* в Вашем классе. Компилятор не должен затем генерировать реализацию IDisposable.
Если Вы не хотите поведения деструктора затем, какое преимущество является com:: обертка ptr, покупая Вас? Можно всегда объявлять com:: ptr на стеке и присваивают Ваш членский указатель на него в любом данном методе при реальной необходимости в нем.