Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
SQL, PL/SQL, T-SQL: запросы, DML DDL операторы, пакеты, процедуры, функции, триггеры и последовательности.
  • Страница:
  • 1
  • 2

ТЕМА:

Oracle: Коммит после селекта 12 года 8 мес. назад #2892

Досталась в наследство одна прога, работающая с оракловой базой. И обнаружила я в ней странные (на мой взгляд конструкции) типа
begin
MainSQL.Open;
MainData.MainSession.Commit;
end;
Т.е. после КАЖДОГО селекта стоит коммит! Вот и мучает меня вопрос - зачем так сделано и нужно ли это ... ? И как это влияет на жизнь базы ?
А разработчика уже нету в России... Но, насколько я знаю, он на оракл с интербейза переползал, так может это рудимент какой интербейзовский ?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Коммит после селекта 12 года 8 мес. назад #2893

  • Doc
  • Doc аватар
  • Не в сети
  • Захожу иногда
  • Захожу иногда
  • Сообщений: 41
  • Спасибо получено: 0
например, под select-ом вызавается процедура, которая update-ить некую таблицу
или еще по крайней мере 2 варианта:

1. Программа работала с БД, в которой возможна блокировка при select'е, дело связано с необходимостью синхронизации данных на момент чтения. Если в Oracle при уровне изоляции READ COMMITTED позволяет остальным сессиям изменять записи, когда кто-то из выбирает в select'е, то, к примеру, в Sybase это вполне возможно. Может быть и в версионнике-Interbase такое тоже случается.

2. Устанавливался какой-то уровень изоляции типа repeated read, если это возможно в Interbase.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Коммит после селекта 12 года 8 мес. назад #2894

  • Gwen
  • Gwen аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 5
  • Спасибо получено: 0
"Попробуйте вызвать функцию с DML в select - Вы получите ошибку выполнения."

Скорее всего, это просто фиксация read-only транзакции. Может, где-то есть команда set transaction read only. А может просто глюк разработчика (что гораздо более вероятная вещь). Много таких по свету ходит, которые, к примеру, перед DML дают lock table in xxx mode...

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Коммит после селекта 12 года 8 мес. назад #2895

  • Myk
  • Myk аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 2
  • Спасибо получено: 0
begin
MainSQL.Open;
MainData.MainSession.Commit;
end;

А где здесь select? Откуда такая уверенность? Из-за
MainSQL.Open?
Но Open - это признак существования возвращаемых данных (в противоположенность Execute).

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Коммит после селекта 12 года 8 мес. назад #2896

  • Doc
  • Doc аватар
  • Не в сети
  • Захожу иногда
  • Захожу иногда
  • Сообщений: 41
  • Спасибо получено: 0
Действительно.
Чего мы гадаем-то на кофейной гуще. "Купились" :-)
Есть некие имена - MainSQL - которыми можно назвать что-угодно, например, TЧтоТоDataSet и при открытии, например, срабатывает триггер BeforeOpen,
который может делать непоймичто.
И компонентов Delphi уже много.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Коммит после селекта 12 года 8 мес. назад #2897

Ок, залезла, глянула, что там у нас за MainSQL :-)
Это обычный TOraQuery, и в нем обычный SQL-запрос - select * from table

Всё, что может изменять данные в таблицах, расположено отдельно от компонентов, просто извлекающих данные.
Команды set transaction read only в коде не нашел (также нигде не фигурирует просто transaction) Нигде нет и lock table...
Ведь я почему и спросила - этот самый MainSQL (да и не он один) гарантировано НЕ меняет данные, НЕ блокирует строки (select for update), так может действительно COMMIT не нужен после ОБЫЧНОГО select ?
И как могут влиять эти commit'ы на жизнь базы?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
  • 2
Время создания страницы: 0.227 секунд