Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Блокировка таблицы / 25 сообщений из 25, страница 1 из 1
28.12.2005, 13:57
    #33461930
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка таблицы
Резко встала
необходимость соорудить свой генератор Id'шек. Создана таблица
Код: plaintext
1.
2.
3.
4.
5.
create table IDS (
 TABLE_ID int not null,
 VALUE_ID numeric( 18 , 0 ) not null,
 TABLE_NAME D_SYSNAME null   
)
Ну... А далее все просто:
стартуется транзакция
генериться Id
записываются данные с новорожденным Id
commit
И тут уже пару раз вылезло, что на один и тот же Id повесилось несколько разных данных Ж8-/ Скорее всего это произошло из-за того, что уровень изоляции транзакции
select @@isolation
1

Transact-SQL User’s Guide
Уровень 1 - Здесь предполагается, что в каждой транзакции считываются фактические данные, а не данные, записанные не окончившейся транзакцией. Другими словами, здесь не допускается считывание неподтвержденных данных. Этот уровень изоляции устанавливается по умолчанию SQL Сервером

т.е. это READ_COMMITED. Выходит кто-то успел до commita транзакции в одном коннекте, считать данные в другом. А поскольку транзакция в первом коннекте еще не за'commit'чена, то и значение получено аналогичное. Отсюда вылезает, что надо блокировать таблицу, а еще лучше запись, а самый лучший вариант (если возможно) - поле.
Поскольку субася - блокировочник, то, я так понимаю, при старте транзакции происходит блокирование. Только вот как и где можно указать что я хочу заблокировать: таблицу, запись, поле?

select @@version
Adaptive Server Enterprise/12.5.1/EBF 11428/P/NT (IX86)/OS 4.0/ase1251/1823/32-bit/OPT/Wed Sep 17 11:10:54 2003

_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
28.12.2005, 15:06
    #33462209
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка таблицы
Так делаешь?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
declare @id bigint

begin tran
update ids set value_id=value_id+ 1  where table_id=...
--получаешь ID
select value_id into @id from ids where table_id=....
commit

--Юзаешь ID
insert into ....
...
Рейтинг: 0 / 0
28.12.2005, 15:23
    #33462287
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка таблицы
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
declare
  @id bigint

begin tran

update ids set value_id=value_id+ 1  where table_id=...
--получаешь ID
select value_id into @id from ids where table_id=....
--Юзаешь ID
insert into ....

commit

а в середине куча проверок - ежели чего - rollback
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
28.12.2005, 22:10
    #33463142
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка таблицы
update этой твоей таблицы ключей и так блокирует твою запись до конца транзакции. От чтения тоже. Блокируется либо страница, либо запись, в зависимости от схемы блокировки твоей ключевой таблицы (IDS). Я бы кстати рекомендовал иметь ее на DOL , конкретно - на DRL.
Изоляция транзакции тут ни при чем. Но если хочешь , можешь поставить именно у этого UPDATE-а at isolation 3 или 2. Хотя это, на сколько я могу сейчас сообразить, как ни странно, вообще ничего не поменяет.

Я думаю, что скорее у тебя проблема с пониманием того, почему у тебя происходить повторное использование одного и того же ключа.
Т.е. я думаю, что не из-за того, о чем ты думаешь, а из-за другого чего-то.
Потому что делаешь ты все правильно.
...
Рейтинг: 0 / 0
29.12.2005, 01:21
    #33463231
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка таблицы
Да я, вообще-то, всю жизнь просидел на IB/FB, а это - версионники. И для меня любое понятие вне контекста транзакции - нонсенс. А тут проект возник на субасе. Времени толком разбираться - нЭт
Вот и разбираюсь в ньюансах субаси и, соответственно, блокировочника - от случая к случаю... Как правило - когда вылазят грабли...
Из сказанного понял, что блокировку ставит не begin transaction, а следующий за ней update... Т.е.: если даже одновременно стартовали две транзакции, то выполнившая первой update и заблокирует?
MasterZivОт чтения тоже.Гы... Кто бы мог подумать... А я думал что если уровень изоляции READ_COMMITED, то другие транзакции, 4 example, как в IB/FB, читать могут...
MasterZivИзоляция транзакции тут ни при чем.В свете выше сказанного (что блокировка ставиться и на чтение) теперь это понятно... BTW, а можно ли тогда сделать, чтобы блокировалась только запись, а чтение было возможным?
MasterZivБлокируется либо страница, либо запись, в зависимости от схемы блокировки твоей ключевой таблицы (IDS). Я бы кстати рекомендовал иметь ее на DOL , конкретно - на DRL.А где и как можно указать схему блокировки таблицы и что такое DOL и DRL?
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
29.12.2005, 02:03
    #33463253
