Это скорее резервная копия других ответов.
Большая проблема, с которой вы столкнетесь, заключается в том, что, хотя можно убить поток Java, блок pl / sql может продолжить выполняться на сервере некоторое время спустя.
У меня былоэта проблема с кодом C в прошлом, и вы можете либо попытаться отправить «отмена» на сервер и подождать, пока оно не будет подтверждено (что может быть никогда), либо «сделать все возможное», в любом случае прервать работающий поток,Позвольте очистить Oracle позже, когда он обнаружит, что клиентский процесс завершился.
Ответ APC хорош - это звучит как идеальный случай для фонового планировщика заданий Oracle, который предлагает хороший обзор выполнения задач иAPI для запуска / остановки / и т. Д.
Небольшое преимущество заключается в том, что вы не связываете соединения из своего пула соединений JDBC с длительными транзакциями.
Где, я думаю, у вас все еще может бытьпроблема остановки выполняющейся задачи в середине.Документация Oracle для DBMS_JOB гласит, что нет способа остановить задание после его запуска.
Одно из решений, которое я сделал, - периодически проверять фоновое задание на состояние выхода (т. Е. Существует ли строка втаблица) - но это работает, только если у вас есть цикл.