Существует очень простой способ использования функции cut ():
list = as.Date(c("1998-5-2", "1993-4-16", "1998-5-10"))
cut(list, breaks = "month")
, и вы получите следующее:
[1] 1998-05-01 1993-04-01 1998-05-01
62 Levels: 1993-04-01 1993-05-01 1993-06-01 1993-07-01 1993-08-01 ... 1998-05-01
Я нашел прием. Я понятия не имею, как безопасный это должно играть с, но это действительно работает. Существует событие Oracle, 10237, который описан, поскольку "моделируют ^C (для тестирования)".
у Вас должны быть SID и SERIAL# сессии, которую Вы хотите прервать.
Вызов SYS.DBMS_SYSTEM.SET_EV ( sid, serial#, 10237, 1, '') для активации события на целевой сессии. Любой в настоящее время выполняющийся оператор должен быть прерван (получение "РТОВ 01013: пользователь запросил отмену текущей операции"). Пока событие установлено, дальнейшие операторы, которые сессия пытается выполнить, сразу завершатся с той же ошибкой.
Для деактивации события выполните тот же вызов с четвертым набором параметра к "0". Сессия затем сможет выполнить операторы снова.
Примечание, что целевая сессия должна обнаружить, что событие установлено, который может занять время, или никогда может не происходить, в зависимости от того, что это делает. Таким образом, Вы не можете только быстро переключить событие на и прочь. Необходимо было бы включить его, проверить, что рассматриваемый оператор остановился, затем выключает его.
Вот некоторый пример кода. Это предназначено, чтобы быть выполненным как анонимный блок в SQLPlus с подставляемыми переменными "sid" и "последовательное" определенный соответственно. Вы могли превратить его в хранимую процедуру с теми как ее параметры.
DECLARE
l_status v$session.status%TYPE;
BEGIN
dbms_system.set_ev( &sid, &serial, 10237, 1, '');
LOOP
SELECT status INTO l_status FROM v$session
WHERE sid = &sid and serial# = &serial;
EXIT WHEN l_status='INACTIVE';
END LOOP;
dbms_system.set_ev( &sid, &serial, 10237, 0, '');
END;
Я подозреваю, что это могло бы быть возможно, так как можно сделать это у ЖАБЫ. Пока запрос работает, диалоговое окно Отмены подходит, который можно поразить для остановки запроса.
, Как это реализовано, я не знаю, но очень был бы интересно узнавать также.
при использовании Java, существует java.sql. Отмена оператора () метод, который, как предполагается, делает это. Посмотрите здесь для некоторых примечаний и ограничений...
http://download.oracle.com/docs/cd/B14117_01/java.101/b10979/tips.htm#BACDAICJ
Вы могли посмотреть на Пределы Ресурса:
, "Если пользователь превышает предел ресурса уровня вызова, то Oracle останавливает обработку оператора, откатывает оператор и возвращает ошибку. Однако все предыдущие операторы текущей транзакции остаются неповрежденными, и сессия пользователя остается связанной".
, Который принимает, причиной отмены SQL является предел ресурса, а не это обновляющий неправильный набор строк (например). Я подозреваю, что Вы не смогли бы влиять на в настоящее время рабочий SQL посредством добавления предела ресурса.
http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/security.htm#i13767
http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/dbrm.htm#i1010776