Александр Гoлдун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка таблицы
Ex_Soft пишет:

> Да я, вообще-то, всю жизнь просидел на IB/FB, а это - версионники. И для
> меня любое понятие вне контекста транзакции - нонсенс.

Надо было не только "просиживать" на IB/FB всю жизнь, а хотя бы изучить
этот самый IB/FB. В нем тоже есть понятия вне контекста транзакции, не
являющиеся нонсенсом. Например генераторы. А в FB еще кажется и внешние
таблицы вне транзакций.

> Из сказанного понял, что блокировку
> ставит не begin transaction, а следующий за ней update... Т.е.: если
> даже одновременно стартовали две транзакции, то выполнившая первой
> update и заблокирует?

Именно так. И, кстати, разве в FB не так в ситуации, когда две
транзакции пытаются апдейтить одну и ту же запись?

>> От чтения тоже.
> Гы... Кто бы мог подумать...

Любой, понимающий отличие блокировочника от версионника.

> А я думал что если уровень изоляции
> READ_COMMITED, то другие транзакции, 4 example, как в IB/FB, читать могут...

А что они смогут читать, если старое значение уже изменено на новое, но
оно еще не commited? (это утрированно, конечно)

> В свете выше сказанного (что блокировка ставиться и на чтение) теперь
> это понятно... BTW, а можно ли тогда сделать, чтобы блокировалась только
> запись, а чтение было возможным?

dirty read со всемы вытекающими последствиями.

И, кстати, если не секрет, зачем понадобилось изобретать свой велосипед?
Чем не устраивает identity в качестве генератора ID?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
29.12.2005, 06:21
    #33463298
Andyn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка таблицы
Александр ГoлдунИ, кстати, если не секрет, зачем понадобилось изобретать свой велосипед? Чем не устраивает identity в качестве генератора ID?Скорее всего потому что это попытка сэмулировать генератор. :) Ex_SoftДа я, вообще-то, всю жизнь просидел на IB/FBВ свое время, переводя проект с IB7 на ASA8 мне тоже пришлось решать такую задачу. К счастью, в ASA (с версии 8.0.1) есть функция GET_IDENTITY которая для таблицы с автоинкрементом резервирует одно или несколько значений ключа. Поэтому все решилось очень просто. :)

Кстати говоря, похоже ASE один обделен такой возможностью. Не знаю насчет MSSQL, но в Oracle можно тоже делать выборку значения sequence.nextval для получения значения ключа заранее, до записи в базу.
...
Рейтинг: 0 / 0
29.12.2005, 09:18
    #33463430
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка таблицы
Александр ГoлдунНапример генераторы...Совершенно справедливо. На то они и генераторы. Просто речь, как все поняли, шла именно в общем контексте версионной СУБД.
Александр ГoлдунИ, кстати, разве в FB не так в ситуации, когда две
транзакции пытаются апдейтить одну и ту же запись?Если очень интересно - Транзакции, архитектура IB
Александр ГoлдунА что они смогут читать, если старое значение уже изменено на новое, но оно еще не commited?Речь шла не о том, что (какие данные) они могут считать, а о том что они вообще могут читать.
Александр Гoлдунdirty read со всемы вытекающими последствиями.При чем тут уровень изоляции, когда MasterZivupdate этой твоей таблицы ключей и так блокирует твою запись до конца транзакции. От чтения тоже.
Александр ГoлдунИ, кстати, если не секрет, зачем понадобилось изобретать свой велосипед? Чем не устраивает identity в качестве генератора ID?Не секрет
ЭстЪ, 4 example, договор, выступающий в виде своего рода контейнера. И ЭстЪ документы входящие в него, 4 example - полисы. Ессесно, нумерация должна быть в контексте договора и непрерывная. Вариант генерить номера внутренних документов на ходу известен, рассматривался и не удовлетворил. Вот в двух словах...
AndynСкорее всего потому что это попытка сэмулировать генератор.Абсолютно в дырочку
И, исходя из быстрой и конструктивной реакции, - не я первый и, скорее всего, не я последний, занимающийся изобретением лисапета
Тем более метод, который я использую, практически стал стандартом де-факто (просто иногда его ната немного обработать напильником в зависимости от особенностей СУБД)

