Чт Июл 03, 2014 10:17  работа операции, без блокировки this
Полезность: Нет оценки
Здравствуйте, уважаемые знатоки.
Решаю такую задачу:
у нас много джобов, и короткое технологическое окно для накатов. при остановке джобов нужно искать сессии и рубить их, что отнимает время.
Озадачился я вопросом создания операции по удалению задания из очереди вместе с его сессией.
однако, при запуске выдает ошибку "неверно предложение на языке SQL"
в теле выполняю execute immediate ibs.method.kill_session
либо ibs.runtime.rtl.sql_execute ...
если я закомменчу этот вариант - операция отрабатывает этот блок, и ошибок не выдает.
Чт Июл 03, 2014 10:34  Re: работа операции, без блокировки this
Полезность: Нет оценки
wolfio пишет:
Здравствуйте, уважаемые знатоки.
Решаю такую задачу:
у нас много джобов, и короткое технологическое окно для накатов. при остановке джобов нужно искать сессии и рубить их, что отнимает время.
Озадачился я вопросом создания операции по удалению задания из очереди вместе с его сессией.
однако, при запуске выдает ошибку "неверно предложение на языке SQL"
в теле выполняю execute immediate ibs.method.kill_session
либо ibs.runtime.rtl.sql_execute ...
если я закомменчу этот вариант - операция отрабатывает этот блок, и ошибок не выдает.
подскажите как найти ошибку? пакет валидный.
Если я правильно понял проблему, то Вам, видимо, нужно взять аргумент execute immediate в одинарные кавычки.
declare
v_session varchar2(200);
begin
select sid||','||serial# into v_session from V$SESSION where sid = ***;
execute immediate 'begin ibs.method.kill_session('''||v_session||'''); end;';
end;
по-моему, ibs.method.kill_session делает тоже самое
Да, но в методе стоит ище журналирование.
Все оказалось проще, я не правильно передавал параметры в kill_session.
думал что нужно передать 2 параметра, sid и serial#, а оказалось, что это один параметр.
declare
v_session varchar2(200);
begin
select sid||','||serial# into v_session from V$SESSION where sid = ***;
execute immediate 'begin ibs.method.kill_session('''||v_session||'''); end;';
end;
Зачем execute immediate?
установить галочку "Расширенный синтаксис" и можно писать сразу method.kill_session();
Зачем execute immediate?
установить галочку "Расширенный синтаксис" и можно писать сразу method.kill_session();
Это был pl/sql, если вы не обратили внимание (into v_session from) - Человек в вопросе писал:
wolfio пишет:
в теле выполняю execute immediate ibs.method.kill_session
либо ibs.runtime.rtl.sql_execute ...
если я закомменчу этот вариант - операция отрабатывает этот блок, и ошибок не выдает.
wolfio пишет:
Все оказалось проще, я не правильно передавал параметры в kill_session
Надеюсь информация вам помогла:
Reddom пишет:
select sid||','||serial# into v_session from V$SESSION where sid = ***;
execute immediate 'begin ibs.method.kill_session('''||v_session||'''); end;';
В любом случае, я не понимаю, зачем нужен execute immediate.
чем прямой вызов не нравится?
ну так в прямом вызове надо будет делать pl/sql вставку
зачем она, если можно использовать execute immediate? у него есть серьезные отличия от прямого вызова?
В любом случае, я не понимаю, зачем нужен execute immediate.
чем прямой вызов не нравится?
ну так в прямом вызове надо будет делать pl/sql вставку
зачем она, если можно использовать execute immediate? у него есть серьезные отличия от прямого вызова?
И pl/sql-вставку делать не надо.
Всё и так хорошо, прямым включением вызова в тело операции.
Просто включи флажок "Расширенный синтаксис"
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
Домен cftclub.ru не связан с ЗАО "Центр Финансовых Технологий" и ни в коей мере не нарушает авторских и иных прав
Владелец может не разделять мнения Участников и не несет ответственности за их публикации
Powered by phpBB