Что-то я столкнулся с попыткой сделать это прежде, - то, что немного веб-страниц являются правильно построенными XML-документами. Hpricot может быть в состоянии иметь дело с тем (я не использовал его), но когда я делал подобный проект в прошлом (использующий Python, и его библиотека создала в парсинге функций), он помог иметь препроцессор для чистки HTML. Я использовал привязку Python для HTML, Опрятный как это, и он сделал жизнь намного легче. Привязка Ruby здесь , но я не судил их.
Удачи!
Как ни странно, с выпуском 11gR2 на этой неделе (2009-09 -03), SQL * Plus теперь имеет возможность COMMIT или ROLLBACK при EXIT. Документ здесь
Я предполагаю, что в ближайшие несколько недель / месяцев появится мгновенный клиент 11gR2, который вы можете использовать в своей текущей базе данных и добиться желаемого поведения.
Предупреждение, о котором следует помнить . Если вы ОТКЛЮЧИТЕ или ПОДКЛЮЧИТЕ к другому сеансу, транзакция все равно будет неявно зафиксирована (согласно документу).
Это было дизайнерское решение Oracle, вероятно, принятое более 20 лет назад. Я бы использовал не такой дизайн. Обратите внимание, что это, по-видимому, свойство SQL * Plus, а не базового OCI.
Если сеанс внезапно завершается, AFAIK, сеанс откатывается, как и следовало ожидать. Так, например, если кто-то отправляет SIGKILL на SQL Plus, транзакция сеанса должна быть отменена. Но если сеанс SQL Plus завершается корректно (EOF или команда выхода), тогда SQL * Plus в своей бесконечной мудрости решает зафиксировать все, что вы сделали до сих пор.
Что касается почему - у меня есть теория. В стандартных базах данных SQL вы всегда находитесь в транзакции, даже если единственная выполняемая вами операция - это оператор SELECT. Если вы не зафиксируете, то любые внесенные вами изменения будут отменены. Легко забыть добавить фиксацию в конец операций со сценарием, поэтому, сделав его поведением по умолчанию, уменьшилось количество раз, когда кто-то запускал сценарий для изменения базы данных, а затем запускал второй сценарий, чтобы проверить, правильно ли вступили в силу изменения. Другие СУБД устраняют необходимость в этом с помощью таких режимов, как «автоматическая фиксация», где каждый оператор является отдельной транзакцией, автоматически фиксируемой по завершении. Это полезный режим работы. Другие системы предоставляют режим, в котором вы находитесь в режиме автоматической фиксации, пока не запустите явный оператор BEGIN WORK, после чего (конечно) вы находитесь в транзакции до соответствующего COMMIT или ROLLBACK. Я был пойман базами данных MODE ANSI, которые не фиксируют достаточно часто, чтобы убедиться, что я фиксирую, когда это важно, но программное обеспечение, которое я использую (не Oracle), по-прежнему откатывает незавершенную работу, а не молча фиксирует ее за вас - и я был бы недоволен, если бы она была изменена для работы в противном случае. (Я полагаю, что настраиваемое значение по умолчанию может быть в порядке; я по-прежнему считаю, что откат незафиксированный - лучшее значение по умолчанию, поскольку все это неприятно для неосведомленных; меньше опасность случайного повреждения базы данных, и это имеет для меня первостепенное значение.)
( Должное уведомление: Это информация из вторых рук от кого-то, кто работает на другого поставщика СУБД. Однако, насколько мне известно, она точна и основана на информации, накопленной за более длительный период. более десяти лет и задав соответствующие вопросы на различных форумах.)
Это информация из вторых рук от кого-то, кто работает на другого поставщика СУБД. Однако, насколько мне известно, он точен и основан на информации, накопленной за более чем десятилетний период после того, как я задавал соответствующие вопросы на различных форумах.) Это информация из вторых рук от кого-то, кто работает на другого поставщика СУБД. Однако, насколько мне известно, он точен и основан на информации, накопленной за более чем десятилетний период после того, как я задавал соответствующие вопросы на различных форумах.)Вы должны спросить Oracle!
Должен признаться, я был удивлен, когда впервые обнаружил это, так как можно было подумать, что потребуется более консервативный подход, который заключался бы в выполнить ROLLBACK.
Я могу только догадываться, что COMMIT считается наиболее вероятным действием / действием по умолчанию, и, может быть, именно поэтому SQL * Plus это делает?
Хороший вопрос.
Я посмотрел на metalink и обнаружил ошибку (или запрос на изменение) в отношении поведения по умолчанию фиксации при нормальном выходе еще в 1998 году. Если у вас есть доступ к metalink, поищите ошибку 633247.
Я думаю, что коммит - хорошая идея, и я согласен с тем, что Джастин и Билли написали в этой ветке: http://forums.oracle.com/forums/thread.jspa? messageID = 3611345 & # 3611345
С уважением, Роб.