P.S. 2Александр Гoлдун А че Вы так на меня накинулись? На Вас подействовало упоминание об IB/FB как красная тряпка? BTW, из всех постов в данном топике только у вашего КПД нулевой. Его преспокойненько без ущерба можно перенести в ПТ .
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
29.12.2005, 11:49
    #33463867
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка таблицы
Из сказанного понял, что блокировку ставит не begin transaction, а следующий за ней update... Т.е.: если даже одновременно стартовали две транзакции, то выполнившая первой update и заблокирует?

ДА.

MasterZivОт чтения тоже.Гы... Кто бы мог подумать... А я думал что если уровень изоляции READ_COMMITED, то другие транзакции, 4 example, как в IB/FB, читать могут...

От так вот. Эт тебе не Интербаза. Тут фсе сирьёзна !!

MasterZivИзоляция транзакции тут ни при чем.

В свете выше сказанного (что блокировка ставиться и на чтение) теперь это понятно... BTW, а можно ли тогда сделать, чтобы блокировалась только запись, а чтение было возможным?

Если говорить в общем - нет. Но есть нюансы. Например - блокировка на уровне полей, т.е. по идее если ты читаешь неизмененное поле, тебе дадут.

А где и как можно указать схему блокировки таблицы и что такое DOL и DRL?

sp_help TABLENAME вконце выдает схему блокирования.
Всего бывают два вида и три типа блокирования.
APL - all pages locking, классика. Блокируются страницы данных и страницы индексов.
DOL - data only locked table Новая схема блокировки, появившаяся с 11.9.
Блокируются только страницы или строки данных, индексы не блокируются на время транзакции никогда.
DOL отличается от APL другой структурой хранения данных, и DOL бывает двух видов, (которые используют одну и ту же структуру данных)
DPL data pages locking
DRL data rows locking
которые блокируют соответственно только страницы или только строки данных.
...
Рейтинг: 0 / 0
29.12.2005, 12:58
    #33464131
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка таблицы
MasterZivДА.А select заблокирует (если он будет после begin transaction, но перед DML(insert/update/delete))? Или это прерогатива только DML'я?
MasterZivТут фсе сирьёзна !!Страшно аж жуть!!!

MasterZivНо есть нюансы. Например - блокировка на уровне полей, т.е. по идее если ты читаешь неизмененное поле, тебе дадут.А как сие можно забалабенитЪ
? Так сказать для общего развтия и повышения вченности
...
Ex_SoftА где и как можно указать схему блокировки таблицы
refman2.pdf
create table ... lock {datarows | datapages | allpages }

Оно?
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
29.12.2005, 13:22
    #33464201
Andyn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка таблицы
Ex_SoftАбсолютно в дырочку
И, исходя из быстрой и конструктивной реакции, - не я первый и, скорее всего, не я последний, занимающийся изобретением лисапета
Тем более метод, который я использую, практически стал стандартом де-факто (просто иногда его ната немного обработать напильником в зависимости от особенностей СУБД) В качестве варианта, при условии, что некритично иметь в каждой таблице значения ключа по порядку (типа 1,2,3 ...) то навскидку могу предложить:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
create table IDS (
 TABLE_ID numeric( 10 , 0 ) identity not null,
 TABLE_NAME D_SYSNAME null   
)

create procedure GET_ID_VALUE (@P_TABLE_NAME D_SYSNAME = null)
as
begin
  insert into IDS (TABLE_NAME) values (@P_TABLE_NAME)

  select @@identity
end

Если не прав, знатоки ASE объяснят, что почем. :)
...
Рейтинг: 0 / 0
29.12.2005, 13:44
    #33464265
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка таблицы
Ex_Soft
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
declare
  @id bigint

begin tran

update ids set value_id=value_id+ 1  where table_id=...
--получаешь ID
select value_id into @id from ids where table_id=....
--Юзаешь ID
insert into ....

commit

а в середине куча проверок - ежели чего - rollback
_________________
"Helo, word!" - 17 errors 56 warnings

