Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / темповые таблицы и транзакции / 24 сообщений из 24, страница 1 из 1
21.08.2008, 16:46
    #35499908
boogiman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
темповые таблицы и транзакции
Привет всем! Очень нужен совет. Как обойти - такую проблему, може кто подскажет? Постоянные таблицы с id сессии - мне не подойдут...
...
Рейтинг: 0 / 0
21.08.2008, 17:10
    #35499997
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
темповые таблицы и транзакции
А зачем у тебя там begin tran стоит? Убери скорее пока никто больше не увидел.
...
Рейтинг: 0 / 0
21.08.2008, 17:14
    #35500012
boogiman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
темповые таблицы и транзакции
Ответ неверный, убирать не буду... Верный ответ таков... создавать темповые таблицы до процедуры и дропать после отработки...
...
Рейтинг: 0 / 0
21.08.2008, 17:24
    #35500046
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
темповые таблицы и транзакции
boogimanОтвет неверный, убирать не буду... Верный ответ таков... создавать темповые таблицы до процедуры и дропать после отработки...Глупости какие.
Временные таблицы прекрасно создаются внутри хранимок и убиваются автоматически по окончанию хранимки. А вот управлять транзакциями внутри ХП это напрашиваться на геморрой.
...
Рейтинг: 0 / 0
21.08.2008, 17:46
    #35500125
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
темповые таблицы и транзакции
boogimanОтвет неверный, убирать не буду... Верный ответ таков... создавать темповые таблицы до процедуры и дропать после отработки...

Нет, всё равно неверный ответ. Надо создавать временные таблицы ДО НАЧАЛА ТРАНЗАКЦИИ.
...
Рейтинг: 0 / 0
21.08.2008, 17:47
    #35500127
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
темповые таблицы и транзакции
Да, и не дропать - сами дропаются.
...
Рейтинг: 0 / 0
21.08.2008, 17:48
    #35500138
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
темповые таблицы и транзакции
White Owl wrote:

> Временные таблицы прекрасно создаются внутри хранимок и убиваются
> автоматически по окончанию хранимки. А вот управлять транзакциями внутри
> ХП это напрашиваться на геморрой.

"Это в тебе кричит твой "... anywhere-вский ... "вакуум !".
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
21.08.2008, 17:50
    #35500145
cherrex_Den
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
темповые таблицы и транзакции
Если по провилу, то надо создать две процедуры, одна создает "времянку", вторая рабоает с ней. Из той что "создает" вызывается та которая "рботает". А оборачивать создание в транзакцию нестоит. ИМХО

P.S. А СУБД какая?
...
Рейтинг: 0 / 0
21.08.2008, 18:11
    #35500207
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
темповые таблицы и транзакции
MasterZiv"Это в тебе кричит твой "... anywhere-вский ... "вакуум !".Чего-чего? Какой вакуум?
...
Рейтинг: 0 / 0
21.08.2008, 18:39
    #35500263
boogiman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
темповые таблицы и транзакции
MasterZiv прав! Я придумал, что во внешней процедуре, я создаю времянки выполняю внутреннюю процедуру, которая юзает эти таблицы. А потом опять же времянки во внешней и дропаю. begin tran commit tran , делаю во внутренней процедуре. drop - ать надо, это как бы в хороших правилах программирования, что сам создал, то сам и должен убить :)
...
Рейтинг: 0 / 0
21.08.2008, 19:46
    #35500353
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
темповые таблицы и транзакции
НЕЛЬЗЯ создавать транзакции внутри хранимой процедуры. И вдвойне нельзя их коммитить внутри хранимой процедуры.
...
Рейтинг: 0 / 0
21.08.2008, 20:05
    #35500365
cherrex_Den
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
темповые таблицы и транзакции
White OwlНЕЛЬЗЯ создавать транзакции внутри хранимой процедуры. И вдвойне нельзя их коммитить внутри хранимой процедуры.

Почему НЕЛЬЗЯ? Можно ссылку!
...
Рейтинг: 0 / 0
21.08.2008, 20:09
    #35500368
boogiman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
темповые таблицы и транзакции
Это вам кто такое сказал? Скажем так ... Допустим я создаю проводку двойным инсертом. Одна таблица заголовок (дебет , кредит, id), вторая всё остальное назначение платежа аналитику ,код подразделение и т.д. Предположим что делаем проводку внутри 1- ой процедуры... Например не используя транзакцию, можно налететь на ситуацию, когда произошёл обрыв связи по сети с сервером или юзер случайно нажал отмену. Первый инсерт прошёл, второй нет... Получается уже мусорка в базе... В случае одно й транзакции... Можно проверять перед второй вставкой на ошибку и при присутствии таковой. Целиком откатывать транзакцию.
...
Рейтинг: 0 / 0
21.08.2008, 20:53
    #35500410
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
темповые таблицы и транзакции
Вот именно. А как ты собираешься это все проделать если у тебя транзакция и открылась и закрылась внутри ХП? Как ты сможешь теперь с клиента послать rollback? Что он будет откатывать? Изменения сделанные после того как ХП отработала?
Клиент и только клиент может и должен посылать begin tran и commit/rollback.
...
Рейтинг: 0 / 0
21.08.2008, 21:02
    #35500420
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
темповые таблицы и транзакции
boogiman wrote:

> MasterZiv прав! Я придумал, что во внешней процедуре, я создаю времянки
> выполняю внутреннюю процедуру, которая юзает эти таблицы. А потом опять
> же времянки во внешней и дропаю. begin tran commit tran , делаю во
> внутренней процедуре. drop - ать надо, это как бы в хороших правилах
> программирования, что сам создал, то сам и должен убить :)

Дропать не надо , дропаются они сами. Создавать можно и в этой же процедуре,
главное - не в транзакции.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
21.08.2008, 21:03
    #35500423
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
темповые таблицы и транзакции
White Owl wrote:

> НЕЛЬЗЯ создавать транзакции внутри хранимой процедуры. И вдвойне нельзя
> их коммитить внутри хранимой процедуры.

Это - спорный вопрос. Если хочешь, открывай новый топик и спорь.
К данному топику он отношения не имеет.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
21.08.2008, 21:07
    #35500429
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
темповые таблицы и транзакции
White Owl wrote:

> Вот именно. А как ты собираешься это все проделать если у тебя
> транзакция и открылась и закрылась внутри ХП? Как ты сможешь теперь с
> клиента послать rollback? Ч

А не надо с клиента посылать ни ROLLBACK, ни COMMIT.

Я вот не понимаю, зачем ветку не туда уводишь ? Тебя же не спрашивали,
можно или нет рулить транзакциями в процедурах. Можно это делать ?
Можно. Можно НЕ делать ? Тоже можно. Что тут обсуждать ?
Нас же спрашивали, как временные таблицы создавать.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
21.08.2008, 22:00
    #35500481
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
темповые таблицы и транзакции
MasterZivНас же спрашивали, как временные таблицы создавать.Ну я и ответил "убери begin tran". Ты ж не будешь спорить с тем что самый простой способ починить показанную процедуру - убрать из нее работу с транзакциями?
...
Рейтинг: 0 / 0
21.08.2008, 23:43
    #35500572
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
темповые таблицы и транзакции
White Owl wrote:

> Ну я и ответил "убери begin tran". Ты ж не будешь спорить с тем что
> самый простой способ починить показанную процедуру - убрать из нее
> работу с транзакциями?

Но это изменение не будет функционально эквивалентным.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
22.08.2008, 00:15
    #35500604
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
темповые таблицы и транзакции
MasterZivНо это изменение не будет функционально эквивалентным.Конечно не будет. Раньше не работало, теперь будет работать. Какая уж тут эквивалентность!
...
Рейтинг: 0 / 0
22.08.2008, 01:09
    #35500622
Kru
Kru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
темповые таблицы и транзакции
На самом деле можно и временную таблицу внутри транзакции создать. Для этого нужно в свойствах tempDb один флажок выставить (не помню какой).
Можно даже именно для вашей базы отдельную tempDb создать (начиная с 12.5.4 кажется можно несколько tempdb иметь) в в ней это флажок выставить.
Тогда создание объектов будет разрешено только в транзакциях выполняемых из Вашей БД.

Второй вопрос - насколько Вам действительно нужно создавать временную таблицу в транзакции.
Цена вопроса - не только сложность решения, но и возможное снижение производительности.
...
Рейтинг: 0 / 0
22.08.2008, 10:54
    #35500995
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
темповые таблицы и транзакции
Kru wrote:

> На самом деле можно и временную таблицу внутри транзакции создать. Для
> этого нужно в свойствах tempDb один флажок выставить (не помню какой).

Конечно, можно ! Весь сервак застопорить до конца этой твоей транзакции.
Конечно можно ! Зачем только ?

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
22.08.2008, 17:31
    #35502342
Kru
Kru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
темповые таблицы и транзакции
MasterZiv
Kru wrote:

> На самом деле можно и временную таблицу внутри транзакции создать. Для
> этого нужно в свойствах tempDb один флажок выставить (не помню какой).

Конечно, можно ! Весь сервак застопорить до конца этой твоей транзакции.
Конечно можно ! Зачем только ?

Posted via ActualForum NNTP Server 1.4

Зачем? В жизни всякое бывает. В примере приведённом автором топика процедура написана неправильно. Но, в моём опыте был эпизод, когда разработчики клиента решили в одну, клиентскую транзакцию запихать несколько процедур в которых создавались временные таблицы.
Результат был очевиден - такая-же ошибка как в начале топика.

Приложение было старое, большей частью отлаженное и менять процедуры, которые использовались разными процессами никто не позволил.

Оставалось одно из двух или от транзакции отказываться или галку (о которой я писал) в свойствах TempDb взводить.
Промежуточное решение - отдельная TempDb, т.к. взводить галку на боевой системе администратор не разрешил.

В конце концов порешили просто отказаться от транзакции на клиенте. (Думаю, что целостность потом проверяли отдельно и корректировали если что - а как ещё быть!?)

Это, кстати, на заметку автору утверждения, что транзакции всегда должны быть на клиенте.
В жизни всё сложнее чем в теории.
...
Рейтинг: 0 / 0
05.09.2008, 19:09
    #35525498
0rc
0rc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
темповые таблицы и транзакции
12.5.1
ddl in tran
ЗЫЖ не всегда можно делать все по правилам :(
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / темповые таблицы и транзакции / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]