Получается, что пока один юзер не доделал свою транзакцию другие - идут покурить? А ты точно следишь за тем ГДЕ у тебя коммит/роллбак?
...
Рейтинг: 0 / 0
29.12.2005, 14:12
    #33464358
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка таблицы
Andynпри условии, что некритично иметь в каждой таблице значения ключа по порядку (типа 1,2,3 ...)Как раз критично ;) Согласитесь, если бы Вы получили договор в котором есть Полис N1, Полис N2, Полис N5, Полис N6, то Вы сразу бы забеспокоились на предмет наличия отсутствия Полис N3, Полис N4 ;)
gardenmanПолучается, что пока один юзер не доделал свою транзакцию другие - идут покурить?Получается так... Но там внутри пару операторов - так, что они даже забить
косячек не успеют... Причем по совету MasterZiv пересоздал с lock datarows (потому как по TABLE_ID понятно, что в ней сидят аналогичные ID'шки и других таблиц) - шоб другим не мешать ;)
gardenmanА ты точно следишь за тем ГДЕ у тебя коммит/роллбак?В смысле?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
declare
  @id bigint,
  @RetValue int

begin tran

update ids set value_id=value_id+ 1  where table_id=...
select @RetValue=@@error
if @RetValue!= 0 
  begin
    rollback transaction
    return(@RetValue)
  end

--получаешь ID
select value_id into @id from ids where table_id=....

--Юзаешь ID
insert into ....
select @RetValue=@@error
if @RetValue!= 0 
  begin
    rollback transaction
    return(@RetValue)
  end

commit

return(@RetValue)
Листинг уже замусолил до дыр... Все стоит на своих местах...
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
29.12.2005, 15:24
    #33464601
Александр Гoлдун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка таблицы
Ex_Soft пишет:

> Если очень интересно - Транзакции, архитектура IB
> <http://ibase.ru/develop.htm>

Уже не интересно. Я очень давно все это штудировал.

>> dirty read со всемы вытекающими последствиями.
> При чем тут уровень изоляции, когда

Как это при чем? При dirty read как раз можно будет спокойно прочитать
значение, даже если еще на закоммичена транзакция. Но, естественно, надо
четко осознавать, что это значение еще нельзя считать легитимным.

> P.S. 2Александр Гoлдун А че Вы так на меня накинулись?

Вам показалось. Ничего личного.

> BTW, из всех
> постов в данном топике только у вашего КПД нулевой. Его преспокойненько
> без ущерба можно перенести в ПТ

Ну, это модераторы решат. Я просто всегда пытаюсь подойти к проблеме с
чуть более глобальной стороны. Иногда, когда человек просит помочь
перелезть через забор с колючей проволокой, вовсе не обязательно
помогать ему именно в этом. Достаточно понять, что человек все же хочет
не столько перелезть, сколько оказатся на территории. Тогда можно просто
показать открытые ворота. Это не всегда так, но в заметном числе случаев
решать задачу в лоб необязательно.

> 4 example, договор,
> выступающий в виде своего рода контейнера. И ЭстЪ документы входящие в
> него, 4 example - полисы. Ессесно, нумерация должна быть в контексте
> договора и непрерывная. Вариант генерить номера внутренних
> документов на ходу известен, рассматривался и не удовлетворил.

Это действительно распространенная задача. Только вот возлагать ее
решение на генераторы imho не самый лучший вариант. А как быть, если в
процессе правки происходит активная работа с полисами, вплоть до
удаления и создания новых? Я обычно в подобных случаях даю пользователю
возможность перенумеровать как автоматически, так и вручную.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
29.12.2005, 16:12
    #33464739
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка таблицы
Александр ГoлдунКак это при чем? При dirty read как раз можно будет спокойно прочитать значение, даже если еще на закоммичена транзакция.
Гм... Но если MasterZivupdate этой твоей таблицы ключей и так блокирует твою запись до конца транзакции. От чтения тоже. то какая разница какой уровень изоляции: dirty read, read commited, snapshot - никто все равно прочитать не может . По крайней мере, я выше указанное предложение трактовал для себя таким образом.
Александр ГoлдунЯ просто всегда пытаюсь подойти к проблеме с
чуть более глобальной стороны.Аналогично... Но бывают моменты (сам, иногда, грешу таким), когда, не зная всей постановки задачи (когда человек предоставляет только локальную проблему, а расписывать ему все глобально попросту нет времени, да и незачем), со строны кажеться, что человек "...хочет странного...". А всего-то, что необходимо человеку, так это попросту решить эту локальную проблему. И все... ;)


_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
29.12.2005, 16:51
    #33464827
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка таблицы
Александр ГoлдунКак это при чем? При dirty read как раз можно будет спокойно прочитать значение, даже если еще на закоммичена транзакция.
На характер проверил:

SQL Advantage (Session 1)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create table IDS (
  TABLE_ID int not null,
  VALUE_ID numeric( 18 , 0 ) not null,
  TABLE_NAME D_SYSNAME null   
)
lock datarows on 'default'
go

insert into IDS (TABLE_ID, VALUE_ID, TABLE_NAME) values ( 1 , 1 ,'1')

begin transaction
update IDS set VALUE_ID= 2 , TABLE_NAME='2' where (TABLE_ID= 1 )

SQL Advantage (Session 2)
Код: plaintext
1.
select * from ids where table_id= 1 
и...
SQL Advantage (Session 2)
Executing...


и только после

SQL Advantage (Session 1)
Код: plaintext
1.
commit transaction

SQL Advantage (Session 2)
TABLE_ID VALUE_ID TABLE_NAME
----------- -------------------- ----------
1 2 2

так что прочитать-таки действительно нельзя
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
29.12.2005, 16:52
    #33464831
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка таблицы
Ex_Soft wrote:

> так что прочитать-таки действительно *_нельзя_*

Значит, это был не Dirty Read :).
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
29.12.2005, 17:09
    #33464865
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка таблицы
в сессии 2 перед тем как делать select сделай
set transaction isolation level 0
или как там.. не помню уже.
...
Рейтинг: 0 / 0
29.12.2005, 17:20
    #33464894
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка таблицы
Dim2000Значит, это был не Dirty Read
gardenmanset transaction isolation level 0
Совершенно верно - прочиталось... Вот теперь у меня все устаканилось в гольове ;) Всем спасибо!
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
29.12.2005, 17:52
    #33464965
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка таблицы
Ex_Soft wrote:

> Совершенно верно - прочиталось...

Куда бы оно делось с подводной лодки ... собственно, DR тем и хорош,
что никогда не блокирует читателей.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
29.12.2005, 17:55
    #33464971
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка таблицы
[quot Ex_Soft]
А select заблокирует (если он будет после begin transaction, но перед DML(insert/update/delete))? Или это прерогатива только DML'я?
Во-первых, SELECT -тоже DML. Это о терминах.
Во-вторых, да, заблокирует, но только для ИЗМЕНЕНИЯ и возможно (в зависимости от уровня изоляции) для добавления. И также в зависимости от уровня изоляции может быть только на время чтения (данной страницы/строки) или до конца транзакции.

А как сие можно забалабенитЪ

Нипонил.

create table ... lock {datarows | datapages | allpages }
Оно?

Оно ...
...
Рейтинг: 0 / 0
29.12.2005, 18:02
    #33464984
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка таблицы
[quot Ex_Soft]
От чтения тоже.

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

Не, Александр прав на все 100%. Я просто не указал это, потому что полагал это само собой разумеющимся. Т.е.
UPDATE (delete) блокирует данную запись (страницу) от записи и чтения до конца транзакции для всех других транзакций, кроме транзакций чтения на уровне изоляции DIRTY READ (почему "чтения" - потому что изменнеия данных на DirtyRead не бывает).
...
Рейтинг: 0 / 0
29.12.2005, 18:34
    #33465014
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка таблицы
MasterZivНипонил
MasterZivНо есть нюансы. Например - блокировка на уровне полей , т.е. по идее если ты читаешь неизмененное поле, тебе дадут.Как можно в субасе организовать блокировку на уровне полей? На пальцах, если можно и не в облом, обЪясните, pls...
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
29.12.2005, 19:04
    #33465045
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка таблицы
А, понил.

А никак не надо ничего организовывать. Она и так работает всегда.
Скорее с ней надо бороться, когда она мешает. А бороться известно как


Код: plaintext
1.
2.
3.
4.
5.
6.
update MYTABLE
  set flda = @flda,
       fldb = fldb,
       fldc = fldc -- etc
where ....

...
Рейтинг: 0 / 0
30.12.2005, 06:44
    #33465246
Andyn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка таблицы
Ex_SoftКак раз критично ;) Согласитесь, если бы Вы получили договор в котором есть Полис N1, Полис N2, Полис N5, Полис N6, то Вы сразу бы забеспокоились на предмет наличия отсутствия Полис N3, Полис N4 ;) Ну, если продолжить изобретение велосипедов по эмулированию работы генераторов :) то можно было бы создать N табличек вида:

Код: plaintext
create table IDS_<имя_таблицы> (TABLE_ID numeric( 10 , 0 ) identity not null, DUMMY_COL int null)

и процедуру вида:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
create procedure GET_ID_VALUE (@P_TABLE_NAME D_SYSNAME = null)
as
begin
  declare @p_sql varchar( 255 )
  declare @p_id numeric( 10 , 0 )

  select @p_sql = ' insert into IDS_' + @P_TABLE_NAME + 'values (1)';
  
  save transaction <имя_точки_сохранения>

  execute(@p_sql)

  select @p_id = @@identity

  rollback transaction <имя_точки_сохранения>

  select @p_id
end

Но это, ИМХО, уже извращение. Лучше уж тогда завести пул идентификаторов.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Блокировка таблицы / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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